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

DB2 全庫表資料備份自動化 Shell 腳本:逐表 EXPORT 至 DEL 格式

     編輯:DB2 教學

腳本功能與適用場景

  • 自動連線指定資料庫,列出所有用戶表。
  • 逐表執行 EXPORT TO table.del OF DEL SELECT * FROM table。
  • 備份檔按日期目錄歸檔(~/backup/YYYYMMDD/)。
  • 互動式確認,防止誤覆蓋當日備份。
  • 輸出備份統計(表數量、耗時)。
適用平台:Linux/UNIX/AIX(Windows 需改用 PowerShell/批次檔)。
備份格式:DEL(分隔符文本),適合跨平台遷移、外部工具導入。

完整腳本 backup_all_tables.sh

#!/bin/ksh
# ==========================================
# DB2 全庫表資料備份腳本
# 作者: fubs | 日期: $(date +%Y-%m-%d)
# ==========================================

# --- 設定區 ---
DB_NAME="abbs"                    # 目標資料庫
BK_ROOT="$HOME/personal/fubs/bak" # 備份根目錄
# ----------------

clear

# 1. 連線資料庫(靜默模式)
db2 connect to "$DB_NAME" >/dev/null
if [ $? -ne 0 ]; then
    echo "ERROR: 無法連線資料庫 $DB_NAME"
    exit 1
fi

# 2. 獲取用戶表清單(排除系統表、標題行)
TB_LIST=$(db2 "list tables" | grep -v "Record" | awk 'NR>3 && length($1)>0 {print $1}')

# 3. 日期變數
S_DATE=$(date '+%Y-%m-%d,%H:%M:%S')
V_DATE=$(date '+%Y%m%d')
BK_PATH="$BK_ROOT/$V_DATE"

# 4. 目錄存在性檢查與互動確認
if [ ! -d "$BK_PATH" ]; then
    mkdir -p "$BK_PATH"
    echo "備份所有資料,確認嗎?(y/n)\c"
else
    echo "當天已備份,是否覆蓋?(y/n)\c"
fi

read YN
if [ -z "$YN" -o "$YN" != "y" ]; then
    echo "放棄操作!"
    db2 connect reset >/dev/null
    db2 terminate >/dev/null
    exit 0
fi

# 5. 進入備份目錄執行逐表 EXPORT
cd "$BK_PATH"
NUM=0

for TAB in $TB_LIST; do
    echo "正在備份 $TAB ..."
    db2 "EXPORT TO ${TAB}.del OF DEL SELECT * FROM $TAB"
    if [ $? -eq 0 ]; then
        NUM=$((NUM + 1))
    else
        echo "WARN: $TAB 備份失敗,跳過"
    fi
done

# 6. 清理連線並輸出結果
db2 connect reset >/dev/null
db2 terminate >/dev/null

echo "備份資料成功,共備份[$NUM]個庫表!"
echo "備份目錄: $BK_PATH"
echo "開始時間: $S_DATE"
echo "結束時間: $(date '+%Y-%m-%d,%H:%M:%S')"

關鍵技術點解析

環節說明
列表獲取db2 "list tables" 輸出含標題/分隔行,用 awk 'NR>3' 跳過前 3 行,grep -v Record 過濾統計行。
EXPORT 語法OF DEL 產生 CSV 風格分隔檔(預設逗號),LOB 欄位會另存檔(需 LOBSINFILE 修飾符)。
錯誤容忍單表失敗不中斷整體流程,記錄 WARN 繼續下一張表。
權限需求執行腳本的用戶需具備 SELECT 權限及目標目錄寫入權限。

進階增強建議

  • 並行化:使用 xargs -P N 或 GNU Parallel 並發 EXPORT,利用多核心加速。
  • 壓縮:管道接 gzip 即時壓縮 db2 "EXPORT TO ... | gzip > ${TAB}.del.gz"(需 DB2 支援管道導出)。
  • Schema 區分:db2 "list tables for schema PROD" 限定 Schema,避免誤導出 SYS 表。
  • 日誌記錄:重導向標準輸出/錯誤至 backup_${V_DATE}.log 供稽核。
  • 恢復驗證:定期抽樣 IMPORT FROM ... INSERT INTO ... 驗證備份可用性。

對應恢復命令範例

# 單表恢復(清空後導入)
db2 "IMPORT FROM /backup/20240520/EMPLOYEE.del OF DEL REPLACE INTO EMPLOYEE"

# 多表批次恢復腳本同理迴圈處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved