oracle 死鎖和鎖等待的區(qū)別_第1頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、oracle 死鎖和鎖等待的區(qū)別今日面試的過程中,問到查詢的死鎖如何解決,在我的印象中查詢是不行能碰到死鎖的,于是任憑說了一下查詢到死鎖的sql語句,檢查sql語句。 回歸之后越想越不明了,于是收拾了一下鎖等待和死鎖的區(qū)分和聯(lián)系 所謂的鎖等待:就是一個(gè)事務(wù)a對(duì)一個(gè)數(shù)據(jù)表舉行l(wèi)或是dml操作時(shí),系統(tǒng)就會(huì)對(duì)該表加上表級(jí)的排它鎖,此時(shí)其他的事務(wù)對(duì)該表舉行操作的時(shí)候會(huì)等待a提交或是回滾后,才可以繼續(xù)b的操作 所謂的死鎖:當(dāng)兩個(gè)或多個(gè)用戶互相等待鎖定的數(shù)據(jù)時(shí)就會(huì)發(fā)生死鎖,這時(shí)這些用戶被卡在不能繼續(xù)處理業(yè)務(wù),oracle可以自動(dòng)檢測(cè)死鎖并解決他們,通過回滾一個(gè)死鎖中的語句,釋放鎖定的數(shù)據(jù),回滾的話會(huì)碰到o

2、ra-00060 deadlock detect while waiting for resource 模擬鎖等待: 兩個(gè)事務(wù)a和b,分離創(chuàng)建t1,t2,并且初始化一條數(shù)據(jù), a 更改t1的數(shù)據(jù),此時(shí)并不提交,這時(shí)候b更改相同的一列,此時(shí)b向來處于等待的狀態(tài) 我們可以查詢鎖等待的內(nèi)容: wait_lock.sql select (select username from v$session where s = a.sid) username, a.sid, (select serial from v$session where sid = a.sid) serial, a.type, a.id

3、1, a.id2, a.lmode, a.request, a.block, b.sid blocking_sid from v$lock a, ( select * from v$lock where request 0 and type mr ) b where a.id1 = b.id1(+) and a.id2 = b.id2(+) and a.lmode 0 and a.type mr order by username,a.sid,serial,a.type 此時(shí)可以查詢到鎖等待的現(xiàn)象,最后一列不為空的就是等待的大事 此時(shí)我們可以跟a用戶提醒讓其提交事務(wù)或是回滾,也可以挺直殺死 a

4、lter system session sid,serial 保持現(xiàn)狀不動(dòng),在a事務(wù)更改t2表此時(shí)在a事務(wù)會(huì)產(chǎn)生 sql up t1 id=1000 where id=1; update t1 set id=1000 where id=1 * 第 1 行浮現(xiàn)錯(cuò)誤: ora-00060: 等待資源時(shí)檢測(cè)到死鎖 此時(shí)oracle已經(jīng)幫我解決了這個(gè)死鎖問題 死鎖的產(chǎn)生需要四個(gè)必需的條件: 1 ,mutual eion(互斥)資源不能被分享,只能由一個(gè)進(jìn)程用法 2,hold and wait(哀求并持續(xù))已經(jīng)得到資源的進(jìn)程可以再次申請(qǐng)新的資源 3,no pre-emption(不行剝奪)已經(jīng)分配的資源

5、不能被相應(yīng)的進(jìn)程強(qiáng)制剝奪 4,circular wait(循環(huán)等待條件)系統(tǒng)中若干進(jìn)程組成環(huán)路,該環(huán)路中的每個(gè)進(jìn)程都在等待相鄰進(jìn)程正占用的資源 定位死鎖: 系統(tǒng)級(jí)別的定位 select username,lockwait,us,machine,program from v$session where sid in (select session_id from v$locked_object) username死鎖的用戶,lockwait死鎖的狀態(tài),status中active表示死鎖,machine死鎖所在的機(jī)器,program死鎖來自于那個(gè)程序 語句級(jí)別的定位 select sql_text

6、 from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object); 進(jìn)程級(jí)別的定位 select s.username,l.object_id,l.session_id,s.serial,l.oracle_usrename,l.os_user_name,cess from v$locked_object l,v$session s where l.session_id=s.sid; 處理死鎖的普通策略 1

7、,鴕鳥算法忽視該問題 2,定位死鎖并且復(fù)原 3,認(rèn)真對(duì)資源舉行動(dòng)態(tài)分配,避開死鎖 4,破壞死鎖中的一個(gè)條件 假如oracle解決不了的死鎖,我們需要定位到進(jìn)程級(jí)別,找到對(duì)應(yīng)的sid和serial alter system kill sid,serail 失敗的話,找到對(duì)應(yīng)的進(jìn)程強(qiáng)制關(guān)閉 select p.spid from v$session s, v$process p where s.sid=xx and s.paddr=p.addr ps -ef | spid kill -9 xx 查詢oracle的死鎖 lock.sql select bs.username blocking user

8、 , bs.username db user , ws.username waiting user , bs.sid sid , ws.sid wsid , bs.serial serial , bs.sql_address address , bs.sql_hash_value sql hash , gram blocking app , gram waiting app , bs.machine blocking machine , ws.machine waiting machine , bs.oser blocking os user , ws.osuser w

9、aiting os user , bs.serial serial , ws.serial wserial , decode (wk.type, mr , media recovery , rt , redo thread , un , user name , tx , transaction , tm , dml , ul , pl/sql user lock , dx , disibuted xaction , cf , control file , is , instae state , fs , file set , ir , instance recovery , st , disk

10、 space transaction , ts , temp segment , iv , library cache invalidation , ls , log start or switch , rw , row wait , sq , sequence number , te , extend table , tt , temp table , wk.type ) lock_type, decode (hk.lmode, 0, none , 1, null , 2, row-s (ss) , 3, row-x (sx) , 4, share , 5, s/row-x (ssx) ,

11、6, exclusive , to_char (hk.lmode) ) mode_held, decode (wk.request, 0, none , 1, null , 2, row-s (ss) , 3, row-x (sx) , 4, share , 5, s/row-x (ssx) , 6, exclusive , to_char (wk.request) ) mode_requested, to_char (hk.id1) lock_id1, to_char (hk.id2) lock_id2, decode (hk.block, 0, not blocking , /*/* no

12、t blocking any other processes */ 1, blocking , /*/* this lock blocks other processes */ 2, global , /*/* this lock is global, so we can t tell */ to_char (hk.block) ) blocking_others from v$lock hk, v$session bs, v$lock wk, v$session ws where hk.block = 1 and hk.lmode != 0 and hk.lmode != 1 and wk.request != 0 and wk.type(+) = hk.type and wk.id1(+) = hk.id1 and wk.id2(+) = hk.id2 and hk.sid =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論