oracle用戶(hù)頻繁被鎖是怎么了 oracle頻繁鎖表,怎么查出原因?
oracle頻繁鎖表,怎么查出原因?使用下面的語(yǔ)句檢查觸發(fā)鎖表的語(yǔ)句是否正在執(zhí)行,找到正在執(zhí)行的用戶(hù),然后與相應(yīng)的用戶(hù)通信,從v$sqlarea、v$session s、v$locked對(duì)象l whe
oracle頻繁鎖表,怎么查出原因?
使用下面的語(yǔ)句檢查觸發(fā)鎖表的語(yǔ)句是否正在執(zhí)行,找到正在執(zhí)行的用戶(hù),然后與相應(yīng)的用戶(hù)通信,從v$sqlarea、v$session s、v$locked對(duì)象l where中選擇l.session|id sid、s.serial|、l.locked|mode、l.oracle|username、s.user|、l.os|user|name、s.machine、s.terminal、a.sql|text、a.actionl、 session_id=s.sid和s.prev ql_uaddr=a.address order by sid,s.Serial#如果沒(méi)有語(yǔ)句鎖定表,則可能是相應(yīng)的表正在執(zhí)行DDL操作,例如添加索引,也可能觸發(fā)鎖定表。您可以轉(zhuǎn)到警報(bào)日志查看是否有人正在添加索引
通常,只有鎖定超時(shí)才會(huì)發(fā)生,即當(dāng)一個(gè)進(jìn)程需要訪問(wèn)數(shù)據(jù)庫(kù)表或字段時(shí),另一個(gè)程序正在執(zhí)行鎖定訪問(wèn)(如修改數(shù)據(jù)),則該進(jìn)程將等待。如果在等待很長(zhǎng)時(shí)間后沒(méi)有釋放鎖,鎖將超時(shí),報(bào)告系統(tǒng)錯(cuò)誤,并拒絕執(zhí)行相應(yīng)的SQL操作。僵局的情況很少。例如,一個(gè)進(jìn)程需要訪問(wèn)兩個(gè)資源(數(shù)據(jù)庫(kù)表或字段)。在獲取資源時(shí),進(jìn)程將其鎖定,然后等待下一個(gè)資源空閑。此時(shí),如果另一個(gè)進(jìn)程也需要兩個(gè)資源,并且已經(jīng)獲取并鎖定了第二個(gè)資源,那么它將處于死鎖狀態(tài),因?yàn)楫?dāng)前進(jìn)程被鎖定如果第一個(gè)資源被固定為等待第二個(gè)資源,而另一個(gè)進(jìn)程將第二個(gè)資源鎖定為等待第一個(gè)資源,那么這兩個(gè)進(jìn)程將永遠(yuǎn)不會(huì)得到滿(mǎn)足。
erp100.com