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 數據庫創建成功,請重啟實例生效。
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
schema.ddl(表/索引/約束)、triggers.ddl、app_objects.ddl(存儲過程/UDF),分別用合適的終止符執行。-z 便於事後審計與故障排查。db2set DB2_AUTOCONFIG_DEFAULT=ON 讓實例級自動配置生效,再執行腳本。一條成熟的批處理腳本能將數據庫從「空機器」推進到「業務就緒」狀態,配合自動配置與模塊化 DDL,實現可重複、可審計、可版本化的環境交付。