事務(wù)隔離級(jí)別_第1頁
事務(wù)隔離級(jí)別_第2頁
事務(wù)隔離級(jí)別_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、1.ORA-08177: 無法連續(xù)訪問此事務(wù)修改方法:原先的代碼: 修改后的代碼: 這個(gè)問題是由oracle 事務(wù)隔離級(jí)別引起的在一個(gè)事務(wù)中執(zhí)行update t set object_type=zl where object_id=17286不要 提交此事務(wù)然后再其他事務(wù)中執(zhí)行set transaction isolation level serializable;update t set object_type=zl where object_id=17286這個(gè)時(shí)候事務(wù)2 會(huì)等待事務(wù)1執(zhí)行完成,提交事務(wù)1 的時(shí)候會(huì)出現(xiàn)上述問題2.隔離級(jí)別(isolation level)隔離級(jí)別定義了事務(wù)

2、與事務(wù)之間的隔離程度。隔離級(jí)別與并發(fā)性是互為矛盾的:隔離程度越高,數(shù)據(jù)庫的并發(fā)性越差;隔離程度越低,數(shù)據(jù)庫的并發(fā)性越好。ANSI/ISO SQL92標(biāo)準(zhǔn)定義了一些數(shù)據(jù)庫操作的隔離級(jí)別: 未提交讀(read uncommitted) 提交讀(read committed) 重復(fù)讀(repeatable read) 序列化(serializable) 通過一些現(xiàn)象,可以反映出隔離級(jí)別的效果。這些現(xiàn)象有: 更新丟失(lost update):當(dāng)系統(tǒng)允許兩個(gè)事務(wù)同時(shí)更新同一數(shù)據(jù)是,發(fā)生 更新丟失。 臟讀(dirty read):當(dāng)一個(gè)事務(wù)讀取另一個(gè)事務(wù)尚未提交的修改時(shí),產(chǎn)生臟讀。 非重復(fù)讀(nonre

3、peatable read):同一查詢在同一事務(wù)中多次進(jìn)行,由于其他提交事務(wù)所做的修改或刪除,每次返回不同的結(jié)果集,此時(shí)發(fā)生非重復(fù)讀。 幻像(phantom read):同一查詢在同一事務(wù)中多次進(jìn)行,由于其他提交事務(wù)所做的插入操作,每次返回不同的結(jié)果集,此時(shí)發(fā)生幻像讀。下面是隔離級(jí)別及其對(duì)應(yīng)的可能出現(xiàn)或不可能出現(xiàn)的現(xiàn)象:Dirty ReadNonRepeatable ReadPhantom ReadRead uncommittedPossiblePossiblePossibleRead committedNot possiblePossiblePossibleRepeatable readNo

4、t possibleNot possiblePossibleSerializableNot possibleNot possibleNot possible3. ORACLE的隔離級(jí)別ORACLE提供了SQL92標(biāo)準(zhǔn)中的read committed和serializable,同時(shí)提供了非SQL92標(biāo)準(zhǔn)的read-only。 read committed: 這是ORACLE缺省的事務(wù)隔離級(jí)別。 事務(wù)中的每一條語句都遵從語句級(jí)的讀一致性。 保證不會(huì)臟讀;但可能出現(xiàn)非重復(fù)讀和幻像。 serializable: 簡單地說,serializable就是使事務(wù)看起來象是一個(gè)接著一個(gè)地順序地執(zhí)行。僅僅能看見

5、在本事務(wù)開始前由其它事務(wù)提交的更改和在本事務(wù)中所做的更改。保證不會(huì)出現(xiàn)非重復(fù)讀和幻像。 Serializable隔離級(jí)別提供了read-only事務(wù)所提供的讀一致性(事務(wù)級(jí)的讀一致性),同時(shí)又允許DML操作。 如果有在serializable事務(wù)開始時(shí)未提交的事務(wù)在serializable事務(wù)結(jié)束之前修改了serializable事務(wù)將要修改的行并進(jìn)行了提交,則serializable事務(wù)不會(huì)讀到這些變更,因此發(fā)生無法序列化訪問的錯(cuò)誤。換一種解釋方法:只要在serializable事務(wù)開始到結(jié)束之間有其他事務(wù)對(duì)serializable事務(wù)要修改的東西進(jìn)行了修改并提交了修改,則發(fā)生無法序列化訪問

6、的錯(cuò)誤(英文錯(cuò)誤信息:ORA-08177: Cannot serialize access for this transaction) ORACLE在數(shù)據(jù)塊中記錄最近對(duì)數(shù)據(jù)行執(zhí)行修改操作的N個(gè)事務(wù)的信息,目的是確定是否有在本事務(wù)開始時(shí)未提交的事務(wù)修改了本事務(wù)將要修改的行。 read-only: 遵從事務(wù)級(jí)的讀一致性,僅僅能看見在本事務(wù)開始前由其它事務(wù)提交的更改。 不允許在本事務(wù)中進(jìn)行DML操作。read only是serializable的子集。它們都避免了非重復(fù)讀和幻像。區(qū)別是在read only中是只讀;而在serializable中可以進(jìn)行DML操作。 read committed和se

7、rializable的區(qū)別和聯(lián)系: 事務(wù)1先于事務(wù)2開始,并保持未提交狀態(tài)。事務(wù)2想要修改正被事務(wù)1修改的行。事務(wù)2等待。如果事務(wù)1回滾,則事務(wù)2(不論是read committed還是serializable方式)進(jìn)行它想要做的修改。如果事務(wù)1提交,則當(dāng)事務(wù)2是read committed方式時(shí),進(jìn)行它想要做的修改;當(dāng)事務(wù)2是serializable方式時(shí),失敗并報(bào)錯(cuò)“Cannot serialize access”,因?yàn)槭聞?wù)2看不見事務(wù)1提交的修改,且事務(wù)2想在事務(wù)一修改的基礎(chǔ)上再做修改。 注: 語句級(jí)的讀一致性:ORACLE保證語句級(jí)的讀一致性,即一個(gè)語句所處理的數(shù)據(jù)集是在單一時(shí)間點(diǎn)上的

8、數(shù)據(jù)集,這個(gè)時(shí)間點(diǎn)是這個(gè)語句開始的時(shí)間。一個(gè)語句看不見在它開始執(zhí)行后提交的修改。對(duì)于DML語句,它看不見由自己所做的修改,即DML語句看見的是它本身開始執(zhí)行以前存在的數(shù)據(jù)。 事務(wù)級(jí)的讀一致性: 事務(wù)級(jí)的讀一致性保證了可重復(fù)讀,并保證不會(huì)出現(xiàn)幻像。4.設(shè)置隔離級(jí)別的方法 設(shè)置一個(gè)事務(wù)的隔離級(jí)別 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ ONLY; 設(shè)置整個(gè)會(huì)話的隔離級(jí)別 ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE; ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED; 5.選擇隔離級(jí)別 read committed (1)在事務(wù)量大、高性能的

溫馨提示

  • 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)論