Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

1

主题
1#
发表于 2013-2-6 11:21:16 | 查看: 6496| 回复: 5
昨天发现数据库里有tx堵塞,检查被堵的sql都是准备要执行select ... for update的语句。然后又检查了一下堵塞的会话,发现是个INACTIVE状态的,都没有sql_id了,但是通过模块名和发起的时间判断是同一个程序,执行的语句也应该是select ... for update。

分析应该是程序的逻辑有问题,但是为什么状态为INACTIVE的会话还会堵塞其他会话呢,INACTIVE状态的会话也会持有锁?

另外总是能遇到状态是INACTIVE的,但是还有sql_id,通过sql_id去查sql语句却又查不到,这是咋回事呢?
2#
发表于 2013-2-6 13:16:50
INACTIVE状态的会话也会持有锁?==> 当然!

举个例子 一个session  执行了一个DML 锁住某一个行数据, 之后一直 IDLE 什么命令都不执行 那么自然是INACTIVE状态,  另一个session B若要更新同样的行 则被原session block阻塞。

这有什么好奇怪的吗?

回复 只看该作者 道具 举报

3#
发表于 2013-2-6 13:29:56
prev_sql_id应该有东西的吧

回复 只看该作者 道具 举报

4#
发表于 2013-2-6 13:58:59
可能是楼主没明白ACTIVE与INACTIVE的意思吧。
ACTIVE - Session currently executing SQL        INACTIVE相反

回复 只看该作者 道具 举报

5#
发表于 2013-2-6 15:40:49
没有释放锁,就一直阻塞啊

回复 只看该作者 道具 举报

6#
发表于 2013-2-6 15:59:43
多谢各位老大,我明白了

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 06:39 , Processed in 0.048797 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569