Orace数据库锁表的处理与总结<摘抄与总结二>

182 阅读1分钟

当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。

TX锁等待的分析

Oracle数据库中一般使用行级锁。

当Oracle检测到死锁产生时,中断并回滚死锁相关语句的执行,报ORA-00060的错误并记录在数据库的日志文件alertSID.log中。同时在user_dump_dest下产生了一个跟踪文件,详细描述死锁的相关信息。

在日常工作中,如果发现在日志文件中记录了ora-00060的错误信息,则表明产生了死锁。这时需要找到对应的跟踪文件,根据跟踪文件的信息定位产生的原因。

表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一致。

解锁及Kill Session:

使用下面的语法查出锁并杀掉Session。

SELECT A.SID,A.SERIAL#,A.USERNAME,B.TYPE FROM V$SESSION A,V$LOCK B WHERE A.SID=B.SID;

ALTER SYSTEM KILL SESSION 'SID,SERIAL#';