DB2備份
1、 離線全備份
1) 首先確定沒有使用者使用DB2:
db2 list applications for db sample
2) 停掉資料庫并重新啟動,以便斷掉所有連接配接:
db2stop force
db2start
3) 執行備份指令:(使用TSM作為備份的媒體)
db2 backup db sample use tsm
備份成功,将會傳回一個時間戳。
4) 檢查備份成功:
db2 list history backup all for sample ,可以看到多了這個備份的紀錄。
db2adutl query指令也可以看到傳回值。
5) 備注:
首先對主節點(catalog表空間在的節點)執行備份指令,再對另外的節點也做這個操作。
2、 線上備份:
1) 首先打開一下支援線上備份的資料庫配置參數:
db2 update db cfg for sample using userexit on -- 啟用使用者出口
db2 update db cfg for sample using logretain on -- 啟用歸檔日志
db2 update db cfg for sample using trackmod on -- 啟用增量備份功能
(需要各個年node都分别做設定)
開啟這些參數後,資料庫處于backup pending狀态,要求做資料庫的離線全備份
做一次離線全備份,也隻有做了離線全備份,離線備份的指令參考第一步的内容,資料庫才能繼續使用。參考上面的指令。
2) 線上備份指令如下
db2 backup db sample to /home/db2inst1/db2backup online use tsm
備份成功,傳回一個時間戳。
3) 同樣可以用db2adutl 和db2 list history察看備份紀錄。
4) 備注:同樣,對每個節點都做這個操作。
3、 線增量備份
1) 在開啟了必須的三個參數的情況下,做增量備份:
db2 backup db sample online incremental use tsm
備份成功,傳回一個時間戳
2) 同樣可以用db2adutl 和db2 list history察看備份紀錄。
3) 還有一種delta的備份:
db2 backup db sample online
incremental delta use tsm
4) 這兩種備份的差別,類似Oracle Exports的Incremental和Cumulative方式,db2的incremental對應oracle的cumulative方式,而db2的delta方式則對應oracle的incremental方式。
5) 備注:同樣,對每個節點都做這個操作。
4、 還原資料庫
1) 開始還原,先斷開現有資料庫連接配接
db2 "disconnect all"
2) 先建立一個資料庫作為覆寫還原的目标資料庫
db2 "create db sample on d: using codeset gbk territory cn"
3) 将源資料庫aic_jx_3在20070726131128做的備份覆寫還原到aic_jx_4,并且使用重定向(注意:20070726131128需要根據實際備份日期進行修改)
db2 "restore db sample_1 from D:/DB2DBBACKUP taken at 20070726131128 to d:into aic_jx_4 replace existing redirect"
4) 針對源資料庫的表空間存儲進行重定向設定,可以調整使用FILE的DMS類型表空間的大小
db2 "set tablespace containers for 2 using (file 'userspace1.dat' 128000 )"
db2 "set tablespace containers for 3 USING (FILE 'indexspace1.dat'128000)"
db2 "set tablespace containers for 4 USING (FILE 'userspace2.dat'64000)"
db2 "set tablespace containers for 5 USING (FILE 'cdspace2.dat'16384)"
db2 "set tablespace containers for 6 USING (path 'SQLT0002.0')"
db2 "set tablespace containers for 7 USING (path 'SYSTOOLSPACE')"
db2 "set tablespace containers for 8 USING (path 'TEMPUSESPACE1')"
db2 "set tablespace containers for 9 USING (path 'USERSPACE3')"
db2 "set tablespace containers for 10 USING (path 'aic_jx_user_tmp')"
db2 "set tablespace containers for 11 USING (path 'aic_jx_large_T')"
db2 "set tablespace containers for 12 USING (path 'aic_jx_large_U')"
(具體表空間的多少,應該和源資料庫一緻)
5) 開始還原過程
db2 "restore db aic_jx_3 continue"
6) 還原結束激活資料庫
db2 "activate db aic_jx_4"
一些輔助的指令
db2 "get db cfg for aic_jx_4"
db2 "update db cfg for aic_jx_4 using locklist 50"
db2 "list utilities show detail"
5、 恢複資料庫
1) 手工drop資料庫,模拟災難恢複的情況,執行如下操作:
db2 drop db sample
2) 恢複備份曆史紀錄(每次backup,不論類型,都會備份曆史紀錄檔案)。這裡的時間戳應該是最新的:
db2 restore db sample history file use tsm
taken at 20030102223107 buffer 100
3) 使用db2的恢複幫助工具:
db2ckrst -d sample -t 20030101224424 -r database
指令傳回建議的必需的恢複操作指令。
4) 按照幫助工具的提示,先做版本恢複,恢複指令如下:
db2 restore db sample incremental use tsm taken at 20030101224424 buffer 100
同樣先做主節點的恢複,再做其他節點的恢複操作。
5) 這時資料庫處于rollforward-pending state的狀态,需要做roll forward 操作:
db2 rollforward db sample to 2003-01-12 - 13.27.25 .000000 on all nodes and stop
前滾到同一個時間點。這個操作要在主節點來做。
6、 關于資料庫備份選擇的時間等:
1) 在資料庫維護的過程中,資料庫的備份對于在災難面前對資料的恢複是至關重要的,可以說,沒有備份,就沒有恢複的可能。
2) 但備份,我們要考慮幾個事情:
a) 資料庫本身的大小,
b) 備份的周期。
c) 資料庫越大,需要的備份裝置越大,備份的時間越長。
3) 一般可建議的做法:
a) 每周做一次完全備份
b) 沒天做一次增量備份
c) 做這些備份的動作用Linux本身的服務來完成
7、 關于DB2的歸檔日志問題:
1) 第一活動日志檔案(First active log file)=S0000091.LOG
2) 每個日志檔案的大小和日志檔案的多少的設定原則:
a) 日志檔案能夠儲存每兩次資料庫完全備份間的修改
b) 維護日志的時候,把那些無用的日志給删除掉。
c) 進行了日志相關的參數修改後,需要進行資料庫的重新開機,資料庫重新開機,如果設定的日志比較大的話,重新開機的時間可能比較長,也許會操作4個小時。
8、 說明:
1) 恢複操作也有online和offline的,差別等同backup的操作。
2) 按照表空間的備份和恢複類似,加子句TABLESPACE ( tablespace-name 即可。表空間級别的備份/恢複操作要求資料庫處于歸檔日志和啟用增量備份模式下。
3) 恢複的例子中隻做了版本恢複。若還有更新的全備份和增量備份的image,可以依次做恢複(請注意使用db2ckrst的建議恢複次序和次數)之後,最後做roll forward.
db2 rollforward db sample to end of logs
ROLLFORWARD DATABASE sample COMPLETE
or
db2 rollforward db sample to end of logs and complete
把原資料庫中的日志複制過來,拷貝到伺服器的一個目錄下,執行下面的指令:
db2 rollforward database TFD to end of logs and complete OVERFLOW LOG PATH (log-directory)
在還原完成之後,在
Connect to TFD 時候顯示說緩沖池有錯誤,這個應該是還原上去的的庫和原來存在的庫不一樣的情況,這個時候,可通過下面的方式來解決
force application all
db2set DB2_OVERRIDE_BPF=10000
db2stop
db2start
再連接配接
Connect to TFD,應該可以成功了。。。