IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫Oracle → oracle鎖管理

oracle鎖管理

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  ORACLE里鎖有以下幾種模式:

  0:none

  1:null 空

  2:Row-S 行共享(RS):共享表鎖,sub share

  3:Row-X 行獨(dú)占(RX):用于行的修改,sub exclusive

  4:Share 共享鎖(S):阻止其他DML操作,share

  5:S/Row-X 共享行獨(dú)占(SRX):阻止其他事務(wù)操作,share/sub exclusive

  6:exclusive 獨(dú)占(X):獨(dú)立訪問使用,exclusive

  數(shù)字越大鎖級(jí)別越高, 影響的操作越多。

  1級(jí)鎖有:Select,有時(shí)會(huì)在v$locked_object出現(xiàn)。

  2級(jí)鎖有:Select for update,Lock For Update,Lock Row Share

  select for update當(dāng)對(duì)話使用for update子串打開一個(gè)游標(biāo)時(shí),所有返回集中的數(shù)據(jù)行都將處于行級(jí)(Row-X)獨(dú)占式鎖定,其他對(duì)象只能查詢這些數(shù)據(jù)行,不能進(jìn)行update、delete或select for update操作。

  3級(jí)鎖有:Insert, Update, Delete, Lock Row Exclusive

  沒有commit之前插入同樣的一條記錄會(huì)沒有反應(yīng), 因?yàn)楹笠粋€(gè)3的鎖會(huì)一直等待上一個(gè)3的鎖, 我們必須釋放掉上一個(gè)才能繼續(xù)工作。

  4級(jí)鎖有:Create Index, Lock Share

  locked_mode為2,3,4不影響DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作會(huì)提示ora-00054錯(cuò)誤。

  00054, 00000, "resource busy and acquire with NOWAIT specified"

  // *Cause: Resource interested is busy.

  // *Action: Retry if necessary.

  5級(jí)鎖有:Lock Share Row Exclusive

  具體來講有主外鍵約束時(shí)update / delete ... ; 可能會(huì)產(chǎn)生4,5的鎖。

  6級(jí)鎖有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive

  以DBA角色, 查看當(dāng)前數(shù)據(jù)庫里鎖的情況可以用如下SQL語句:

  col owner for a12

  col object_name for a16

  select b.owner,b.object_name,l.session_id,l.locked_mode

  from v$locked_object l, dba_objects b

  where b.object_id=l.object_id

  /

  select t2.username,t2.sid,t2.serial#,t2.logon_time

  from v$locked_object t1,v$session t2

  where t1.session_id=t2.sid order by t2.logon_time

  /

  如果有長期出現(xiàn)的一列,可能是沒有釋放的鎖。我們可以用下面SQL語句殺掉長期沒有釋放非正常的鎖:

  alter system kill session 'sid,serial#';

  如果出現(xiàn)了鎖的問題, 某個(gè)DML操作可能等待很久沒有反應(yīng)。

  當(dāng)你采用的是直接連接數(shù)據(jù)庫的方式,也不要用OS系統(tǒng)命令 $kill process_num

  或者 $kill -9 process_num來終止用戶連接,因?yàn)橐粋€(gè)用戶進(jìn)程可能產(chǎn)生一個(gè)以上的鎖, 殺OS進(jìn)程并不能徹底清除鎖的問題。

關(guān)鍵詞標(biāo)簽:oracle鎖管理

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法