方法一
如何查找锁
从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’