在重置DB2表空間靜默狀態時,有時會出現錯誤信息,下文就為您列舉了一個重置DB2表空間靜默狀態失敗的例子,供您參考研究。
一種經常遇到的失敗的重置操作:
由於靜默操作導致的鎖定的存在,對這樣的DB2表空間進行某些操作時,可能會遇到 SQL3805N 或 SQL0290N 等報錯信息,提示表空間不可訪問。例如以位於 DB2INST1.USERSPAC1 表空間的 DB2INST1.STAFF 表為例:
a) 靜默表空間為意向更新狀態:
db2 quIEsce tablespaces for table db2inst1.staff intent to update
b) 嘗試刪除表的操作將失敗:
db2 delete from db2inst1.staff
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0290N Table space Access is not allowed. SQLSTATE=55039
此時若使用:
db2 list tablespaces
命令檢查DB2表空間狀態,可以發現表空間 USERSPACE1 處於 INTENT TO UPDATE 的靜默狀態:
......
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0002
Detailed explanation:
QuIEsced: UPDATE
......
如果要除去這一靜默狀態,可使用靜默命令中的“RESET”選項,使DB2表空間恢復到正常狀態(0x0000),從而實現對表空間中表的正常訪問。
此時,若嘗試使用任何一個 DB2 用戶,執行如下命令,進行除去該多DB2表空間的靜默狀態的嘗試:
db2 quIEsce tablespaces for table db2inst1.staff reset
DB20000I The QUIESCE TABLESPACES command completed successfully.
可以看到命令已成功完成,但當再次嘗試上述的 DELETE 操作時,卻仍然遇到同樣的 SQL0290N 的報錯,即不允許存取表空間。查詢表空間狀態表明它仍處於原來的意向更新的靜默狀態。為什麼上述重置靜默狀態的命令已成功完成,卻沒有真正除去表空間的靜默狀態呢?