DB2線上備份與恢復

like052629發表於2014-11-28

預設情況為迴圈日誌,也就是無法進行日誌歸檔或線上備份,若需要進行線上備份,需修改為歸檔日誌模式。

對於v9.5以後的版本,貌似只需要修改  
First log archive method                 (LOGARCHMETH1) = DISK:/home/db2inst1/db2data/  這一個引數即可實現線上歸檔。
db2 update db cfg for db2name using logarchmeth1 'disk:/home/db2inst1/db2data'

LOGARCHMETH1這個即設定歸檔的方式,可以指定DISK、TSM等引數。
修改該引數後需要重啟資料庫才可生效

[db2inst1@localhost backup]$ db2stop force
11/25/2013 22:17:02    0  0  SQL1064N  DB2STOP processing was successful.
SQL1064N  DB2STOP processing was successful.
[db2inst1@localhost backup]$ db2start
11/25/2013 22:17:07    0  0  SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
[db2inst1@localhost backup]$ db2 connect to sample
SQL1116N  A connection to or activation of database "SAMPLE" cannot be made 
because of BACKUP PENDING.  SQLSTATE=57019
發現重啟後還是不能連線,這時資料庫狀態為BACKUP PENDING,需要做一個備份,記住是離線備份
db2 backup db sample to 
離線備份完成後,即可連線成功。
db2 archive log for db sample--測試日誌歸檔是否成功,執行完畢後到/home/db2inst1/db2data/db2inst1/EPS目錄檢視是否有歸檔日誌生成。

 
對於較低版本修改為線上歸檔的方法(2個引數是必須修改的,對於高版本,也可繼續使用)         

1. db2 update db cfg for sample using userexit on;--啟用使用者出口

2. db2 update db cfg using logretain on;--啟用歸檔日誌

3. db2 update db cfg using trackmod on;--啟用增量備份功能

線上備份:
修改為歸檔模式後,資料庫不可連線,為backup pending狀態,需進行一次離線備份後才可繼續使用。
db2 force application all;
db2 backup db sample to --離線備份

db2 backup db sample online to --線上備份(不包含日誌)

db2 backup db sample online to  include logs--線上備份(包含歸檔日誌)

db2 archive log for db sample--切換歸檔日誌

還原:

包含歸檔日誌的還原,首先需要將log恢復出來

db2 restore db db sample from /home/db2inst1/db2data taken at 20141104092152 logtarget /home/db2inst1/dbsample_log/

   db2 "rollforward db sampleto end of logs and stop overflow log path(/home/db2inst1/dbsample_log/)"--日誌回滾 

恢復1
db2 restore db  [資料庫名]   [taken at 2011**** ]
db2 rollforward db  [資料庫名]   to end of logs and complete 


恢復2
db2 restore db  [資料庫名]   [taken at 2011**** ]
db2 rollforward db  [資料庫名]   to end of logs and complete overflow log path(/dbfiles/logarchive)


恢復3
db2 restore db  [資料庫名]  [taken at 2011****] logtarget /dbfile/logarchive
db2 rollforward db [資料庫名] to end of logs and complete overflow log path(/dbfiles/logarchive)

end of logs的作用是讓DB2在執行備份操作後應用所有指定位置的可用的日誌檔案
在前滾處理期間,DB2如果在當前日誌路徑中沒有發現日誌檔案,則搜尋overflow log path選項指定的路徑,並使用這個位置的日誌檔案
執行sample資料庫前滾,可以使用下列語句:
rollforward database sample to end of logs and complete
rollforward database sample to timestamp and complete
rollforward database sample to timestamp using local time and complete

這幾種恢復後的資料有什麼差別嗎?

12的區別在於,1使用預設的日誌路徑進行前滾,2指定了/dbfiles/logarchive為日誌的路徑
23的區別在於,3多了logtarget /dbfile/logarchive,這個子句只有在備份時(db2 backup db test online to /home/db2inst1/on_back/ include logs)指定了include logs才可以用,把你備份出來的檔案裡包含的日誌檔案釋放到/dbfile/logarchive目錄下 

####

db2 歸檔日誌的相關資訊儲存在恢復歷史檔案中,可以透過db2 list history 命令檢視

db2 list history archive log all for eps;

清除這些資訊,需要使用db2 prune history命令。該命令會清楚指定時間戳及以前的所有條目(不只是歸檔日誌)。預設情況下,系統不會清除最近一次資料庫

全備之後的歸檔日誌資訊:db2 prune history 20100103235553 

db2 list history backup all for eps

透過使用 and delete 引數,可以在清理條目的同時刪除對應的歸檔日誌檔案。

db2 prune history 20100103235608 and delete 

對於全備之後生成的歸檔日誌檔案,不會自動清除,如果想強制清除,可以使用with force option引數。

db2 prune logfile命令可以清除活動目錄下的線上歸檔日誌檔案,但對離線歸檔日誌檔案無效。

#####

 
從v8.2開始提供recover database,新的recover database命令結合了restore database 和 rollforward database命令的功能,簡單來說recover=restore+rollforward,使用此命令時,根據恢復歷史檔案中的資訊使資料庫恢復到一個指定的時間,它自動選擇最佳適用備份映象來執行恢復操作。
recover db sample
recover db sample to 2015-03-10-11.00.00 using local time
第一行,db2從可用最近備份映象恢復sample資料庫,並將前滾到日誌的最後
第二行,db2將sample資料庫恢復到時間時間點2015-03-10-11.00.00,這是按照當地時間指定的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28258625/viewspace-1350214/,如需轉載,請註明出處,否則將追究法律責任。

相關文章