在 DB2 資料庫管理中,表空間靜默(QUIESCE)是常見的維護操作,用於鎖定表空間以便進行備份或維護。然而,有時重置靜默狀態會失敗,導致表空間持續處於鎖定狀態,無法正常存取資料。本文透過一個具體案例,說明此問題的成因與現象。
以 DB2INST1.USERSPAC1 表空間中的 DB2INST1.STAFF 表為例,執行以下命令將表空間置於「意向更新」靜默狀態:
db2 quiesce tablespaces for table db2inst1.staff intent to update
此時嘗試對表執行 DELETE 操作,會遇到 SQL0290N 錯誤:
db2 delete from db2inst1.staff
DB21034E The command was processed as an SQL statement...
SQL0290N Table space access is not allowed. SQLSTATE=55039
使用 db2 list tablespaces 查看,發現 USERSPACE1 確實處於 Quiesced: UPDATE 狀態(State = 0x0002)。
嘗試使用任意 DB2 用戶執行重置命令:
db2 quiesce tablespaces for table db2inst1.staff reset
DB20000I The QUIESCE TABLESPACES command completed successfully.
雖然命令顯示成功完成,但再次執行 DELETE 仍報 SQL0290N 錯誤,且表空間狀態仍為 INTENT TO UPDATE。
重置命令雖回傳成功,實際上並未解除靜默狀態。 這是因為 RESET 選項必須由原本發出 QUIESCE 命令的同一用戶執行才能真正生效。其他用戶執行雖不報錯,但無法移除原用戶施加的鎖定。
下一篇文章將詳細說明如何找出原始靜默用戶,並以正確身分完成重置操作。