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

下載本文檔

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

文檔簡介

1、1.ORA-08177: 無法連續(xù)訪問此事務(wù)修改方法:原先的代碼: 修改后的代碼: 這個問題是由oracle 事務(wù)隔離級別引起的在一個事務(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這個時候事務(wù)2 會等待事務(wù)1執(zhí)行完成,提交事務(wù)1 的時候會出現(xiàn)上述問題2.隔離級別(isolation level)隔離級別定義了事務(wù)

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

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

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

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

6、的錯誤(英文錯誤信息:ORA-08177: Cannot serialize access for this transaction) ORACLE在數(shù)據(jù)塊中記錄最近對數(shù)據(jù)行執(zhí)行修改操作的N個事務(wù)的信息,目的是確定是否有在本事務(wù)開始時未提交的事務(wù)修改了本事務(wù)將要修改的行。 read-only: 遵從事務(wù)級的讀一致性,僅僅能看見在本事務(wù)開始前由其它事務(wù)提交的更改。 不允許在本事務(wù)中進行DML操作。read only是serializable的子集。它們都避免了非重復(fù)讀和幻像。區(qū)別是在read only中是只讀;而在serializable中可以進行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方式)進行它想要做的修改。如果事務(wù)1提交,則當事務(wù)2是read committed方式時,進行它想要做的修改;當事務(wù)2是serializable方式時,失敗并報錯“Cannot serialize access”,因為事務(wù)2看不見事務(wù)1提交的修改,且事務(wù)2想在事務(wù)一修改的基礎(chǔ)上再做修改。 注: 語句級的讀一致性:ORACLE保證語句級的讀一致性,即一個語句所處理的數(shù)據(jù)集是在單一時間點上的

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

溫馨提示

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

評論

0/150

提交評論