| 模式 | 關鍵字 | 允許操作 | 封鎖操作 | 典型用途 |
| 共享模式 | SHARE | SELECT (唯讀) | INSERT/UPDATE/DELETE/DDL | 線上備份、唯讀報表 |
| 意向更新 | INTENT TO UPDATE | SELECT | INSERT/UPDATE/DELETE/DDL | 準備獨佔維護 |
| 獨佔模式 | EXCLUSIVE | 無 (僅持有者) | 所有其他連線 | 表空間重組、Load replace |
| 重置 | RESET | 恢復正常存取 | 無 | 解除靜默 |
實戰示範:意向更新模式導致存取失敗
1. 靜默表空間
db2 quiesce tablespaces for table db2inst1.staff intent to update
2. 嘗試刪除資料 → 失敗
db2 "delete from db2inst1.staff"
# SQL0290N Table space access is not allowed. SQLSTATE=55039
3. 檢視表空間狀態
db2 list tablespaces
# 輸出片段:
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0002
Detailed explanation:
Quiesced: UPDATE
State = 0x0002 表示 QUIESCED: UPDATE (意向更新)。
關鍵陷阱:RESET 必須由原發起者執行
嘗試用其他用戶重置:
db2 quiesce tablespaces for table db2inst1.staff reset
# DB20000I The QUIESCE TABLESPACES command completed successfully.
看似成功,但實際未解除靜默!再次查詢狀態仍為 0x0002,DELETE 仍失敗。
原因
- QUIESCE 狀態綁定發起連線的授權 ID
- 只有原發起者 (或同授權 ID 的連線) 執行 RESET 才能真正解除
- 其他用戶執行 RESET 雖回傳成功訊息,但不生效
正確檢視靜默持有者
db2pd -tablespaces -db mydb
# 或
db2 "SELECT TBSP_ID, TBSP_NAME, TBSP_STATE, QUIESCER_AUTHID, QUIESCE_STATE
FROM SYSIBMADM.TBSP_UTILIZATION"
輸出中 QUIESCER_AUTHID 即為發起靜默的授權 ID。
靜默狀態十六進制代碼對照
| State (Hex) | 狀態名稱 | 說明 |
| 0x0000 | NORMAL | 正常存取 |
| 0x0001 | QUIESCED: SHARE | 共享模式 |
| 0x0002 | QUIESCED: UPDATE | 意向更新 |
| 0x0004 | QUIESCED: EXCLUSIVE | 獨佔模式 |
| 0x0008 | LOAD PENDING | Load 掛起 |
| 0x0010 | DELETE PENDING | 刪除掛起 |
| 0x0020 | BACKUP PENDING | 備份掛起 |
| 0x0040 | ROLLFORWARD PENDING | 前滾掛起 |
| 0x0080 | RESTORE PENDING | 還原掛起 |
多重狀態以位元 OR 組合 (如 0x000A = LOAD PENDING + QUIESCED: SHARE)。
最佳實踐建議
- 記錄發起者:執行 QUIESCE 時記錄授權 ID、時間、目的
- 設定超時提醒:避免忘記 RESET 導致長時間封鎖
- 使用 DB2 任務中心/排程器:自動化備份流程包含 QUIESCE/RESET 成對執行
- 監控告警:監控
TBSP_STATE != 0x0000 超過閾值發送告警
- 緊急處理:若發起者連線已斷開無法 RESET,需重啟資料庫 (會中斷所有連線) 或聯繫 IBM 支援
- 上一篇文章: AIX 環境下創建 DB2 表空間完整實操步驟指南
- 下一篇文章: 重置 DB2 表空間靜默狀態正確姿勢:db2dart 定位發起者與授權 ID 綁定機制
Copyright ©
程式碼之家 All Rights Reserved