如果查询结果表明,死锁是由于bitmap索引引起的,将IND_T_PRODUCT_HIS_STATE索引改为normal索引后,即可解决死锁的问题。
| 表1 Oracle的TM锁类型 | |||
| 锁模式 | 锁描述 | 解释 | SQL操作 |
| 0 | none | ||
| 1 | NULL | 空 | Select |
| 2 | SS(Row-S) | 行级共享锁,其他对象只能查询这些数据行 |
Select for update、Lock for update、Lock row share |
| 3 | SX(Row-X) | 行级排它锁,在提交前不允许做DML操作 |
Insert、Update、Delete、Lock row share |
| 4 | S(Share) | 共享锁 | Create index、Lock share |
| 5 | SSX(S/Row-X) | 共享行级排它锁 | Lock share row exclusive |
| 6 | X(Exclusive) | 排它锁 |
Alter table、Drop able、Drop index、Truncate table 、Lock exclusive |
| 表2 数据字典视图说明 | ||
| 视图名 | 描述 | 主要字段说明 |
| v$session | 查询会话的信息和锁的信息。 |
sid,serial#:表示会话信息。 program:表示会话的应用程序信息。 row_wait_obj#:表示等待的对象。 和dba_objects中的object_id相对应。 |
| v$session_wait | 查询等待的会话信息。 |
sid:表示持有锁的会话信息。 Seconds_in_wait:表示等待持续的时间信息 Event:表示会话等待的事件。 |
| v$lock | 列出系统中的所有的锁。 |
Sid:表示持有锁的会话信息。 Type:表示锁的类型。值包括TM和TX等。 ID1:表示锁的对象标识。 lmode,request:表示会话等待的锁模式的信 息。用数字0-6表示,和表1相对应。 |
| dba_locks | 对v$lock的格式化视图。 |
Session_id:和v$lock中的Sid对应。 Lock_type:和v$lock中的type对应。 Lock_ID1: 和v$lock中的ID1对应。 Mode_held,mode_requested:和v$lock中 的lmode,request相对应。 |
| v$locked_object | 只包含DML的锁信息,包括回滚段和会话信息。 |
Xidusn,xidslot,xidsqn:表示回滚段信息。和 v$transaction相关联。 Object_id:表示被锁对象标识。 Session_id:表示持有锁的会话信息。 Locked_mode:表示会话等待的锁模式的信 息,和v$lock中的lmode一致。 |