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

DB2 SQL 批處理腳本執行全攻略:從單條命令到生產級 .bat 自動化

     編輯:DB2 教學

前言

DB2 提供 db2 命令列處理器 (CLP) 支援互動、腳本、批處理三種模式。本文系統梳理 Windows 環境下從準備工作、單條/腳本/存儲過程執行、CLP 選項詳解到生產級 .bat 封裝的完整鏈路。

一、準備工作

  1. 啟動 CLP:db2cmd (新視窗) 或 db2cw (當前視窗)。
  2. 切換至 SQL 腳本目錄。
  3. 連接目標庫:db2 connect to <dbname> user <user> using <pwd>
  4. 設置當前 Schema:db2 set current schema <schema_name> (若 Schema 不存在將自動創建)。

二、三種執行模式對比

模式命令範例適用場景關鍵參數
單條 SQLdb2 "SELECT * FROM T1"臨時查詢、DDL 執行無
SQL 腳本檔db2 -td; -f script.sql -l script.logDDL/DML 批量部署、結構變更-td; 指定分號終結符、-l 日誌
存儲過程腳本db2 -td@ -f proc.sql -l proc.log含 CREATE PROCEDURE、複合 SQL (BEGIN ATOMIC...)-td@ 指定 @ 終結符、-l 日誌

關鍵差異點

  • 終結符:標準 SQL 以 ; 結尾;存儲過程體內部含分號,須改用 @ (或其他不衝突字符) 作為外層終結符。
  • -f vs -c:-f 讀取檔案;-c 直接執行字串 (單條)。
  • -l 日誌檔強烈建議始終啟用,便於事後審計與失敗分析。

三、CLP 選項完整速查表

db2 [選項...] [命令 | SQL | ?]
選項	說明	預設
-a	顯示 SQLCA	OFF
-c	自動提交	ON
-d	檢索並顯示 XML 聲明	OFF
-e	顯示 SQLCODE/SQLSTATE	OFF
-f	讀取輸入檔案	OFF
-i	顯示 XML 數據帶縮進	OFF
-l	記錄命令到歷史檔	OFF
-m	顯示受影響行數	OFF
-n	移除換行符	OFF
-o	顯示輸出	ON
-p	顯示互動提示符	ON
-q	保留空格換行	OFF
-r	保存輸出報告到檔	OFF
-s	出錯停止執行	OFF
-t	設置語句終結符	OFF (預設 ;)
-v	回顯當前命令	OFF
-w	顯示 FETCH/SELECT 警告	ON
-x	不列印列標題	OFF
-z	保存所有輸出到檔	OFF

生產常用組合:db2 -v -e -l history.log -z output.log -td; -f deploy.sql (回顯+錯誤碼+歷史+完整輸出)。

四、生產級批處理腳本範本

@echo off
REM ========== deploy_db2.bat ==========
REM 參數: %1=DB名 %2=User %3=Pwd %4=Schema %5=SQL腳本目錄
set DBNAME=%1
set USER=%2
set PWD=%3
set SCHEMA=%4
set SCRIPT_DIR=%5
set LOG_DIR=%SCRIPT_DIR%\logs
set DATE_STR=%DATE:~,4%%DATE:~5,2%%DATE:~8,2%

if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"

echo [INFO] 連接資料庫 %DBNAME% ...
db2 connect to %DBNAME% user %USER% using %PWD% >nul
if errorlevel 1 (
    echo [ERROR] 連接失敗
    exit /b 1
)

echo [INFO] 設置 Schema %SCHEMA% ...
db2 set current schema %SCHEMA% >nul

echo [INFO] 執行 DDL/DML 腳本 ...
for %%f in ("%SCRIPT_DIR%\*.sql") do (
    echo [RUN] %%f
    db2 -v -e -td; -f "%%f" -l "%LOG_DIR%\%%~nf_%DATE_STR%.log" -z "%LOG_DIR%\%%~nf_%DATE_STR%.out"
    if errorlevel 1 (
        echo [FAIL] %%f 執行失敗,請檢查日誌
        db2 connect reset
        exit /b 1
    )
)

echo [INFO] 執行存儲過程腳本 ...
for %%f in ("%SCRIPT_DIR%\procs\*.sql") do (
    echo [RUN] %%f
    db2 -v -e -td@ -f "%%f" -l "%LOG_DIR%\%%~nf_%DATE_STR%.log" -z "%LOG_DIR%\%%~nf_%DATE_STR%.out"
    if errorlevel 1 (
        echo [FAIL] %%f 執行失敗
        db2 connect reset
        exit /b 1
    )
)

db2 connect reset
echo [SUCCESS] 所有腳本執行完成,日誌目錄: %LOG_DIR%
exit /b 0

五、執行與驗證

  1. 雙擊或命令列運行:deploy_db2.bat MYDB app_user pwd MYSCHEMA D:\deploy\scripts
  2. 檢查 logs\ 下 *.log (CLP 歷史) 與 *.out (完整輸出) 確認無 SQLCODE < 0。
  3. 關鍵表行數對比、約束啟用狀態、存儲過程編譯有效性驗證。

六、最佳實踐清單

  • 冪等性:DDL 使用 CREATE OR REPLACE、DROP IF EXISTS、ALTER ... ADD IF NOT EXISTS。
  • 事務邊界:腳本內顯式 COMMIT/ROLLBACK,避免自動提交導致部分提交。
  • 權限最小化:部署帳號僅擁有目標 Schema 的 DBADM 或 CREATEIN/DROPIN/ALTERIN。
  • 回滾預案:每次部署前 db2look -e -o pre_deploy_ddl.sql 導出現狀,失敗即刻還原。
  • 並發控制:部署期間設置應用連接限制或啟用 QUIESCE 表空間。

總結

DB2 批處理核心在於 **「正確終結符 (-td) + 完整日誌 (-l/-z) + 錯誤即停 (-s) + 回顯驗證 (-v/-e)」**。將上述範本納入 CI/CD 流水線 (Jenkins/GitLab CI/Azure DevOps),即可實現 DB2 結構變更的標準化、可追溯、可回滾自動化部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved