对于大型的项目,经常会用到对数据表的加锁技术。此时,如果遇到不必要的加锁,就需要手动解锁:
可以用以下的sql语句先查出锁表的相关内容:
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,
l.os_user_name,s.machine, s.terminal,a.sql_text, a.action
FROM v$sqlarea a,v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;
或者:
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
再手动运行以下语句解锁:
alter system kill session '446,64942';
其中,“446”对应sid,“64942”对应serial#。注意不要搞错,看清用户、使用者、机器名、sql语句等信息,不要把不该解的锁给解了。