這篇文章將為大家詳細講解有關DB2中rollforward命令怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)公司,為您提供網站建設、成都網站制作、網站營銷推廣、網站開發(fā)設計,對服務酒樓設計等多個行業(yè)擁有豐富的網站建設及推廣經驗。成都創(chuàng)新互聯(lián)公司網站建設公司成立于2013年,提供專業(yè)網站制作報價服務,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責任!
在數(shù)據庫成為存儲企業(yè)數(shù)據的載體時,如何恢復數(shù)據成為大家比較關心的話題。在 DB2 中恢復數(shù)據的種類很多,本文主要介紹數(shù)據 DB2 rollforward 的使用說明,并使用 DB2 V97 做了一些實例分析,使讀者更好的了解和掌握 rollforward 的使用。
DB2 中有四種恢復數(shù)據庫的方式,以下對其進行介紹說明:
Crash Recovery 是指在事務處理過程中被中斷,從而可能造成數(shù)據不一致,不可用。這時 Crash Recovery 就會保護數(shù)據庫,避免造成數(shù)據不一致,不可用的情況。
High Availability Disaster Recovery 是指高可用性災難恢復(HADR),其通過將數(shù)據從源數(shù)據庫復制到目標數(shù)據庫來防止災難性的數(shù)據丟失。
Version Recovery 是對備份介質的恢復,主要是 restore 命令。
Rollforward Recovery,一般是當數(shù)據庫備份后,又執(zhí)行了一些新事務,如果這時發(fā)生了存儲故障或誤操作,在 restore 之后使用 rollforward 就可以對這些新事務進行修復,本文主要介紹這種恢復方式。
rollforward 只能在數(shù)據庫 recoverable 狀態(tài)下使用,即采用歸檔日志,參數(shù) logarchmeth2 或者 logarchmeth3 為非 OFF 的狀態(tài)。
首先需要修改參數(shù),使得數(shù)據庫在 recoverable 狀態(tài)下。
清單 1. 修改參數(shù) LOGARCHMETH1
1 | db2 "update db cfg for $db using logfilsiz 4 LOGARCHMETH1 disk:$archivePath" |
undefined
如果修改參數(shù)前 logarchmeth2 為 OFF,修改參數(shù)后,數(shù)據庫處于 backup pending 狀態(tài),需要進行 offline backup 來使數(shù)據庫可用。
清單 2. 備份數(shù)據庫
1 | db2 "backup db $db to $backupPath" |
undefined
備份好數(shù)據庫后執(zhí)行一些事務,例如簡單事務操作 create table,insert,update,delete 等等。然后 Restore 數(shù)據庫,如果是 tablespace 級別的 rollforward,還可以用其他方式來使表空間處于 rollforward-pending 狀態(tài)。
清單 3. 恢復數(shù)據庫
1 | db2 "restore db $db from $backdir without prompting" |
undefined
如果使用 restore db 時指定 WITHOUT ROLLING FORWARD 參數(shù),則不能使數(shù)據庫處于 rollforward-pending 狀態(tài),從而不能使用 rollforward。這里不指定 WITHOUT ROLLING FORWARD 參數(shù),當數(shù)據庫或表空間處于 rollforward-pending 狀態(tài),就可以對其進行 rollforward 操作了。
在數(shù)據庫日志中,記錄了對該數(shù)據庫的所有操作,用 rollforward 可以通過前滾日志把數(shù)據庫恢復到備份后有日志記錄的某一時間點,或者活動日志的末尾。
常用的 rollforward 參數(shù)有以下幾個:
QUERY STATUS,主要查詢數(shù)據庫當前狀態(tài)。
STOP,特指 rollforward 完成,這樣就不能在執(zhí)行任何別的 rollforward 操作了,除非重新 restore 然后 rollforward。
CANCEL,取消 rollforward 操作,使進行 rollforward 中的數(shù)據庫退出 rollforward pending 狀態(tài)。
POINT IN TIME,rollforward 到某一特定時間點。
END OF LOGS,rollforward 到活動日志的末尾。
ONLINE,使表空間級的 rollforward 在執(zhí)行時處于 online 狀態(tài),允許其他指向數(shù)據庫的連接。
在分區(qū)數(shù)據環(huán)境中,rollforward 操作必須執(zhí)行在某個分區(qū)上,以下簡單進行介紹:
point-in-time rollforward 會在所有的 partition 上執(zhí)行。
END OF LOGS rollforward,如果有 ON DATABASE PARTITION 參數(shù),rollforward 只在指定 partition 上運行,如果沒有指定 partition,那么會在所有 partition 上生效。
end of backup 會影響所有的 partition。
綜合上述參數(shù),可以把 rollforward 分為兩種類型,數(shù)據庫級別的 rollforward 和表空間級的 rollforward。數(shù)據庫級的 rollforward 需要數(shù)據庫首先 restore,從而使數(shù)據庫處于 rollforward pending 狀態(tài)。而表空間級的 rolllforward 并不是只有 restore 才能成為 rollforward pending 狀態(tài),比如突然斷電或者其他情況等等也可能使表空間進行 rollforward 操作。
當執(zhí)行 rollforward 時,如果是數(shù)據庫在 rollforward pending 狀態(tài),則進行數(shù)據庫級 rollforward。如果執(zhí)行完后某些表空間還是 rollforward pending 狀態(tài),則要執(zhí)行表空間級的 rollforward 來使這些表空間恢復。在表空間級的 rollforward 中,可以指定表空間來進行 rollforward,如果未指定,則所有處于此狀態(tài)的表空間都會進行 rollforward。如果在 backup 后,更改了一個表空間的名字,那么在 rollforward 該表空間時需要使用新的表空間名字。
數(shù)據庫級 rollforward 和表空間級還有一點不同就是,數(shù)據庫級進行 rollforward 時該數(shù)據庫不能進行其他連接操作,也就是必須斷開其他連接才能進行數(shù)據庫級的 rollforward。而表空間級的可以選擇其他操作能否進行。
不能取消正在進行的 rollfoward 操作,只能在 rollfoward 完成后,使用 rollforward cancel 來取消還沒有 stop 的 rollforward,如果已經有 stop 了,就不能 cancel 了。
當數(shù)據庫的數(shù)據量較大時,數(shù)據庫的全備份和恢復都非常消耗時間,這時通過表空間備份可以快速恢復數(shù)據庫。
在這個例子中,Restore 三個表空間,使用 rollforward to the end of the logs 前滾一個表空間到活動日志的末尾,然后使用 to the end of the logs and stop 前滾另外兩個表空間到活動日志的末尾。
作為 restore 和 rollforward 的先決條件,首先需要 backup 每一個表空間,如清單 4 所示。
清單 4. Backup 表空間
1 2 3 4 5 6 7 8 9 | db2 "update db cfg for test using logfilsiz 4 LOGARCHMETH1 disk:$archivePath" db2 "backup db test to $backupPath" db2 "connect to test" db2 "create tablespace tbs1" db2 "create tablespace tbs2" db2 "create tablespace tbs3" db2 "backup db test tablespace(tbs1) to $backupPath/tbs1" db2 "backup db test tablespace(tbs2) to $backupPath/tbs2" db2 "backup db test tablespace(tbs3) to $backupPath/tbs3" |
undefined
圖 1 顯示了備份結果。
圖 1. Backup tablespace
備份之后可以在指定的目錄中看到相應的備份影像。
清單 5 顯示了對三個表空間創(chuàng)建表和插入數(shù)據的操作清單。
清單 5. 操作表空間
1 2 3 4 5 6 7 | db2 "connect to test" db2 "create table t1(a int) in tbs1" db2 "create table t2(a int) in tbs2" db2 "create table t3(a int) in tbs3" db2 "insert int t1 values(1)" db2 "insert int t2 values(2)" db2 "insert int t3 values(3)" |
undefined
操作完成后,可以通過剛才的備份影象對三個表空間進行 restore。要注意恢復的備份影像一定要和所恢復的表空間對應,不然就會恢復失敗,如清單 6 所示。
清單 6. Restore 三個表空間
1 2 3 | db2 "restore db test tablespace(tbs1) from $backupPath/tbs1 without prompting" db2 "restore db test tablespace(tbs2) from $backupPath/tbs2 without prompting" db2 "restore db test tablespace(tbs3) from $backupPath/tbs3 without prompting" |
undefined
圖 2 顯示了操作表空間和恢復表空間的結果。
圖 2. 插入數(shù)據后恢復表空間
恢復成功之后,三個表空間都處于 rollforward pending 狀態(tài),用戶無法訪問,狀態(tài)如圖 3 所示。
圖 3. 驗證表空間 rollforward-pending 狀態(tài)
清單 7 顯示了訪問表空間的命令。
清單 7. 訪問表空間
1 2 3 4 | db2 "connect to test" db2 "select * from t1" db2 "select * from t2" db2 "select * from t3" |
undefined
此時需要做前滾操作使表空間回到可用狀態(tài),如清單 8 所示。
清單 8. 前滾表空間并驗證結果
1 2 3 4 5 6 | db2 "rollforward db test to end of logs tablespace(tbs1) online" db2 "rollforward db test to end of logs and stop tablespace(tbs2, tbs3) online" db2 "connect to test" db2 "select * from t1" db2 "select * from t2" db2 "select * from t3" |
undefined
圖 4 正確返回對表的操作結果,說明 rollforward 成功。
圖 4. 驗證結果
rollforward 命令的 query status 選項可用于列出如下一些當前數(shù)據庫的信息。
DB2 已經前滾的日志文件。
需要的下一個歸檔日志文件。
自前滾處理開始以來最近提交的事務的時間戳。
下面使用清單 9 來查詢數(shù)據庫狀態(tài)。
清單 9. 前滾數(shù)據庫并查詢狀態(tài)
1 | db2 "rollforward db test query status" |
undefined
圖 5 中顯示 DB pending 狀態(tài)的數(shù)據庫,實際上是處于 rollforward pending 狀態(tài)。需要前滾數(shù)據庫,使數(shù)據庫回到正常狀態(tài)。
圖 5. Check Rollforward Pending Status
在進行 cancel 操作前,先執(zhí)行最基本的操作,db2 rollforward db $db to end of logs,操作完成后所有在數(shù)據庫備份后寫的日志文件都會前滾,如圖 6 所示。
圖 6. Rollforward to end of logs
接下來執(zhí)行 db2 rollforward db $db cancel 操作,即取消前滾操作。執(zhí)行之后前面所做的所有前滾操作都將回滾,數(shù)據庫重新處于 restore-pending 狀態(tài),此時任何連接都被拒絕。
清單 10 列出了取消前滾并進行 restore 的命令。
清單 10. cancel rollforward and restore
1 2 3 4 | db2 "rollforward db test cancel" db2 "connect to test" db2 "restore db test from $backupPath without prompting" db2 "connect to test" |
undefined
當剛取消前滾時,由于數(shù)據庫處于 restore pending 狀態(tài),無法連接上數(shù)據庫,如圖 7 所示。
圖 7. Restore Pending 狀態(tài)
重新執(zhí)行 restore 操作,db2 restore db $db from $backdir without prompting,
此時數(shù)據庫處于 rollforward-pending 狀態(tài),此時任何連接都被拒絕,如圖 8 所示
圖 8. Rollforward Pending 狀態(tài)
接著上面的實例,執(zhí)行前滾操作來使數(shù)據庫可以恢復正常狀態(tài)。執(zhí)行 db2 rollforward db $db to end of logs and complete 操作,將前滾到日志的最后,這意味著所有歸檔的日志和活動日志都被遍歷。如清單 11 和圖 9 所示。
清單 11. 前滾到活動日志末尾并完成前滾
1 | db2 "rollforward db test to end of logs and complete" |
undefinedundefined
如果在執(zhí)行 rollforward to end of logs 中,用戶誤操作或者其他原因不小心中斷了前滾操作,那么再次執(zhí)行 rollforward to end of logs 時,會接著上次的中斷狀態(tài),繼續(xù)執(zhí)行以至完成。例如:db2 rollforward db $db to end of logs 在執(zhí)行過程中按 Ctrl+C,使前滾操作執(zhí)行中斷,此時數(shù)據庫仍然處于 rollforward-pending 狀態(tài)。清單 12 列出了這個實例的命令。
清單 12. 前滾中斷
1 2 3 4 | db2 "rollforward db test to end of logs" Push Ctrl+C db2 "rollforward db test to end of logs and stop" db2 "connect to test" |
undefined
圖 10 顯示了中斷 rollfoward 命令的結果。
圖 10. Rollforward Pending 狀態(tài)
此時執(zhí)行前滾操作 db2 rollforward db $db to end of logs and stop,rollforward 繼續(xù)執(zhí)行至完成,這時數(shù)據庫連接成功,如圖 11 所示。
圖 11. Rollforward Completed
noretrieve 參數(shù)表明不需要取回已經歸檔的日志,所以 rollforward db $db to end of logs and stop noretrieve 成功與否取決與 rollforward 是否需要取回歸檔日志文件。如果需要,因為前滾參數(shù)指定 noretrieve,那前滾會因為缺少這些日志文件而失敗。清單 13 和圖 12 列出了這個實例。
清單 13. 不需要取回歸檔日志的前滾
1 | db2 "rollforward db test to end of logs and stop noretrieve" |
undefinedundefined
參數(shù) overflow log path 會覆蓋以前設置的 overflow log path,如果先前設置了 db2 update db cfg for test using overflowlogpath $path,那么使用 rollforward db $db to end of logs and complete overflow log path ($overflow) 命令,$overflow 會取代 $path 成為新的 overflow log path。清單 14 和圖 13 顯示了該實例。
清單 14. 覆蓋 logpath 的前滾
1 | db2 "rollforward db test to end of logs and complete overflow log path ($overflowPath3)" |
undefinedundefined
在 rollforward 執(zhí)行過程中可以看到在新的目錄 $overflow 中的日志文件,可見參數(shù)生效,如圖 14 所示。
圖 14. Overflow 日志列表
數(shù)據庫還可以進行 rollforward backup 操作,如清單 15 所示。
清單 15. 前滾備份
1 2 3 | db2 "backup db test online to $backupPath include logs" db2 "restore db test from $backupPath taken at 20091101125919 without prompting" db2 "rollforward db test to end of backup" |
undefined
圖 15 顯示了 online backup 的結果。
圖 15. Online backup
然后執(zhí)行
1 | db2 restore db $db from $backupPath taken at $backupNum without prompting |
undefined
和
1 | db2 rollforward db $db to end of backup |
undefined
就可以進行恢復。Rollforward to the end of backup 可以前滾分區(qū)數(shù)據庫中所有的分區(qū)到最近的恢復點。要人工的定位這個恢復點很難,特別是對分區(qū)數(shù)據庫難上加難了,而使用 end of backup 卻很容易定位。圖 16 顯示了最終結果。
圖 16. Rollforward to end of backup
關于“DB2中rollforward命令怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
新聞名稱:DB2中rollforward命令怎么用
瀏覽路徑:http://www.chinadenli.net/article34/jsgope.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信小程序、服務器托管、用戶體驗、網站導航、動態(tài)網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)