公司有一台DB2伺服器線上增量備份失敗,使用的備份軟體為NETBACKUP 7.5。具體報錯如下:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/2210234630-0.jpg" title="nbu44.jpg" alt="172833126.jpg" />
nbu報4號錯誤,在賽門鐵克的官網上,對4號錯誤的描述是
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/221023M15-1.jpg" title="nbu解釋.jpg" alt="173104282.jpg" />
給出的解決方案是驗證許可權,是否可刪除檔案。如果你從這個思路去找原因解決問題,就會很困惑。因為即使你把許可權設成777,也還是會報這個錯誤。
換一個思路,還是看看DB2的db2diag.log日誌吧。日誌裡有這樣一段描述:
2013-06-19-15.22.29.980017-360 E437909183A905 LEVEL: Severe
PID : 798772 TID : 1 PROC : db2agent (idle) 0
INSTANCE: db2inst2 NODE : 000 DB : PORTALDB
APPHDL : 0-490 APPID: *LOCAL.db2inst2.130619212231
AUTHID : DB2INST2
FUNCTION: DB2 UDB, database utilities, sqlubInitCheck, probe:310
MESSAGE : SQL2426N The database has not been configured to allow the
incremental backup operation. Reason code = "".
這個資訊告訴我們資料庫沒有配置允許增量備份的功能,在DB2中需要開啟。在ORACLE中,則可以通過RMAN實現比較方便的增量和差異備份。
接下來我們查一下TRACKMOD參數
$ db2 get db cfg for portaldb|grep -i trackmod
Track modified pages (TRACKMOD) = OFF
發現此參數為OFF,這顯然是導致DB2增量備份失敗的最主要的原因。
因為db2的增量備份需要設定tracemod為on,這樣資料庫將在物理頁上記錄更改的部分頁,做dirty標記。開啟了增量備份意味著,不需要每次備份一個超大的資料庫.同時意味著你可以將資料庫恢複到崩潰前的狀態,而不是你最後一次備份時的狀態,最大可能的減少資料損失.
正確設定增量備份需要注意三個參數:
db2 update db cfg using logretain on(或者recovery); 啟用歸檔日誌
db2 update db cfg using trackmod on; 啟用增量備份功能
db2 update db cfg using userexit on; 啟用使用者出口
更改的效果:
$ db2 update db cfg using trackmod on
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.
SQL1363W One or more of the parameters submitted for immediate modification
were not changed dynamically. For these configuration parameters, all
applications must disconnect from this database before the changes become
effective.
也就是說,對於這些配置參數,必須在所有應用程式都與此資料庫中斷連線之後db2 force applications all),更改才會生效。另外在更改參數後,資料庫處於backup pending狀態,在執行增量、線上備份之前必須執行離線全備份一次,以使狀態正常。
補充:如何進行線上備份、增量備份、差異備份?
db2 backup db testdb online to 備份路徑(線上全備份) include logs
db2 backup db testdb online incremental to 備份路徑(增量備份)
db2 backup db testdb online incremental delta to 備份路徑(delta備份)
如何使用備份檔案進行恢複?
1.查看備份檔案的完整性,並驗證是否可用
db2ckbkp -h /db2logs/PORTALDB.0.db2inst2.NODE0000.CATN0000.20130619001007.001
2.執行db2ckrst命令返回建議的必需的恢複操作命令。
db2ckrst -d portaldb -r database -t 20130619001007
3.執行上個命令給出的命令序列
db2 restore db portaldb incremental from /backup taken at 20130619001007 buffer 100
將會將資料庫還原到備份的時刻,之後應該執行日誌前滾(此時資料庫處於前滾暫掛狀態,將無法使用)
db2 rollforward db portaldb to end of logs and complete
當然如果你認為不需要前滾(這樣將丟失最後一次備份之後的更改),也可以
db2 rollforward db portaldb stop
當你瞭解了這些知識,就能夠正確有序的執行備份恢複,快速高效的解決問題。
本文出自 “滴水穿石” 部落格,請務必保留此出處http://xjsunjie.blog.51cto.com/999372/1343148