[鎖機制] 鎖相關查詢
1. 事務鎖查詢
1.1 每個事務只能有一個TX鎖
select
username,
v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request,
block,
v$lock.type
from
v$lock,
v$session
where
v$lock.type = 'TX'
and v$lock.sid = v$session.sid
and v$session.username = USER
/
2. 事務查詢
select XIDUSN, XIDSLOT, XIDSQN from v$transaction;
3. 鎖定會話與被鎖定會話
column blocker format a20
column blockee format a20
column isblocking format a10
select
(
select
username
from
v$session
where
sid=a.sid
) blocker,
a.sid,
' is blocking ',
(
select
username
from
v$session
where sid=b.sid
) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2
/
4. 檢視TX與TM鎖資訊
4.1 一個事務只有一個TX鎖,但修改了多少了物件就有多少個TM鎖
4.2 ID1列就是物件的ID
select
(
select
username
from
v$session
where
sid = v$lock.sid
) username,
sid,
id1,
id2,
lmode,
request,
block,
v$lock.type
from
v$lock
where sid = (
select
sid
from
v$mystat
where
rownum=1
)
/
5. 查詢DDL鎖資訊
5.1 排他DDL鎖,DDL執行期間,其他會話只能查詢,不能修改物件和資料
5.2 共享DDL鎖,DDL執行期間,其他會話可以查詢和修改資料
5.3 可中斷解析鎖
5.4 建立檢視
@D:\oracle\product\10.2.0\db\RDBMS\ADMIN\catblock.sql
select
session_id sid,
owner, -- owner不是鎖的擁有者,而是被鎖定物件的擁有者
name,
type,
mode_held held,
mode_requested request
from
dba_ddl_locks
where
wner = 'GO';
/
6. 關於阻塞
6.1 insert
有一個帶主鍵的表,或者表上有惟一的約束,但有兩個會話試圖用同樣的值插入一行
多個表透過引用完整性約束相互連結,如果父表正在建立或刪除,對子表的插入可能會阻塞
如果應用允許終端使用者生成主鍵/惟一列值,往往就會發生INSERT阻塞
最好使用序列生成主鍵或唯一鍵的值
6.2 merge update delete
如果發生此類阻塞,說明應用中同時存在更新丟失的bug
可以採用select for update nowait來防止更新丟失和阻塞
1.1 每個事務只能有一個TX鎖
select
username,
v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request,
block,
v$lock.type
from
v$lock,
v$session
where
v$lock.type = 'TX'
and v$lock.sid = v$session.sid
and v$session.username = USER
/
2. 事務查詢
select XIDUSN, XIDSLOT, XIDSQN from v$transaction;
3. 鎖定會話與被鎖定會話
column blocker format a20
column blockee format a20
column isblocking format a10
select
(
select
username
from
v$session
where
sid=a.sid
) blocker,
a.sid,
' is blocking ',
(
select
username
from
v$session
where sid=b.sid
) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2
/
4. 檢視TX與TM鎖資訊
4.1 一個事務只有一個TX鎖,但修改了多少了物件就有多少個TM鎖
4.2 ID1列就是物件的ID
select
(
select
username
from
v$session
where
sid = v$lock.sid
) username,
sid,
id1,
id2,
lmode,
request,
block,
v$lock.type
from
v$lock
where sid = (
select
sid
from
v$mystat
where
rownum=1
)
/
5. 查詢DDL鎖資訊
5.1 排他DDL鎖,DDL執行期間,其他會話只能查詢,不能修改物件和資料
5.2 共享DDL鎖,DDL執行期間,其他會話可以查詢和修改資料
5.3 可中斷解析鎖
5.4 建立檢視
@D:\oracle\product\10.2.0\db\RDBMS\ADMIN\catblock.sql
select
session_id sid,
owner, -- owner不是鎖的擁有者,而是被鎖定物件的擁有者
name,
type,
mode_held held,
mode_requested request
from
dba_ddl_locks
where
wner = 'GO';
/
6. 關於阻塞
6.1 insert
有一個帶主鍵的表,或者表上有惟一的約束,但有兩個會話試圖用同樣的值插入一行
多個表透過引用完整性約束相互連結,如果父表正在建立或刪除,對子表的插入可能會阻塞
如果應用允許終端使用者生成主鍵/惟一列值,往往就會發生INSERT阻塞
最好使用序列生成主鍵或唯一鍵的值
6.2 merge update delete
如果發生此類阻塞,說明應用中同時存在更新丟失的bug
可以採用select for update nowait來防止更新丟失和阻塞
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-772909/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 鎖表的相關資訊查詢
- MaxDB有關鎖機制
- oracle 查詢鎖 && 解鎖Oracle
- Oracle查詢鎖、解鎖Oracle
- 殺會話之查詢鎖表的物件及相關操作會話物件
- innodb查詢鎖
- TX鎖查詢
- MySQL鎖相關MySql
- package鎖的查詢與解鎖Package
- MySQL鎖表相關問題查詢思路MySql
- PHP 鎖機制PHP
- SQLite鎖機制SQLite
- Mysql鎖機制MySql
- Oracle鎖機制Oracle
- java鎖機制Java
- oracle 鎖機制Oracle
- SQL鎖機制SQL
- 【鎖機制】共享鎖、排它鎖、悲觀鎖、樂觀鎖、死鎖等等
- mysql鎖表查詢MySql
- oracle 鎖資訊查詢
- 查詢鎖的原因
- PostgreSQL死鎖相關SQL
- 查詢鎖表 - 誰鎖住了我的表
- Mysql中的鎖機制——MyISAM表鎖MySql
- synchronized鎖機制 之 程式碼塊鎖synchronized
- InnoDB事務鎖之行鎖相關結構
- Mysql鎖機制分析MySql
- Enqueue 鎖定機制ENQ
- MS SQL鎖機制SQL
- oracle鎖機制研究Oracle
- mysql的鎖機制MySql
- 分散式鎖機制分散式
- 查詢鎖表記錄
- MySql 鎖表 查詢 命令MySql
- SQL SERVER 查詢鎖資訊SQLServer
- 查詢鎖等待情況
- 查詢物件是否被鎖物件
- Oracle阻塞(鎖等待)查詢Oracle