天天看點

DB2備份

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,應該可以成功了。。。