怎样看oracle锁,oracle查看锁和解锁

  • Post author:
  • Post category:其他


方法一

如何查找锁

从V$lock里面找到锁所属于的session id

select sid from v$lock where id1 = (select object_id from user_objects where object_Name=’表名’) and request = 0;

在v$session里面查找相应session的所有者或者process,联系所有者或者kill process

select * from v$session where sid = 刚才的sid;

方法二

ORA-02049: timeout: distributed transaction waiting for lock

步骤1:如果是第一次使用该方法,则需要以SYS帐号运行如下代码创建一些视图,以后不需要了:

rdbms/admin/catblock.sql,位置一般在/u03/devp/devpdb/9.2.0/rdbms/admin/catblock.sql,在SQLPLUS中可以通过 @再加上该文件位置运行该脚本,比如@D:\ catblock.sql

步骤2:使用脚本utllockt.sql就可以查看死锁情况了,最好用管理员身份,该文件一般在/u03/devp/devpdb/9.2.0/rdbms/admin/utllockt.sql,同样可以使用@的方法运行该脚本。

步骤3:杀锁。使用如下代码查询,

SELECT sid, serial#

FROM v$session

WHERE sid in (SELECT holding_session FROM dba_waiters);

然后使用命令

ALTER SYSTEM KILL SESSION ‘128,23396’;

杀锁,蓝色部分为前面找出来的sid和serial#参数,

杀锁后,被杀的进程会抛出异常:ORA-00028: 您的会话己被删去

附:查看某人运行的会话可以通过如下方法:

登陆操作系统的用户名:

select * from v$session where osuser=’ly4962′

登陆的计算机:

select * from v$session where terminal=’YYKFK-LY-454′

登陆的oracle数据库的帐号,但是这种方法会查出可能很多使用这个帐号登陆的用户信息:

select * from v$session where USERNAME=’APPS’