全新安裝 DB2 後,嘗試連線 `SAMPLE` 與 `TOOLSDB` 卻雙雙報錯 `SQL1031N: The database directory cannot be found`。原因在於:DB2 安裝程式不再預設建立這兩個範例庫(自 9.7 起改為可選),需 DBA 手動觸發建立。本文記錄從現象排查到手動建庫、目錄驗證、連線測試的標準化操作手冊。
實例擁有者家目錄(`/home/db2inst1`)下僅見 `sqllib`,缺少同名實例目錄(`db2inst1/`)。對比正常環境,正常應存在:
/home/db2inst1/
├── sqllib/ # 客戶端庫與配置
└── db2inst1/ # 實例級資料庫目錄(含 NODExxxx/ 下的 SAMPLE、TOOLSDB 等)
缺失 `db2inst1/` 目錄,證明範例庫從未建立。
[db2inst1@localhost ~]$ db2sampl
Creating database "SAMPLE"...
Connecting to database "SAMPLE"...
Creating tables and data in schema "DB2INST1"...
Creating tables with XML columns and XML data in schema "DB2INST1"...
'db2sampl' processing complete.
`db2sampl` 內部執行:`CREATE DATABASE SAMPLE` → 連線 → 執行 `sqllib/misc/db2sampl.ddl` 建表載數據。耗時 1~3 分鐘視磁碟速度。
[db2inst1@localhost ~]$ db2 "CREATE TOOLS CATALOG SYSTOOLS CREATE NEW DATABASE TOOLSDB"
DB20000I The CREATE TOOLS CATALOG command completed successfully.
此命令建立 `TOOLSDB` 並初始化 `SYSTOOLS` Schema 下的排程、健康監控、任務中心元表。
[db2inst1@localhost ~]$ cd db2inst1/NODE0000
[db2inst1@localhost NODE0000]$ ls
SAMPLE SQL00001 SQL00002 sqldbdir TOOLSDB
關鍵證據:`SAMPLE/`、`TOOLSDB/` 目錄出現,`sqldbdir` 為系統資料庫目錄檔,`SQL00001/2` 為系統表空間容器。
db2 => CONNECT TO SAMPLE
Database Connection Information
Database server = DB2/Linux 9.7.1
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
db2 => CONNECT RESET
DB20000I The SQL DISCONNECT command completed successfully.
db2 => CONNECT TO TOOLSDB
Database Connection Information
Database server = DB2/Linux 9.7.1
SQL authorization ID = DB2INST1
Local database alias = TOOLSDB
雙庫連線成功,安裝驗證通過。
#!/bin/bash
# install_sample_toolsdb.sh
su - db2inst1 -c "
. ~/sqllib/db2profile
db2sampl
db2 \"CREATE TOOLS CATALOG SYSTOOLS CREATE NEW DATABASE TOOLSDB\"
db2 connect to sample
db2 connect reset
db2 connect to toolsdb
echo 'SAMPLE & TOOLSDB installed and verified.'
"

結語:`SAMPLE` 是學習/測試/示範的標準資料集,`TOOLSDB` 則是排程任務、健康監控、自動維護的元數據中樞。將兩者建立納入「DB2 實例初始化標準作業程序(SOP)」,並以連線測試為驗收門檻,可避免後續開發、運維環境「找不到範例庫」的低級阻塞。