Db2

Db2 REORGCHK 返回 SQL2310N(錯誤“-668”)消息

  • July 24, 2019

我的 Linux 筆記型電腦上有一個 Db2 數據庫。數據庫負載不重。我出於開發目的不時訪問它。

我刪除了一個列:

db2 "alter table SCHEMA.TABLE drop column COLUMN"

然後,我執行REORGCHK

db2 "reorgchk update statistics on table all"

並收到以下消息:

Doing RUNSTATS ....

SQL2310N  The utility could not generate statistics.  Error "-668" was 
returned.

但是,如果我不要求REORGCHK更新統計資訊,則命令成功:

db2 "reorgchk current statistics on table all"

進一步調查表明,RUNSTATS在更改後的桌子上:

db2 "runstats on table SCHEMA.TABLE for indexes all"

失敗並出現與上述相同的錯誤(即 SQL2310N,-668)。

我試圖增加相同參數(、、、和)的值LOGFILSIZ,但這LOGPRIMARY沒有幫助。LOGSECOND``STAT_HEAP_SZ

錯誤的原因可能是什麼?如何調試它?我該如何解決?

我不確定 REORGCHK UPDATE STATISTICS 是否是對錶進行破壞性操作(刪除列)的方法。我懷疑 drop 語句在某些目錄表上設置了 Z 鎖,這會阻止更新 STATISTICS。如果您只對是否需要因刪除而重新組織表感興趣,您可以:

SELECT NUM_REORG_REC_ALTERS, REORG_PENDING 
FROM SYSIBMADM.ADMINTABINFO
WHERE (TABSCHEMA, TABNAME) = (..., ...)

由於某種原因,它確實很慢(不要要求不存在的表),但它比 reorgchk 快。

除非表真的很大,否則我通常會在遷移腳本中添加一個 REORG 命令以防萬一:

REORG TABLE ...;

請注意,REORG 將送出任何正在進行的事務,因此您應該在 REORG 之前結束目前的 uow,並將它們放在單獨的事務中。

引用自:https://dba.stackexchange.com/questions/243619