1 / 21
文档名称:

oracle常见死锁发生的原因以及解决方法.doc

格式:doc   大小:305KB   页数:21页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

oracle常见死锁发生的原因以及解决方法.doc

上传人:小屁孩 2020/7/23 文件大小:305 KB

下载得到文件列表

oracle常见死锁发生的原因以及解决方法.doc

文档介绍

文档介绍:Oracle常见死锁发生的原因以及解决方法Oracle常见死锁发生的原因以及解决办法一,删除和更新之间引起的死锁造成死锁的原因就是多个线程或进程对同一个资源的争抢或相互依赖。这里列举一个对同一个资源的争抢造成死锁的实例。Oracle10g,PL/ TABLE testLock(  ID NUMBER, test VARCHAR(100)  ) COMMIT   INSERT INTO testLock VALUES(1,'test1'); INSERT INTO testLock VALUES(2,'test2'); COMMIT; SELECT * FROM testLock             ID TEST  ---------- ----------------------------------           1 test1           2 test2   死锁现象的重现:1)在sql窗口执行:SELECT*FROMtestLockFORUPDATE;--加行级锁并对内容进行修改,不要提交2)mand窗口,执行:deletefromtestLockWHEREID=1;此时发生死锁(注意此时要另开一个窗口,不然会提示:):3)死锁查看:SQL>  select ,, ,#, ,,, from v$session s,v$locked_object l where  = ;</p><p>USERNAME    SESSION_ID  SERIAL#    LOCKWAIT STATUS   MACHINE                 PROGRAM  ----------  ----------  ---------- -------- -------- ----------------------  ------------  SYS         146         104                 INACTIVE WORKGROUP\J-THINK         SYS         144         145        20834474 ACTIVE   WORKGROUP\J-THINK       :Username:死锁语句所用的数据库用户;SID:sessionidentifier,session标示符,session是通信双方从开始通信到通信结束期间的一个上下文。SERIAL#:sid会重用,但是同一个sid被重用时,serial#会增加,不会重复。Lockwait:可以通过这个字段查询出当前正在等待的锁的相关信息。Status:用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。Machine:死锁语句所在的机器。Program:产生死锁的语句主要来自哪个应用程序。4)查看引起死锁的语句:SQL>  select sql_text from v$sql where hash_value in   (select sql_hash_value from v$session where sid in  (select session_id from v$locked_object));    SQL_TEXT  ------------------------------------------------------------  delete from testLock where  ID = 1  5)死锁的处理:SQL> alter system kill session '144,145';    System altered    Executed in  seconds  此时在执行delete语句的窗口出现:SQL> delete from testLock where  ID = 1;    delete from testLock where  ID = 1    ORA-00028: 您的会话己被终止  再查看一下死锁,会发现已经没有stauts为active的记录了:SQL>  select , ,#, ,,