這篇文章給大家分享的是有關數據庫中v$lockv和$locked_object的區(qū)別有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯作為成都網站建設公司,專注成都網站建設公司、網站設計,有關企業(yè)網站建設方案、改版、費用等問題,行業(yè)涉及成都玻璃鋼雕塑等多個領域,已為上千家企業(yè)服務,得到了客戶的尊重與認可。
一、引言
工作中有次修改表sj_affair中的數據,需要禁用該表上的觸發(fā)器。結果無法禁用,報如下錯誤:
ORA-00054: resource busy and acquire with NOWAIT specified
很明顯,是該表被鎖定了,于是打算kill掉鎖住該表的會話。步驟如下:
1.查出鎖住該表的會話id,serial#
SELECT o.object_name,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
AND o.object_name='SJ_AFFAIR';
2.kill掉該會話
alter system kill session 'sid, serial#';
kill掉會話之后再次查詢,發(fā)現該表上已經沒有鎖了。于是再次試圖禁用觸發(fā)器,結果奇怪了,還是無法禁用。
是不是鎖又恢復了呢?再次查詢,發(fā)現沒有鎖。這是為什么呢?
在網上搜了很多,發(fā)現一條有用的信息,作者查詢鎖用的是v$lock視圖,而不是v$locked_object視圖。改成查詢v$locd視圖:
SELECT o.object_name,s.sid, s.serial#
FROM v$lock l, dba_objects o, v$session s
WHERE l.id1 = o.object_id
AND l.sid = s.sid
AND o.object_name='SJ_AFFAIR';
然后再次查詢,發(fā)現SJ_AFFAIR上居然還有鎖。于是再次kill,然后禁用觸發(fā)器就成功了。
二、V$LOCK和V$LOCKED_OBJECT
查詢鎖表都會用到V$LOCK和V$LOCKED_OBJECT,但這兩者不是相同的。我們先看看它們各自的主要字段:
1.v$lock
sid: 會話SID,通常與v$session關聯。
type: 鎖類型,TM表示表鎖或DML鎖,TX表示行鎖或事務鎖,UL表示用戶鎖。我們主要關注TX和TM兩種鎖,其它均為系統(tǒng)鎖,會很快自動釋放,不用關注。 行鎖不會單獨存,行級鎖之前需要先加表級共享鎖。
lmode: 會話保持的鎖的模式。
0=None;1=Null;2=Row-S (SS,行級共享鎖,其他對象只能查詢這些數據行);3=Row-X (SX,行級排它鎖,在提交前不允許做DML操作);4=Share(共享鎖);5=S/Row-X (SSX,共享行級排它鎖);6=Exclusive(排它鎖)
ID1,ID2: ID1,ID2的取值含義根據type的取值而有所不同,對于TM 鎖ID1表示被鎖定表的object_id 可以和dba_objects視圖關聯取得具體表信息,ID2 值為0;對于TX 鎖,ID1以十進制數值表示該事務所占用的回滾段號和事務槽slot number號,其組形式: 0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER,ID2 以十進制數值表示環(huán)繞wrap的次數,即事務槽被重用的次數
2.V$LOCKED_OBJECT
session_id: 會話id。通常與v$session關聯。
object_id: 被鎖對象標識。通常與dba_objects關聯。
oracle_username: 登錄oracle用戶名。
os_user_name: 電腦用戶名如:Administrator
locked_mode: 會話保持的鎖的模式。
三、兩者的區(qū)別
1.V$LOCKED_OBJECT只能報發(fā)生等待的表級鎖,不能報發(fā)生等待的行級鎖。
注:這句話是網上別人說的,暫時未驗證,需慎重考慮。但是從我遇到的問題來看,似乎是正確的。只是我的問題已經無法重現,也就失去了驗證它的機會。
2.v$locked_object包含的是當前DB中被鎖住的OBJECT,而v$lock不僅包含用戶的,還包括系統(tǒng)被鎖住的object,即: V$LOCK>v$locked_object
感謝各位的閱讀!關于“數據庫中v$lockv和$locked_object的區(qū)別有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!