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

DB2 批處理腳本實戰:自動化創建數據庫與 Schema 部署

     編輯:DB2 教學

場景與原理

Linux 下每個 DB2 實例對應一個 OS 用戶,切換實例僅需 su - instname。本文提供一個 Windows 批處理腳本 create_database.bat,演示:刪除舊庫 → 創建新庫並自動配置內存 → 連接實例 → 執行 DDL 腳本建表、主鍵、外鍵、觸發器、存儲過程。

腳本全文註釋版

@echo off
rem 1. 刪除舊數據庫(忽略不存在錯誤)
db2 drop db express2

rem 2. 環境變量
set DBPATH=C:
set DBNAME=express2
set MEMORY=20

rem 3. 創建數據庫並啟用自動配置(MEM_PERCENT 20% 實例內存)
db2 CREATE DATABASE %DBNAME% on %DBPATH% AUTOCONFIGURE USING MEM_PERCENT %MEMORY% APPLY DB AND DBM

rem 4. 連接數據庫(參數 %1=%用戶% %2=%密碼%)
db2 CONNECT TO %DBNAME% USER %1 USING %2

rem 5. 清理舊日誌
del schema.log triggers.log app_objects.log

rem 6. 設置當前 Schema
db2 set schema express

rem 7. 執行 DDL 腳本(-t 以分號結束,-td@ 以 @ 結束觸發器/存儲過程)
db2 -t -v -f schema.ddl -z schema.log
db2 -td@ -v -f triggers.ddl -z triggers.log
db2 -td@ -v -f app_objects.ddl -z app_objects.log

rem 8. 斷開連接
db2 CONNECT RESET
db2 TERMINATE

關鍵參數解析

  • AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB AND DBM:依據實例內存 20% 自動調整排序堆、緩衝池、日誌緩衝等 20+ 參數,輸出前後對比值(見下文日誌)。
  • -t:語句以分號結束(標準 SQL)。
  • -td@:語句以 @ 結束,適用於包含分號的觸發器/存儲過程體。
  • -v:回顯執行語句;-z:導出執行日誌。

實際運行日誌節選

自動配置輸出

數據庫管理器配置:
  AGENT_STACK_SZ       16 → 16
  ASLHEAPSZ            15 → 15
  INTRA_PARALLEL       NO → NO
  MAX_QUERYDEGREE      1  → 1
  NUM_POOLAGENTS       AUTOMATIC(100) → AUTOMATIC(100)
  SHEAPTHRES           0  → 0
數據庫配置:
  APPLHEAPSZ           256 → 256
  CATALOGCACHE_SZ      (MAXAPPLS*4) → 60
  CHNGPGS_THRESH       60 → 60
  DBHEAP               600 → 1259
  DFT_EXTENT_SZ        32 → 32
  LOGBUFSZ             8  → 98
  LOGFILSIZ            1000 → 1024
  LOGPRIMARY           3  → 3
  LOGSECOND            2  → 2
  LOCKLIST             50 → AUTOMATIC
  SORTHEAP             256 → AUTOMATIC
  STMTHEAP             2048 → 2048
  UTIL_HEAP_SZ         5000 → 1041
  SELF_TUNING_MEM      OFF → ON
  AUTO_RUNSTATS        ON → ON
緩衝池 IBMDEFAULTBP:250 → 3125 頁
DB210209I 數據庫創建成功,請重啟實例生效。

Schema 部署日誌

CREATE TABLE "CUSTOMERS" ( "CUST_ID" INTEGER NOT NULL, "FIRSTNME" VARCHAR(100) NOT NULL,
  "LASTNAME" VARCHAR(100) NOT NULL, "ADDRESS" VARCHAR(300) WITH DEFAULT '123 ANY STREET',
  "EMAIL" VARCHAR(100) WITH DEFAULT 'sampledata@express.com' ) IN "USERSPACE1"
ALTER TABLE "CUSTOMERS" ADD PRIMARY KEY ("CUST_ID")

CREATE TABLE "BOOKS" ( "BOOK_ID" INTEGER NOT NULL, "TITLE" VARCHAR(300) NOT NULL,
  "COST" DECIMAL(7,2), "IMAGE" BLOB(1048576) LOGGED NOT COMPACT ) IN "USERSPACE1"
ALTER TABLE "BOOKS" ADD PRIMARY KEY ("BOOK_ID")

CREATE TABLE "SALES" ( "SALES_ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
  (START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 NO CYCLE CACHE 20 NO ORDER),
  "BOOK_ID" INTEGER NOT NULL, "CUST_ID" INTEGER NOT NULL, "QTY" INTEGER NOT NULL,
  "PRICE" DECIMAL(7,2) NOT NULL, "PURCH_DATE" TIMESTAMP ) IN "USERSPACE1"
ALTER TABLE "SALES" ADD PRIMARY KEY ("SALES_ID")
ALTER TABLE "SALES" ALTER COLUMN "SALES_ID" RESTART WITH 60
ALTER TABLE "SALES" ADD CONSTRAINT "FK1" FOREIGN KEY ("BOOK_ID") REFERENCES "BOOKS" ("BOOK_ID")
ALTER TABLE "SALES" ADD CONSTRAINT "FK2" FOREIGN KEY ("CUST_ID") REFERENCES "CUSTOMERS" ("CUST_ID")
COMMIT WORK

最佳實踐提示

  1. 將 DDL 拆分為 schema.ddl(表/索引/約束)、triggers.ddl、app_objects.ddl(存儲過程/UDF),分別用合適的終止符執行。
  2. 腳本參數化用戶/密碼,避免硬編碼,便於 CI/CD 流水線注入憑證。
  3. 日誌文件 -z 便於事後審計與故障排查。
  4. 生產環境建議先 db2set DB2_AUTOCONFIG_DEFAULT=ON 讓實例級自動配置生效,再執行腳本。

結語

一條成熟的批處理腳本能將數據庫從「空機器」推進到「業務就緒」狀態,配合自動配置與模塊化 DDL,實現可重複、可審計、可版本化的環境交付。

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