Oracle 查dml语句,(ORACLE)如何查出引起DML锁的SQL语句

这里介绍一种方法查出引起DML锁的SQL语句

当然,此方法可能会查询不出结果

SQL> conn @test ">zhu/zhu@test

已连接。

SQL> insert into t values(200);

已创建 1 行。

SQL> conn @test ">zhuyz/zhuyz@test

已连接。

SQL> insert into tlog values(1000);

已创建 1 行。

SQL> select oracle_username,session_id,locked_mode from v$locked_object;

ORACLE_USERNAME                SESSION_ID LOCKED_MODE

-

ZHU                                   600           3

ZHUYZ                                 721           3

select t1.oracle_username usename,

t1.session_id,

t3.sql_text

from   v$locked_object t1,

v$session       t2,

v$sql           t3

where  t1.session_id = t2.sid

and    decode(t2.sql_address,'00',t2.prev_sql_addr,t2.sql_address) = t3.address

USENAME  SESSION_ID  SQL_TEXT

ZHU      600         insert into t values(200)

ZHUYZ    721         insert into tlog values(1000)

如果SQL是这样执行的

SQL> insert into t values(200);

已创建 1 行。

SQL> select * from t;

那么如上SQL没法查出INSERT语句,

因为prov_sql_addr记录的是最近一次执行的SQL的地址

然后我们还可以这样查,可以分析出是什么DML语句

select * from v$sqlarea t

where  t.parsing_schema_name in('ZHU','ZHUYZ')

order  by t.last_active_time desc;

上述两种查法,均可能查询不出是什么DML引起的锁

但是能查出的可能性非常大,

或者也可以查历史视图,但是历史视图的数据是采样的,也不能保证100%能查到

此外,我们还可以通过trace(慎用,严重影响性能),

或者logminer等方法来查询操作痕迹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值