DB2 提供 db2 命令列處理器 (CLP) 支援互動、腳本、批處理三種模式。本文系統梳理 Windows 環境下從準備工作、單條/腳本/存儲過程執行、CLP 選項詳解到生產級 .bat 封裝的完整鏈路。
db2cmd (新視窗) 或 db2cw (當前視窗)。db2 connect to <dbname> user <user> using <pwd>db2 set current schema <schema_name> (若 Schema 不存在將自動創建)。| 模式 | 命令範例 | 適用場景 | 關鍵參數 |
|---|---|---|---|
| 單條 SQL | db2 "SELECT * FROM T1" | 臨時查詢、DDL 執行 | 無 |
| SQL 腳本檔 | db2 -td; -f script.sql -l script.log | DDL/DML 批量部署、結構變更 | -td; 指定分號終結符、-l 日誌 |
| 存儲過程腳本 | db2 -td@ -f proc.sql -l proc.log | 含 CREATE PROCEDURE、複合 SQL (BEGIN ATOMIC...) | -td@ 指定 @ 終結符、-l 日誌 |
; 結尾;存儲過程體內部含分號,須改用 @ (或其他不衝突字符) 作為外層終結符。-f vs -c:-f 讀取檔案;-c 直接執行字串 (單條)。-l 日誌檔強烈建議始終啟用,便於事後審計與失敗分析。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
deploy_db2.bat MYDB app_user pwd MYSCHEMA D:\deploy\scriptslogs\ 下 *.log (CLP 歷史) 與 *.out (完整輸出) 確認無 SQLCODE < 0。CREATE OR REPLACE、DROP IF EXISTS、ALTER ... ADD IF NOT EXISTS。COMMIT/ROLLBACK,避免自動提交導致部分提交。db2look -e -o pre_deploy_ddl.sql 導出現狀,失敗即刻還原。QUIESCE 表空間。DB2 批處理核心在於 **「正確終結符 (-td) + 完整日誌 (-l/-z) + 錯誤即停 (-s) + 回顯驗證 (-v/-e)」**。將上述範本納入 CI/CD 流水線 (Jenkins/GitLab CI/Azure DevOps),即可實現 DB2 結構變更的標準化、可追溯、可回滾自動化部署。