Oracle與MySQL中如何查詢被鎖的表


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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM