oracle 事務

winston_DBA發表於2015-04-19
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章