oracle表為什么老是被鎖 oracle數(shù)據(jù)庫鎖表怎么解決?
oracle數(shù)據(jù)庫鎖表怎么解決?首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業(yè)務(wù)需求,不建議隨便KILLsession,如
oracle數(shù)據(jù)庫鎖表怎么解決?
首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業(yè)務(wù)需求,不建議隨便KILLsession,如果這個鎖表是正常業(yè)務(wù)你把sessionkill掉了會影響業(yè)務(wù)的。建議先查原因再做決定。(1)鎖表查詢的代碼有以下的形式:selectcount(*)fromv$locked_objectselect*fromv$locked_object(2)查看哪個表被鎖selectb.owner,b.object_name,a.session_id,a.locked_modefromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id(3)查看是哪個session引起的selectb.username,b.sid,b.serial#,logon_timefromv$locked_objecta,v$sessionbwherea.session_id=b.sidorderbyb.logon_time(4)查看是哪個sql引起的selectb.username,b.sid,b.serial#,c.*fromv$locked_objecta,v$sessionb,v$sqlcwherea.session_id=b.sidandb.SQL_ID=c.sql_idandc.sql_id=""orderbyb.logon_time(5)殺掉對應(yīng)進程執(zhí)行命令:altersystemkillsession"1025,41"其中1025為sid,41為serial#.
oracle經(jīng)常死鎖,鎖定數(shù)據(jù)庫的一些表,導(dǎo)致oracle死鎖的原因一般有那些?
一般情況只發(fā)生鎖超時,就是一個進程需要訪問數(shù)據(jù)庫表或者字段的時候,另外一個程序正在執(zhí)行帶鎖的訪問(比如修改數(shù)據(jù)),那么這個進程就會等待,當?shù)攘撕芫面i還沒有解除的話就會鎖超時,報告一個系統(tǒng)錯誤,拒絕執(zhí)行相應(yīng)的SQL操作。發(fā)生死鎖的情況比較少,比如一個進程需要訪問兩個資源(數(shù)據(jù)庫表或者字段),當獲取一個資源的時候進程就對它執(zhí)行鎖定,然后等待下一個資源空閑,這時候如果另外一個進程也需要兩個資源,而已經(jīng)獲得并鎖定了第二個資源,那么就會死鎖,因為當前進程鎖定第一個資源等待第二個資源,而另外一個進程鎖定了第二個資源等待第一個資源,兩個進程都永遠得不到滿足。
erp100.com