转自:http://blog.youkuaiyun.com/zhldt2008/article/details/7953932
1. 如下语句 查询锁定的表:
SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,
l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial# ;
2.然后删除掉系统锁定的此记录
ALTER system KILL session 'SID,serial#';
如果有多个sid 和serial# 重复删除每条记录
3.循环释放锁表资源
DECLare str VARCHAR2(1000);
BEGIN
FOR c1 in (
SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,
l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
) LOOP
str:='ALTER system KILL session '''||c1.sid||','||c1.serial#||'''';
EXECUTE IMMEDIATE str;
commit;
END LOOP;
END;
本文提供了一种查询和解除Oracle数据库中锁定表的方法。通过执行特定的SQL语句,可以查询到锁定表的信息并获取会话ID及序列号。接着使用这些信息来删除锁定记录,最后通过循环执行解除锁定的命令来完全释放被占用的资源。
4万+

被折叠的 条评论
为什么被折叠?



