oracle 事務
1.事務是一個包含一條或多條SQL語句的邏輯的原子單元,即要麼全部提交,要麼全部回滾。
2.oracle資料庫給每個事務分配一個事務ID(transaction ID)
3.事務的四大屬性:原子性(atomicity)一致性(consistency)隔離性(isolation)永續性(durability)
原子性:事務中的操作,要麼全做要麼全不做,例如更行1000條記錄,若更新到500行失敗,則回滾,就像500條從來沒被更新過一樣;
一致性:事務使得資料庫從一個一致性狀態到另一個一致性狀態;
隔離性:一個事務在提交前,對於其他事務是不可見的;
永續性:一旦事務提交,則事務所做的修改是永續性的。
4.事務的組成:
事務由一條或多條組成在一起用於原子性地修改資料庫的DML語句(select除外)組成;
或者事務由DDL語句組成。
5.事務的開始
由第一條可執行的SQL語句開始。可執行的SQL語句為DML語句、DDL語句或者set transaction語句。
當事務開始後,資料庫為事務分配undo段,當undo段和事務表(transaction table slot)分配完成後,oracle為事務分配唯一的事務ID。
6.oracle中的事務可以透過v$transaction來檢視。
7.事務的結束
當使用者提交或者不帶檢查點的回滾操作,事務結束;
當使用者執行DDL語句,如CREATE DROP RENAME或ALTER時,資料庫會觸發隱式提交;
當使用者從大多數連線oracle工具(如sql*plus等)斷開連線或者連線oracle的應用程式斷開連線時,會觸發一個隱式提交;
當客戶端程式異常結束,則oracle會自動回滾相關事務。
8.語句級原子性
oracle支援語句級原子性,也就是說每一條可執行SQL語句(DML/DDL/SET TRANSACTION)語句都被視為一個獨立的事務。
語句級原子性的事務發生回滾後,並不會對其他語句造成影響;
當某語句級原子性事務發生回滾後,對於資料庫來說,就像該語句從來沒有發生過一樣;
語句級原子性事務回滾最常見的例子為:插入與主鍵約束衝突的資料、造成死鎖的SQL語句等。但是沒有透過語法或語句檢查的SQL語句,由於oracle並沒有真正的執行該語句,所以並不會造成語句級原子性事務的回滾。
9.system change number
SCN為oracle的內部一個邏輯的時鐘,用於將oracle內部發生的事件進行排序。也就是說SCN值小的事件較早發生,SCN值相同的事件,意味著同時發生。
每個事務都會有一個SCN,也就是說一個事務內的多個修改(例如update)擁有相同的SCN值。當事務提交時,oracle又會記錄一個SCN值。
當一個事務修改資料後,oracle會將此時的SCN值寫入和該事務對應的UNDO段內,LGWR會將事務的提交的記錄資訊寫入online redo log中。
oracle使用SCN來進行例項恢復和介質恢復。
10.事務控制
COMMIT:提交使事務中做的改變持久化,並且提交還會清除事務中的所有檢查點和釋放事務相關的鎖資源;
ROLLBACK:回滾會使自從上個COMMIT或者ROLLBACK以來發生的改變全部撤銷;
ROLLBACK TO SAVEPOINT:該操作會使自指定的儲存點以來發生的改變全部被撤銷,但是並不撤銷事務所有改變;
SAVEPOINT:指定一個後續可以回滾的點。
11.事務名
事務名是使用者指定的一個標記,透過set transaction name '......'語句來指定。
事務名以下優勢:
方便監控長時間執行的事務,也方便解決可疑分散式事務;
在OEM等工具中可以更加方便的對系統活動進行監控,因為事務名會和事務ID一起顯示;
oracle會將事務名寫入redo審計記錄中,方便後續的日誌挖掘;
可以透過事務名在V$TRANSACTION檢視中查詢事務的相關資訊。
12.活動事務
活動事務是指已經開始但是還未提交或者回滾的事務;
活動事務中涉及到的資料的狀態:
活動事務會在SGA中生成undo塊(data buffer cache中);
活動事務還會產生online redo log buffer 資料,用於保護改變的塊和undo塊;
已提交的事務會將事務中的資料改變寫入資料緩衝池中,但不一定會被立即寫入到資料檔案中。
活動事務中涉及到的記錄,將會被該事務鎖定,不允許其他事務進行修改,並且其他事務也不會讀到活動事務所做的修改。
13.儲存點
儲存點是使用者自定義的在事務中間的一個標記,儲存點在oracle內部和一個SCN值關聯。儲存點將一個事務分成多個部分。
14.事務的回滾
當回滾整個事務,而不是回滾到某個儲存點,會有以下操作:
利用回滾段,撤銷事務裡的所有SQL操作相關的改變;
釋放事務中涉及的所有鎖資源;注意:回滾到某個儲存點,並不會釋放事務中之前獲取的鎖!
擦除事務中的所有儲存點;
結束當前事務,使資料庫回到事務開始時的一致性狀態。
15.事務的提交
當提交一個事務時,會使事務中涉及的所有改變都持久化。
提交事務時,將進行如下操作:
為提交產生一個SCN;
LGWR將redo快取中剩餘的redo資訊寫入到online redo log檔案中,並且將事務的SCN寫入到online redo log中;
oracle釋放事務相關的鎖;
oracle刪除事務相關的所有儲存點;
oracle進行提交清理;
結束事務。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1586341/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle事務Oracle
- oracle 中的事務Oracle
- Oracle只讀事務Oracle
- ORACLE事務管理概述Oracle
- oracle分散式事務Oracle分散式
- oracle的只讀事務Oracle
- Oracle事務控制總結Oracle
- oracle事務內部原理Oracle
- Oracle的事務和鎖Oracle
- Oracle 查詢事務數Oracle
- oracle必須注意事務Oracle
- Oracle 巢狀事務 VS 自治事務Oracle巢狀
- Oracle面試寶典-事務篇Oracle面試
- 原創:oracle 事務總結Oracle
- ORACLE 死事務的回滾Oracle
- 淺談ORACLE的分散式事務Oracle分散式
- Oracle-事務隔離級別Oracle
- oracle事務知識點小結Oracle
- oracle檢視回滾的事務Oracle
- Oracle ITL (Interested Transaction List) - 事務槽OracleREST
- oracle事務中的儲存點Oracle
- 淺述Oracle分散式事務概念Oracle分散式
- 終止oracle日誌分析事務Oracle
- Oracle 事務原子性的實驗Oracle
- oracle實驗記錄 (事務控制)Oracle
- Oracle vs PostgreSQL,研發注意事項(6)- 事務處理OracleSQL
- Oracle分散式事務典型案例處理Oracle分散式
- 十、Redis事務、事務鎖Redis
- 分散式事務之Spring事務與JMS事務(二)分散式Spring
- MySQL事務(一)認識事務MySql
- 深入理解oracle的事務隔離性Oracle
- Oracle的TX鎖(行級鎖、事務鎖)Oracle
- Oracle 通過undo塊檢視事務資訊Oracle
- 檢視ORACLE事務隔離級別方法Oracle
- 【原創】Oracle 事務探索與例項(二)Oracle
- 【原創】 Oracle 事務探索與例項(一)Oracle
- Oracle11新特性——撤銷事務(一)Oracle
- 統計Oracle 查詢事務數的方法Oracle