資料併發性和一致性——資料庫概念
這一章描述了資料併發訪問和資料的一致性。
資料併發性意味著許多使用者可以同時訪問資料。
資料一致性意味著每個使用者看到的資料具有一致性,包括當前使用者事務和其他使用者事務對資料的改變。
[@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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle資料併發性和一致性Oracle
- Redis和資料庫的資料一致性問題Redis資料庫
- Redis與資料庫資料一致性Redis資料庫
- 資料庫和資料湖的關鍵概念性差異資料庫
- 如何保證mongodb和資料庫雙寫資料一致性?MongoDB資料庫
- Oracle的資料併發與一致性詳解(上)Oracle
- [Redis] 02-快取和資料庫資料一致性問題Redis快取資料庫
- 資料庫一致性備份資料庫
- 【資料庫】併發控制資料庫
- PHP 併發扣款,保證資料一致性(悲觀鎖)PHP
- 什麼是備份資料庫?什麼是資料庫一致性備份和非一致性備份?資料庫
- 資料庫概念資料庫
- 資料庫事務 ACID屬性、資料庫併發問題和四種隔離級別資料庫
- 快取與資料庫一致性快取資料庫
- 快速檢查資料庫一致性資料庫
- 資料庫非一致性備份資料庫
- 資料庫與快取資料一致性解決方案資料庫快取
- 資料一致性
- 資料庫併發問題資料庫
- Oracle資料庫開發——表(概念)Oracle資料庫
- 資料庫概論 (一)資料庫概念資料庫
- 資料庫和快取的一致性如何保證資料庫快取
- 如何保證快取和資料庫的一致性?快取資料庫
- 高併發架構系列:Redis快取和MySQL資料一致性方案詳解架構Redis快取MySql
- 資料庫名、例項名、資料庫域名、全域性資料庫名、服務名概念區分資料庫
- 快取與資料庫的一致性快取資料庫
- 如何實現資料庫讀一致性資料庫
- 資料庫的概念資料庫
- Kubernetes 併發控制與資料一致性的實現原理
- Kubernetes併發控制與資料一致性的實現原理
- 高併發下的資料一致性保障(圖文全面總結)
- Oracle資料庫-----資料庫的基本概念Oracle資料庫
- NoSQL資料庫概念與NoSQL資料庫家族SQL資料庫
- MySQL資料一致性MySql
- 從實戰出發,聊聊快取資料庫一致性快取資料庫
- 面試常問:如何保證Redis快取和資料庫的資料一致性NRXW面試Redis快取資料庫
- 趣說 | 資料庫和快取如何保證一致性?資料庫快取
- MySQL資料庫資料一致性比對的方案的探討MySql資料庫