Oracle鎖表查詢和解鎖


1.以下為相關表

v$lock、v$sqlarea、v$session、v$process、v$locked_object、all_objects、v$session_wait.

2.通過管理查詢被鎖表的相關信息

select b.sql_id,b.username,b.sid,b.serial#,c.object_name,b.OSUSER,b.MACHINE,b.PROGRAM,b.LOGON_TIME,b.COMMAND,b.LOCKWAIT,b.SADDR,b.PADDR,b.TADDR,b.SQL_ADDRESS,a.LOCKED_MODE 
from v$locked_object a, v$session b, dba_objects c where a.session_id = b.sid and a.object_id = c.object_id order by b.logon_time;

通過語句可以發現用到了上面所給出的相關表

v$locked_object、v$session、dba_objects

3.查找出是那條SQL語句導致了鎖表

select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; 
或
select * from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object));

4.通過sql_id查找是執行這條sql語句的機器名

select username,status,schemaname,osuser,machine,module,action,logon_time,event from v$session where schemaname<>'SYS' and machine in ( 
select machine from v$active_session_history where sql_id in (select sql_id from v$sql where sql_text like '%update%'));

select b.sql_id,username,status,schemaname,osuser,a.machine,module,action,logon_time,event from v$session a left join 
( select sql_id,machine from v$active_session_history where sql_id in (select sql_id from v$sql where sql_text like '%update%') ) b on 
a.machine=b.machine where schemaname<>'SYS' 

5.通過擁有DBA權限的用戶解除數據庫中鎖住的表(需要用到sid和serial),執行下面的與語句即可解鎖:

alter system kill session 'sid,serial#';

6.查詢某session正在執行的語句,從而可以快速定位一直進行的事物

select /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
DECODE(sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.sid = '143')  /* 此處143 為SID*/ ORDER BY piece ASC;

 


免責聲明!

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



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