時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)
查詢(xún)表的狀況的對(duì)象:V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS
select * from v$locked_object
select * from dba_objects
方法:
首先查看那些表被鎖住了
-----------------------------------------------------------------
select b.owner, b.object_name, a.session_id, a.locked_mode
from v$locked_object a, dba_objects b
where b.object_id = a.object_id;
-----------------------------------------------------------------
select b.username, a.LOCKED_MODE, b.sid, b.serial#, logon_time
from v$locked_object a, v$session b
where a.session_id = b.sid
order by b.logon_time;
-----------------------------------------------------------------
select b.sid,
b.serial#,
c.object_name,
b.username,
a.LOCKED_MODE,
b.logon_time
from v$locked_object a, v$session b, dba_objects c
where a.session_id = b.sid
and a.object_id = c.object_id
order by b.logon_time;
-----------------------------------------------------------------
殺進(jìn)程中的會(huì)話(huà)
alter system kill session 'SID,SERIAL#';
例如:
alter system kill session '29,5497';
------------------------------------------------
SELECT S.SID SESSION_ID,
S.USERNAME,
s.SERIAL#,
DECODE(LMODE,
0,
'None',
1,
'Null',
2,
'Row-S (SS)',
3,
'Row-X (SX)',
4,
'Share',
5,
'S/Row-X (SSX)',
6,
'Exclusive',
TO_CHAR(LMODE)) MODE_HELD,
DECODE(REQUEST,
0,
'None',
1,
'Null',
2,
'Row-S (SS)',
3,
'Row-X (SX)',
4,
'Share',
5,
'S/Row-X (SSX)',
6,
'Exclusive',
TO_CHAR(REQUEST)) MODE_REQUESTED,
O.OWNER || '.' || O.OBJECT_NAME || ' (' || O.OBJECT_TYPE || ')',
S.TYPE LOCK_TYPE,
L.ID1 LOCK_ID1,
L.ID2 LOCK_ID2
FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S
WHERE L.SID = S.SID
AND L.ID1 = O.OBJECT_ID;
oracle里鎖有以下幾種模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表鎖
3:Row-X 行專(zhuān)用(RX):用于行的修改
4:Share 共享鎖(S):阻止其他DML操作
5:S/Row-X 共享行專(zhuān)用(SRX):阻止其他事務(wù)操作
6:exclusive 專(zhuān)用(X):獨(dú)立訪(fǎng)問(wèn)使用
數(shù)字越大鎖級(jí)別越高, 影響的操作越多。
一般的查詢(xún)語(yǔ)句如select ... from ... ;是小于2的鎖, 有時(shí)會(huì)在v$locked_object出現(xiàn)。
select ... from ... for update; 是2的鎖。
當(dāng)對(duì)話(huà)使用for update子串打開(kāi)一個(gè)游標(biāo)時(shí),
所有返回集中的數(shù)據(jù)行都將處于行級(jí)(Row-X)獨(dú)占式鎖定,
其他對(duì)象只能查詢(xún)這些數(shù)據(jù)行,不能進(jìn)行update、delete或select...for update操作。
insert / update / delete ... ; 是3的鎖。
沒(méi)有commit之前插入同樣的一條記錄會(huì)沒(méi)有反應(yīng),
因?yàn)楹笠粋(gè)3的鎖會(huì)一直等待上一個(gè)3的鎖, 我們必須釋放掉上一個(gè)才能繼續(xù)工作。
創(chuàng)建索引的時(shí)候也會(huì)產(chǎn)生3,4級(jí)別的鎖。
locked_mode為2,3,4不影響DML(insert,delete,update,select)操作,
但DDL(alter,drop等)操作會(huì)提示ora-00054錯(cuò)誤。
有主外鍵約束時(shí) update / delete ... ; 可能會(huì)產(chǎn)生4,5的鎖。
DDL語(yǔ)句時(shí)是6的鎖。
關(guān)鍵詞標(biāo)簽:oracle鎖表
相關(guān)閱讀
熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶(hù)得到管理員權(quán)限Oracle對(duì)user的訪(fǎng)問(wèn)控制
人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法ORACLE和SQL語(yǔ)法區(qū)別歸納(1)oracle grant 授權(quán)語(yǔ)句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶(hù)并指定權(quán)限