2008-10-16 30 views

回答

15

湯姆提供了一個很好的回答這個:On Transaction Isolation Levels

他說:

讀取未提交 隔離級別允許髒讀。 Oracle數據庫不使用髒 讀取,也不允許它們使用。 一個讀取未提交 隔離級別的基本目標是提供一個基於標準的 定義,允許 對於非阻塞讀。

...

現在,讓髒 讀取數據庫......它不僅返回 錯誤的答案,而且它返回...... [答案]。 ..從來沒有在桌子上存在。 在多用戶數據庫中,髒讀 可能是一個危險的功能。 個人而言,我從來沒有見過 它的用處......

這裏的要點是,髒讀是 不是一個功能;相反,這是一個 責任。在Oracle數據庫中,它僅僅是不需要的 。你得到所有的骯髒的 優勢讀不 阻塞,沒有任何不正確的 結果。

+0

內容提要:你不需要它,因爲Oracle已經做了正確的事情。 – 2008-10-16 12:17:53

3

湯姆凱特的答案是正確的WRT甲骨文,有作爲,由於其多版本併發控制(MVCC)架構的髒讀沒有這樣的事情。

從應用功能的角度來看,我完全同意湯姆;沒有很好的理由或髒讀。

爲什麼曾經使用過甲骨文之外?在沒有MVCC(如MySQL和安格爾)這是一個技巧繞開鎖定問題,可以減緩性能或導致鎖定系統「用完鎖」如果沒有適當的調整。與您需要在Oracle中調整回滾/撤消的方式相同,您需要在非MVCC數據庫中管理鎖定系統。

所以爲什麼可能是有用的與Oracle - 作爲只讀功能的性能提升,其中「錯誤數據」是極不可能和高度無關緊要。在MySQL/DB2/Ingres/Informix(不確定SQL Server/Sybase)中,它可用於繞過鎖定管理工具以提高性能。

這裏有一種情況,讀做的例子並不需要一致性:

  • 所有產品目錄

這裏有一個情況下讀取需要一致性的例子:

  • 產品名單有貨

甲骨文甚至沒有想到髒讀,也沒有真正失去性能的好處,也不能「添加爲特徵」。在Oracle真正的MVCC體系結構中需要太多的技巧來獲取髒數據)。

+2

是的,但爲什麼迫使人們用維基百科讀你的帖子?只需寫一次完整的術語,然後就可以隨意使用縮寫 – 2008-10-16 17:21:36

+1

在存儲過程中,您可以將記錄插入日誌表中以進行調試或性能檢查,或者檢查長時間運行的proc已經實現的步驟,髒讀操作很有用!我如何用Oracle讀取這些記錄(就像我在SQL Server中使用「nolock」提示)? – alexbrina 2014-11-20 14:42:03

1

WITH UR rationale:當涉及到SELECT ONLY(報表)查詢時,等待提交沒有任何意義。如果您正在報告正在更新的表格,則無論您是否獲得該更新都無關緊要。髒讀與提交後的數據一樣有效。考慮一下查詢是否在第二個時間點擊了該鎖定記錄。

如果您針對不斷變化的表運行查詢,則不會及時獲取任何設置點。在查詢開始時訪問的數據位於較早的時間點,然後是在查詢結束時訪問的數據。查詢結果中可能包含或不包含可能會對錶進行的大量更新。

使用WITH UR和其他DBMS等價物可以提高性能,因爲查詢不會等待提交,並且不會導致數據完整性的任何損失。

(PS剛剛成立了自己的帳戶,所以我不能夠對其他的反應發表評論。)