关于没有commit的死锁问题

数据刚迁移到ORACLE,测试时看到一存储过程,一到UPDATE 语句时,就定在那里了,无法再走一去。

开始是以为其它的什么原因,准备进行

跟踪 存储过程,看update table_name语句的瓶颈。


--修改跟踪文件
SQL> alter session set tracefile_identifier=TANG;
Session altered


SQL> alter session set sql_trace=true;
Session altered

看到在COMMAND 窗口下,测试存储过程总出错,

那就回到sql 窗口下去。


--建立一个登录启用跟踪触发器
create or replace trigger trace_login_trigger_tang
    after logon on database
begin
    if user = 'TANG' then
        execute immediate 'alter session set tracefile_identifier = TANG';
        dbms_session.session_trace_enable(waits => TRUE, binds => FALSE,
         plan_stat => 'all_executions');    
    end if;

end;

查看当前会话,

enq:TX-row lock contenction 等待达到 了100%

查询锁情况:
select s.sid,  s.serial#,  s.username,
 machine, a.object_name, decode(locked_mode, 0,
'None',1,'Null',2,'Row share',3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_type,
paddr,p.addr,p.spid
from v$session s, v$locked_object l, all_objects a, v$process p
where s.sid = l.session_id
and p.addr = paddr
and l.object_id = a.object_id;

查询锁情况:
       SID    SERIAL#    USERNAME    MACHINE    OBJECT_NAME    LOCK_TYPE    PADDR    ADDR    SPID
1    17    14129    TANG    WORKGROUP\UYLF3RKKWO8D59O    MT_CARD_AUDIT    Row Exclusive    000000022251D050    000000022251D050    15671
2    17    14129    TANG    WORKGROUP\UYLF3RKKWO8D59O    MT_CARD_AUDIT    Row Exclusive    000000022251D050    000000022251D050    15671


跟踪等待事件:
       SID    SERIAL#    USERNAME    MACHINE    PROGRAM    EVENT
1    17    14129    TANG    WORKGROUP\UYLF3RKKWO8D59O    plsqldev.exe    SQL*Net message from client

看到一直在等待状态;


杀掉Oracle进程中的锁实操
    alter system kill session '42,21993';  
(其中24,111分别是上面查询出的sid,serial#)

问题解决。
再次查看存储过程,确实是每次UPDATE后,没有COMMIT;
这就是ORACLE与SQL SERVER 的区别所在,很久没写ORACLE代码,教训呀!!!!

以下帖子,启发很大
http://www.itpub.net/thread-1753611-1-1.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值