有五種方法可以檢查 oracle 進程是否被鎖:使用 v$session 和 v$session_wait,查找包含“l(fā)ock”的等待事件。使用 v$lock 找到當(dāng)前持有鎖的會話。使用 gv$lock 查找所有數(shù)據(jù)庫范圍的鎖。使用 v$locked_object 查找當(dāng)前被鎖定的數(shù)據(jù)庫對象。使用 v$transaction 找到正在等待鎖定的所有事務(wù)。
如何查看 Oracle 進程是否被鎖?
方法 1:使用 v$session 和 v$session_wait
SELECT s.sid, s.serial#, s.status, sw.event, sw.wait_time FROM v$session s INNER JOIN v$session_wait sw ON s.sid = sw.sid WHERE sw.event LIKE '%lock%';
登錄后復(fù)制
此查詢返回所有被鎖定的會話及其等待事件和等待時間。
方法 2:使用 v$lock
SELECT * FROM v$lock WHERE request > 0;
登錄后復(fù)制
此查詢返回所有當(dāng)前持有鎖的會話。
方法 3:使用 gv$lock
SELECT * FROM gv$lock WHERE request > 0;
登錄后復(fù)制
此查詢類似于 v$lock,但它顯示所有數(shù)據(jù)庫范圍的鎖。
方法 4:使用 v$locked_object
SELECT * FROM v$locked_object WHERE object_id > 0;
登錄后復(fù)制
此查詢返回當(dāng)前被鎖定的數(shù)據(jù)庫對象。
方法 5:使用 v$transaction
SELECT * FROM v$transaction WHERE status = 'WAIT WAIT';
登錄后復(fù)制
此查詢返回正在等待鎖定的所有事務(wù)。