文章主要描述的是DB2數據庫崩潰後用事務日志恢復操作原理,以下就是對DB2數據庫崩潰後用事務日志恢復操作原理具體內容的描述,你如果對其有興趣的話你就可以點擊以下的文章進行觀看了。
在系統DB2數據庫崩潰之後,使用DB2的事務日志恢復數據庫。 您曾多少次碰到過錯誤消息“SQL0946C The transaction log for the database is full?”
在盡力解決該問題時,您是否停下來思考如下兩個問題:1. 為何存在事務日志;2. 事務日志記錄服務的目的是什麼呢?
若沒有事務,多個用戶和應用程序同時與一個數據庫進行交互時就必然會破壞數據。而如果沒有事務日志記錄,DB2 UDB中的一些據庫恢復方法就不會存在。
如果您還沒有完全理解這些概念,也不必擔憂。我將解釋事務是什麼以及事務日志記錄背後的機制。然後,我將展示在系統DB2數據庫崩潰或程序故障之後,如何使用數據庫事務日志文件中所存儲的信息來使數據庫回歸到一致、可用的狀態。您還可以通過這些重要的日志做更多事情。
事務
事務也稱作工作單元)是指一個或多個SQL操作的序列,這些操作組合成一個單元且通常位於一個應用程序進程內。該單元通常稱作是“原子的”,因為它是不可分的——它的所有工作要麼全都執行,要麼全都不執行。一個給定的事務可以執行任何數目的SQL操作從一個到幾千個,取決於業務邏輯裡對於“一步”的定義)。
一個事務的開始和終止定義了數據庫裡數據一致性的點;要麼將事務裡所執行的所有操作的結果應用到數據庫上,並使之成為永久的已提交),要麼將之都撤銷回滾),使數據庫返回到啟動該事務之前的狀態。
事務是在建立到數據庫的連接之後第一次執行SQL語句時或在現有事務終止時立即啟動。一旦啟動,就可以使用名為原子提交的功能隱式地終止該事務。通過原子提交,會將每條可執行的SQL語句當作一個事務。如果該語句執行成功,那它所做的任何修改都將應用到數據庫上,但如果語句失敗,那修改將被丟棄。
還可以通過執行COMMIT或ROLLBACK SQL語句顯式地終止事務。
這些語句的基本語法是:
- COMMIT <WORK>
- ROLLBACK <WORK>
在COMMIT終止事務時,會將該事務從開始時對數據庫所做的所有修改變成永久性的。使用ROLLBACK,所有修改都將撤銷。
事務所做的未提交的修改對其他用戶和應用程序來說是無法訪問的,除非那些用戶和應用程序使用的是未提交讀UR)隔離。然而,一旦提交了事務所做的修改,它們對於所有其他用戶和應用程序來說就都是可以訪問的了,並且只能通過執行新事務中的新SQL語句來刪除。
事務日志記錄
在向一個基表進行INSERT時,首先在緩沖池中創建一條記錄,該緩沖池與指定該表的數據存儲於何處的表空間相關聯。每次更新或刪除一條記錄時,就從存儲器中檢索包含該記錄的頁面,並復制到適當的緩沖池中,然後由UPDATE/DELETE進行修改。
一旦進行了這一修改,就會向日志緩沖器寫入一條反映該動作的記錄,日志緩沖器是內存中的另一指定存儲區為日志緩沖器預留的真正存儲大小是由logbufsiz數據庫配置參數控制的)。
如果執行INSERT,就會寫入一條包含了新行數據值的記錄。當出現刪除時,就寫入一條包含了該行原始值的記錄。如果執行UPDATE,就寫入一條包含了該行原始值和新值的記錄在大多數情況下,通過用該行的更新值在原始值上執行EXCLUSIVE OR,為更新操作生成日志記錄)。最終,當執行INSERT、UPDATE或DELETE的事務終止時,就將相應的COMMIT或ROLLBACK記錄寫入日志緩沖器。
每當激活緩沖池I/O頁面清理器,日志緩沖器本身已滿,或者提交或回滾事務時,就立即將日志緩沖器中存儲的所有記錄寫入磁盤上所存儲的一個或多個事務日志文件中。如果發生系統故障,日志緩沖器的不斷刷新將最小化可能丟失的日志記錄數目。
一旦將與特定事務相關聯的所有日志記錄包括相應的COMMIT或ROLLBACK記錄)成功具體化externalize)為一個或多個日志文件,就會將事務本身的結果復制到適當的表空間容器以永久存儲已修改的數據頁本身仍保留在內存中,在必要時可以快速進行訪問;它們最終將被改寫)。該過程稱作寫前日志記錄write-ahead logging),保證對數據所做的修改在記錄到數據庫之前,總是被具體化為日志文件。
因為多個事務可以在任何時候使用一個數據庫,所以一個日志文件可能包含屬於幾個不同事務的日志記錄。為了追蹤一條日志記錄屬於哪個事務,要給每條日志記錄分配一個特殊的事務ID,將之綁定到創建它的事務。
通過使用事務ID,可以隨時將與特定事務相關聯的日志記錄寫入一個或多個日志文件,而不影響數據一致性——最終,對於終止該事務的操作的COMMIT或ROLLBACK記錄也將進行日志記錄,以上的相關內容就是對DB2數據庫崩潰後用事務日志恢復的原理的介紹,望你能有所收獲。