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

DB2 常見問題彙總 (FAQ):命令選項、備份歷史損壞、存儲過程發布、表限制、SQL0101N、已刪表恢復、系統名稱、表空間靜止、線上備份、裸裝置表空間、Unix 控制中心、FETCH FIRST、配置參數、腳本執行、別名衝突、磁帶備份、代碼頁、SPB 配置、臨時表、IMPORT 避免日誌滿

     編輯:DB2 教學

1. 命令行處理器選項 (db2 list command options)

選項功能預設
-a顯示 SQLCAOFF
-c自動提交ON
-e顯示 SQLCODE/SQLSTATEOFF
-f讀取輸入檔OFF
-l記錄歷史檔OFF
-n移除換行符OFF
-o顯示輸出ON
-p互動提示ON
-r輸出存報告檔OFF
-s出錯停止OFF
-t設定終止字元OFF
-v回顯指令OFF
-w顯示 FETCH/SELECT 警告ON
-x不印欄標題OFF
-z所有輸出存檔OFF

修改:db2 update command options using <opt> on/off 或環境變數 DB2OPTIONS。

2. 備份歷史檔損壞 (SQL2048)

  1. 移動 db2rhist.asc、db2rhist.bak 至他處。
  2. 重跑備份指令(仍報錯但會自動重建兩檔)。
  3. 再跑一次備份即正常。

3. 存儲過程發布 (V7.2+)

-- 來源庫
db2updv7 -d <db>          -- 若從 V7.1 升級
db2 "GET ROUTINE INTO <file> FROM PROCEDURE <proc>"

-- 目標庫
db2 "PUT ROUTINE FROM <file>"

4. 表限制 (頁面大小)

頁面列長度上限欄數上限每頁最大列數
4K4005500255
8K81011012255
16K162931012255
32K326771012255

5. 複雜 SQL 編譯 SQL0101N

遞歸觸發器檢查後,增加:STMTHEAP、APPLHEAPSZ、PCKCACHESZ。

6. 已刪除表恢復

  1. 啟用前滾 (LOGRETAIN/USEREXIT)。
  2. ALTER TABLESPACE <ts> DROPPED TABLE RECOVERY ON
  3. LIST HISTORY DROPPED TABLE ALL FOR <db> 取得 TABLEID 與 DDL。
  4. 還原後前滾加 RECOVER DROPPED TABLE <id> TO <path> 導出資料,再 IMPORT 入重建表。

7. 變更本地系統名稱

db2set DB2SYSTEM=<新名稱>
db2 terminate
db2 uncatalog node <舊節點名>
db2 terminate

8. 解除表空間 QUIESCE 狀態

db2 connect to <db>
db2 list tablespaces show detail  -- 找 OBJECT_ID
db2 "select tabname from syscat.tables where tableid=<OBJECT_ID>"
db2 quiesce tablespaces for table <tabname> reset

9. 實施線上備份

  1. UPDATE DB CFG FOR <db> USING LOGRETAIN RECOVERY (或 USEREXIT ON)
  2. 執行一次離線全庫備份解除 BACKUP PENDING。
  3. 之後可 BACKUP DB <db> ONLINE。

10. AIX 建立裸裝置 DMS 表空間

mklv -t jfs -y <裝置名> -U <用戶> -G <群組> <VG> <大小> <磁碟>
db2 "CREATE TABLESPACE <ts> MANAGED BY DATABASE USING (DEVICE '<裝置路徑>' <大小>)"

11. Unix 啟動控制中心

xhost +                         # root
su - db2inst1
db2jstrt
db2cc
# 需設定 JAVA_HOME=/usr/jdk118 等

12. 僅顯示前 N 列

SELECT * FROM staff FETCH FIRST 5 ROWS ONLY

13. 命令列查看/修改配置

db2 get dbm cfg
db2 get db cfg for <db>
db2 update dbm cfg using <parm> <val>
db2 update db cfg for <db> using <parm> <val>

14. 執行腳本檔

db2 -svtf <script.sql>   # -s 錯誤停止, -v 回顯, -t ;分隔, -f 檔案

15. 解決資料庫別名已存在

  1. LIST DATABASE DIRECTORY 查系統目錄,有則 DROP DATABASE。
  2. LIST DATABASE DIRECTORY ON <path> 查本地目錄,有則 CATALOG 後再 DROP。

16. 直接備份到磁帶 (Windows)

INITIALIZE TAPE ON \\.\TAPE0
BACKUP DATABASE SAMPLE TO \\.\TAPE0
REWIND TAPE ON \\.\TAPE0
RESTORE DATABASE SAMPLE FROM \\.\TAPE0 INTO NEWDB

17. 代碼頁不相容 (SQL0332N)

db2set DB2CODEPAGE=1386
db2 terminate

18. AIX/Solaris 配置 SPB (Stored Procedure Builder)

  1. 安裝 JDK (非 JRE)。
  2. db2 update dbm cfg using JDK11_PATH /usr/jdk_base
  3. db2stop; db2start

19. 使用者定義暫存表 (DGTT)

DECLARE GLOBAL TEMPORARY TABLE gbl_temp
LIKE empltabl
ON COMMIT DELETE ROWS
NOT LOGGED
IN usr_tbsp

連線斷開自動刪除,不進系統目錄,不可跨應用共享。

20. IMPORT 避免日誌滿

IMPORT FROM /dev/null OF DEL REPLACE INTO <table>

僅記錄一條指令日誌,立即釋放空間,類似 TRUNCATE。大表刪除資料首選。

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