MySQL
第一種解鎖表的方式
查看當前數據庫鎖表的情況
SELECT * FROM information_schema.INNODB_TRX;
殺掉查詢結果中鎖表的trx_mysql_thread_id
kill trx_mysql_thread_id
第二種解鎖表的方式
查詢是否鎖表
show OPEN TABLES where In_use > 0;
查詢進程
show processlist
殺掉查詢到相對應的進程
kill id
補充
查看正在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
查看等待鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
Oracle
前提
操作的前提 用 sys 用戶 以 sysdba角色登錄
第一種解鎖表的方式
查詢被鎖的表
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
查詢那個session引起表被鎖
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
解鎖表
ALTER system kill session 'sid, serial#';
第二種解鎖表的方式
查看被鎖的表
SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,b.os_user_name
FROM v$process p, v$session a, v$locked_object b, all_objects c
WHERE p.addr = a.paddr
AND a.process = b.process
AND c.object_id = b.object_id;
批量解鎖
declare cursor mycur is
select b.sid,b.serial#
from v$locked_object a,v$session b
where a.session_id = b.sid group by b.sid,b.serial#;
begin
for cur in mycur
loop
execute immediate ( 'alter system kill session '''||cur.sid || ','|| cur.SERIAL# ||''' ');
end loop;
end;
