在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";
望採納,能給予相關幫助。
在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";
望採納,能給予相關幫助。