产生死锁分很多种情况,我们最常见的是外健上面没有添加索引或者逻辑问题,当发生死锁时都会生成一个trace文件,这个文件名在alert中都有记载,通常我们会看到下面一段
当看到trace文件时我们需要确认一下产生锁的类型,是两行还是一行,是TX还是TM,如果只有一行说明是同一个session,可能是自治事务引起的死锁
如上图中锁的类型为
TX X X
TX X X
锁的类型和引起的原因如下:
锁情的情况 | 锁类型 | 请求锁 | 死锁类型 | 引起原因 | 注释 |
TX锁,请求 X (6)锁 | TX | X(6) | TX X X | 程序问题 | 应用程序逻辑问题 |
TM锁,请求 SSX (5)锁 | TM | SSX (5) | TM SX SSX SX SSX | 外键无索引 | TM 锁,占用 SX (3)锁, 请求SSX (5)锁 |
TX锁,请求 S(4) 锁 | TX | S(4) | TX X S | 事务槽满了或有bitmap索引 | TX 锁占用 X (6),请求 S (4) |
TX锁,请求 X (6),只有一行信息 | TX | X(6) | TX X X | 自锁 | 通常为自治事务引起的 |
Oracle同时提供了诊断锁类型的文档见:1550091.2
Oracle锁的型号如下:
0 - none
1 - null (NULL)
2 - Row Share, also called a subshare table lock (SS)
3 - Row eXclusive Table Lock, also called a subexclusive table lock (SX)
4 - Share Table Lock (S)
5 - Share Row-eXclusive, also called a share-subexclusive table lock (SSX)
6 - EXclusive (X)
参考文档:ID 1507093.1
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21605631/viewspace-763991/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21605631/viewspace-763991/