當資料庫規模達 TB/PB 級,完整備份耗時過長。若僅部分表空間更新頻繁,可對熱點表空間高頻備份,冷資料降低完整備份頻率。DB2 獨特支援僅憑表空間備份 + 日誌即可重建資料庫,無需完整資料庫備份檔案。
su - db2inst1
mkdir -p /home/db2inst1/xcldb_tb/tbs{1,2,3}
db2 "connect to xcldb"
db2 "create tablespace tbs1"
db2 "create tablespace tbs2"
db2 "create tablespace tbs3"
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 into t1 values(1)"
db2 "insert into t2 values(2)"
db2 "insert into t3 values(3)"
db2 connect to xcldb db2 list tablespaces show detail db2 list tablespace containers for 0 # 必須包含 SYSCATSPACE、USERSPACE1、SYSTOOLSPACE 及使用者表空間 db2 "backup db xcldb tablespace(SYSCATSPACE,USERSPACE1,SYSTOOLSPACE,TBS1,TBS2,TBS3) to /home/db2inst1/xcldb_tb"
# 刪除資料庫目錄下所有檔案 (勿用 drop database) cd /home/db2inst1/db2inst1/NODE0000/XCLDB rm -rf * db2 force application all db2stop db2start # 此時連線將報錯:SQL0293N Error accessing a table space container
cd /home/db2inst1/xcldb_tb db2 "restore db xcldb rebuild with all tablespaces in database taken at 20131217232023" # 提示確認輸入 y,重建成功
# 查詢備份歷史確認重建成功 db2 list history all for xcldb # 前滾至日誌末尾 db2 "rollforward db xcldb to end of logs" # 若報錯缺少日誌檔 (S0000001.LOG): db2 "rollforward db xcldb stop" # 狀態顯示 not pending,資料庫已可用
db2 connect to xcldb db2 "select * from t1" # 正確回傳 1 筆資料,重建完成
REBUILD WITH ALL TABLESPACES IN DATABASE 是核心語法,告訴 DB2 從表空間備份組裝完整資料庫rollforward ... stop 以一致性點開啟資料庫