這個(gè)語(yǔ)句將查找到數(shù)據(jù)庫(kù)中所有的DML語(yǔ)句產(chǎn)生的鎖,還可以發(fā)現(xiàn),任何DML語(yǔ)句其實(shí)產(chǎn)生了兩個(gè)鎖,一個(gè)是表鎖,一個(gè)是行鎖。
SELECT /**//*+ rule */
s.username,
decode(l.type, ‘TM‘, ‘TABLE LOCK‘, ‘TX‘, ‘ROW LOCK‘, NULL) LOCK_LEVEL,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
FROM v$session s, v$lock l, dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL 如果發(fā)生了鎖等待,我們可能更想知道是誰(shuí)鎖了表而引起誰(shuí)的等待以下的語(yǔ)句可以查詢到誰(shuí)鎖了表,而誰(shuí)在等待。
SELECT /**//*+ rule */
lpad(‘ ‘, decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
o.owner,
o.object_name,
o.object_type,
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
ORDER BY o.object_id, xidusn DESC 以上查詢結(jié)果是一個(gè)樹狀結(jié)構(gòu),如果有子節(jié)點(diǎn),則表示有等待發(fā)生。如果想知道鎖用了哪個(gè)回滾段,還可以關(guān)聯(lián)到V$rollname,其中xidusn就是回滾段的USN。