回覆列表
  • 1 # 攻城獅小李

    在Oracle資料庫中,DML鎖主要包括TM鎖和TX鎖,其中TM鎖稱為表級鎖,TX鎖稱為事務鎖或行級鎖。當Oracle 執行DML語句時,系統自動在所要操作的表上申請TM型別的鎖。當TM鎖獲得後,系統再自動申請TX型別的鎖,並將實際鎖定的資料行的鎖標誌位進行置位。

    如何入手:當資料庫中發生enq: TX – row lock contention行級鎖等待時,可以查詢v$session.blocking_session列或v$lock檢視來找到阻塞源,透過kill阻塞源來快速使業務恢復正常。

    參考如下連結的文章,確定思路:

    https://www.freebuf.com/column/147270.html

    其次利用這些常用命令確認資訊:

    1.查詢資料庫中的鎖

    select * from v$lock;

    select * from v$lock where block=1;

    2.查詢被鎖的物件

    select * from v$locked_object;

    3.查詢阻塞

    查被阻塞的會話

    select * from v$lock where lmode=0 and type in ("TM","TX");

    查阻塞別的會話鎖

    select * from v$lock where lmode>0 and type in ("TM","TX");

    4.查詢資料庫正在等待鎖的程序

    select * from v$session where lockwait is not null;

    5.查詢會話之間鎖等待的關係

    select a.sid holdsid,b.sid waitsid,a.type,a.id1,a.id2,a.ctime from v$lock a,v$lock b

    where a.id1=b.id1 and a.id2=b.id2 and a.block=1 and b.block=0;

    6.查詢鎖等待事件

    select * from v$session_wait where event="enqueue";

    7.查詢鎖住的表和解鎖select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY, c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIAL

    from v$locked_object a,dba_objects b, v$session c

    where b.object_id = a.object_id AND a.SESSION_ID =c.sid;

    --透過SID, SERIAL解鎖

    --alter system kill session "SID, SERIAL";

    望採納,能給予相關幫助。

  • 中秋節和大豐收的關聯?
  • 買洗衣機主要看哪些引數,洗衣機的特點是什麼?