1. 程式人生 > 其它 >ORACLE 檢視被鎖的表、導致鎖表的目標機器、及對應鎖表語句

ORACLE 檢視被鎖的表、導致鎖表的目標機器、及對應鎖表語句

可能出現鎖表場景:若一個模組日常執行一切正常,突然出現故障,比如某平臺在1秒內返回的話費查詢簡訊忽然產生了延遲,很多客戶發出簡訊後幾十分鐘仍然未收到。

為了模擬鎖表,我開了幾個session,分別執行update語句後,不做任何提交或回滾的操作。即產生了鎖表。

檢視被鎖的表是否包含程式模組對應的後臺資料表。

1、

--檢視被鎖的表 
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

2、

--檢視那個使用者那個程序照成死鎖
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;

3、

--3.查出鎖定表的sid, serial#,os_user_name, machine_name, terminal,鎖的type,mode
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;

4、

---檢視所標的sql_hash_value,
SELECT object_name 被鎖表 , machine 所屬機器, l.ORACLE_USERNAME 表所在使用者,s.sid, s.serial# ,s.LOCKWAIT ,s.SQL_HASH_VALUE
FROM gv$locked_object l, dba_objects o, gv$session s 
WHERE l.object_id = o.object_id 
AND l.session_id = s.sid and o.Object_Name='QINTIAN_DATA_HEADER' ;

5、

--檢視對應的鎖表SQL
select * from v$sql a where a.HASH_VALUE = '3023849173'

 6、

--殺掉程序 sid,serial#

alter system kill session '685,12071';
alter system kill session '491,16923';
alter system kill session '298,34588';
alter system kill session '393,2388';