資料併發性和一致性——資料庫概念

zyb200發表於2008-01-17

這一章描述了資料併發訪問和資料的一致性。

資料併發性意味著許多使用者可以同時訪問資料。

資料一致性意味著每個使用者看到的資料具有一致性,包括當前使用者事務和其他使用者事務對資料的改變。

[@more@]

三種可防止的現象:

髒讀(dirty read):事務可以讀取其他事務還沒有提交的修改;

不可重複讀(nonrepeatable read):事務讀取先前曾讀取過的資料,發現其他的已提交事務修改或刪除了要讀取的資料;

幻象讀(phantom read):事務再次執行一個查詢,發現其他已提交事務插入了新的滿足當前查詢條件的資料。

針對以上三種現象,SQL92標準指定了4種隔離制度,這4種隔離制度一種比一種嚴格。

Read uncommitted:允許髒讀、不可重複讀和幻象讀;

Read committed:不允許髒讀,允許不可重複讀和幻象讀;

Repeatable read:不允許髒讀、不可重複讀,允許幻象讀;

Serializable:不允許髒讀、不可重複讀和幻象讀。

Oracle提供Read Committed和Serializable隔離等級,還提供了一種額外的只讀模式。其中預設採用Read Committed模式。

Oracle提供語句級讀一致性和事務級讀一致性。當Oracle開始一個查詢時,只會讀取SCN小於當前查詢SCN的記錄,如果發現資料檔案中記錄的SCN比查詢的SCN大,則Oracle會從回滾段中找到資料在查詢發生之前的映象。

序列隔離等級的適用環境:

大資料庫中執行短的事務,且UPDATE語句只更新少數幾條記錄;

兩個併發事務同時修改同一條記錄的可能性很低;

執行時間相對較長的事務以只讀事務為主。

使用序列隔離等級時需要對ORA-08177錯誤進行額外的處理。

Oracle透過鎖機制在事務之間提供資料的併發性和一致性。

鎖的模式包括兩種:

獨佔鎖:鎖住相關資源不被其他人共享。

共享鎖:根據操作型別允許資源的共享。多個事務可以在同一個資源上設立共享鎖。

死鎖:兩個事務都佔用一定的資源,且兩個事務都需要等待對方釋放資源才能繼續執行,這種情況就構成了死鎖。Oracle會自動監測死鎖的發生。

鎖型別包括三種:

DML鎖:用於保護資料;

DDL鎖:用於保護資料字典;

內部鎖和LATCH:用來保護資料庫內部結構如資料檔案。

DML鎖分為行級鎖(TX)和表級鎖(TM)兩種,而表級鎖又包含5種型別:

Row Share Table Lock(RS):獲取方式SELECT FROM TABLE FOR UPDATE OF和LOCK TABLE IN ROW SHARE MODE。

Row Exclusive Table Lock(RX):獲取方式UPDATE/INSERT/DELETE TABLE或LOCK TABLE IN ROW EXCLUSIVE MODE。

Share Table Lock(S):獲取方式LOCK TABLE IN SHARE MODE。

Share Row Exclusive Table Lock(SRX):獲取方式LOCK TABLE IN SHARE ROW EXCLUSIVE MODE。

Exclusive Table Lock(X):獲取方式LOCK TABLE IN EXCLUSIVE MODE。

DDL鎖分為獨佔DDL鎖和共享DDL鎖兩種。

Oracle9i新增功能閃回查詢:

閃回查詢允許使用者查詢過去某個時間點或系統SCN號的資料情況。

這裡有一個介紹閃回操作的例子:http://blog.itpub.net/post/468/15464

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/64429/viewspace-997637/,如需轉載,請註明出處,否則將追究法律責任。

相關文章