首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 利用表空間備份重建資料庫:無完整備份也能復原

     編輯:DB2 教學

表空間備份重建資料庫的優勢

當資料庫規模達 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

重建資料庫 (REBUILD 語法)

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 從表空間備份組裝完整資料庫
  • 系統表空間 (SYSCATSPACE 等) 必須包含 在備份中
  • 重建後資料庫處於 Rollforward Pending 狀態,必須執行前滾
  • 若缺少線上備份期間產生的日誌,可用 rollforward ... stop 以一致性點開啟資料庫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved