存储过程被某个连接占用锁定后,会导致存储过程无法被编辑、调试和其它连接所调用。
方法1:
1、用存储过程的名字去找被占用的连接实例名SID
SELECT * FROM dba_ddl_locks WHERE NAME = UPPER ('存储过程的名字');
2、用查询得到的SID,查进程
SELECT T . SID, T .serial# FROM v$session T WHERE T . SID = 查到的SID;
3、用查询得到的ID标识,杀死进程
ALTER SYSTEM KILL SESSION '135,37547';--其中135,37547分别是上面查询出的sid,serial#
方法2:
1、查询哪些对象对锁定
SELECT
sess. SID,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
FROM
v$locked_object lo,
dba_objects ao,
v$session sess
WHERE
ao.object_id = lo.object_id
AND lo.session_id = sess. SID;
2、根据名称找到需要的那个对象信息,杀死进程
ALTER SYSTEM KILL SESSION '135,37547';--其中135,37547分别是上面查询出的sid,serial#
方法3(表):
1、查询死锁的表
SELECT
s.username,
I.OBJECT_ID,
I.SESSION_ID,
s.SERIAL#,
I.ORACLE_USERNAME,
I.OS_USER_NAME,
I. PROCESS
FROM
V$locked_Object I,
V$SESSION S
WHERE
I.SESSION_ID = S. SID;
2、杀死死锁的表
ALTER SYSTEM KILL SESSION '135,37547';--其中135,37547分别是上面查询出的sid,serial#
方法4:
方法1的整理:
1、查存储过程被谁死锁
SELECT SEE.sid,SEE.serial#,DDLK.owner,DDLK.name,DDLK.session_id
FROM dba_ddl_locks DDLK LEFT JOIN v$session see ON SEE.SID=DDLK.SESSION_id
WHERE DDLK.name like UPPER('%存储过程的名字%')
2、杀死死锁的对象
ALTER SYSTEM KILL SESSION '135,37547';--其中135,37547分别是上面查询出的sid,serial#