Oracle開發專題之:對事務的一些總結和理解
Oracle開發專題之:對事務的一些總結和理解
【1.事務隔離】
①一個未提交的事務所做的修改不能被其它事務所看到。只有當事務提交成功後,在該事務之後執行的其它事務才可能看到該事務所做的改變。
②在該事務提交之前已經執行了一部分而另一部分在該事務提交後執行的剩餘部分同樣也看不到該事務做出的改變。這是另一個Oracle特性:讀一致和快照。
③在該事務提交同時進行的其它事務同樣也看不到該事務所做的改變。
【2.語句級回滾】
①當一個SQL語句在執行期間因為發生的任何錯誤而中斷時,將產生一個“語句級回滾”。該回滾的後果就像這個SQL語句根本沒有執行過一樣。
②注意回滾是發生在“執行”階段的,如果是在SQL語句的解析階段因為語法問題而無法執行。因為沒有產生任何影響而不會出現“回滾”。
【3.事務控制的分割】
如果一個事務中包含了DML語句和DDL語句,那麼該事務會被分解成多個事務。首先在DDL之前的所有DML語句會被作為一個事務而一次性提交。然後Oracle會為這個DDL建立一個新的,單語句的事務。如果DDL語句執行失敗了,那麼DML事務依然成功。
【4.不同情況下的事務控制】
請注意:使用者從Oracle伺服器斷開連線和使用者程式強行中斷的後果是不同的。
①前者典型的例子是Oracle伺服器關閉或重啟,此時所有未提交事務會被提交。
②後者典型的例子使用者透過程式管理器強行kill掉程式,此時所有未提交事務所做的操作被回滾。
【5.事務提交前要做的事情】
Oracle提交一個事務之前,必須做以下幾件事情:
①記住資料被修改前是什麼樣子的
②記住資料即將要被改成什麼樣子
③記住redo log和undo log的關聯
④將SGA中已讀取到記憶體的資料修改為新的值(此時並未真正儲存到資料檔案)
其中第一步是透過在undo表空間中記錄undo日誌來完成的。第二步、第三步是透過向SGA中的redo日誌緩衝區寫記錄來完成的。這樣當事務回滾時就可以從redo日誌找到對應的undo日誌,從而找回之前的資料
★要特別注意的是:此時不一定會觸發DBWn程式。
★要特別注意的另一個地方是:第2步記錄事務操作的改變是記憶體中進行的,還未寫到磁碟上的redo日誌檔案
【6.事務提交時所做的事情】
①記錄SCN值(System Change Number)
②將線上重做日誌記錄(位於SGA的redo日誌緩衝區中)持久化到redo日誌檔案
③Oracle釋放資源和鎖
④Oracle將事務標記為已結束
注意:只有在commit指令被髮出後,才會將SGA中重做日誌緩衝區的內容重新整理到磁碟的redo日誌檔案。在LGWR程式執行前,重做日誌一直存在於記憶體中,也被稱為線上重做日誌。
【7.savepoint回滾和整個事務的回滾】
注意當Oracle事務回滾到某個savepoint時,在savepoint之後的所有後續savepoint將失效。但此時Transaction還是活躍且可繼續的。這一點不同於整個事務的回滾。
【8.自治事務】
從傳統上來說,一個事務只有在完整執行成功或回滾之後,才會進行下一個事務。而自治事務允許在一個事務中呼叫執行另一個事務,被呼叫事務執行完成後,呼叫事務繼續執行之前未完成的操作直至事務結束
自治事務在被呼叫後,將和外圍事務完全獨立。彼此之間並不共享任何資源或者鎖,外圍事務所有未提交的改變對自治事務來說都是不可見。自治事務提交後外圍事務將可以看到改變
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2051122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle事務控制總結Oracle
- 對事務的理解
- 原創:oracle 事務總結Oracle
- React事務的一些理解React
- Vue專案開發過程中遇到的一些問題總結Vue
- 我對遞迴的理解和總結遞迴
- MyBatis 事務管理解析:顛覆你心中對事務的理解!MyBatis
- mysql事務對效率的影響分析總結JILEMySql
- 對於Oracle鎖的一些理論總結Oracle
- Oracle開發專題之:分析函式的使用Oracle函式
- .net開發筆記(十六) 對前部分文章的一些補充和總結筆記
- 分散式事務的理解和常見解決方案彙總分散式
- 開發中的一些經驗總結
- Oracle的事務和鎖Oracle
- mysql總結(二)-事務MySql
- 分散式事務總結分散式
- 資料庫事務與 MySQL 事務總結資料庫MySql
- 總結一些開發語言對應的技術應用場景
- 總結Django一些開發經驗Django
- 關於spring事務原始碼的一些小理解Spring原始碼
- laravel開發中遇到的問題與bug修復的一些總結Laravel
- 深入理解oracle的事務隔離性Oracle
- 移動開發之總結移動開發
- 對於api管理系統的一些總結和思考API
- 事務知識點總結
- mysql鎖與事務總結MySql
- Spring事務管理總結Spring
- net中的4種事務總結
- Oracle和SQL對比語法總結OracleSQL
- 關於資料庫事務併發的理解和處理資料庫
- 對於最近的一些理解和思考
- 專案開發中對前端資料管理的理解前端
- 實習專案開發總結
- 專案開發中對成長的一些思考
- 平時收集的一些前端開發技巧總結前端
- 一些開發chrome外掛用到的API總結ChromeAPI
- Vue 開發之插槽(slot)的理解和使用Vue
- MySQL 事務常見面試題總結 | JavaGuide 稽核中MySql面試題JavaGUIIDE