2012-09-17 1228 views

回答

0

請參閱DB2 Info center(我選擇了DB2 10的一個,很可能這個錯誤代碼在其他版本中是相同的,但是雙重檢查!)。

似乎在您的表上有一個事務處於打開狀態,這會阻止您的alter命令執行。

+0

如何檢查在DB2中打開哪個事務?我對任何數據庫工作都很陌生。請諮詢 – Naga

+0

環顧Stackoverflow,在我看來這個答案︰http://stackoverflow.com/questions/7957887/db2-deadlock-timeout-sqlstate-40001-reason-code-68-due-to-update-statements- ca?rq = 1可能會幫助你(無論如何,我沒有把更多的自己放在一起)。 –

0

你已經改變了你需要REORG的表後:裏德起來就可以了這裏:

1

ALTER語句希望得到有關此行中SYSIBM.SYSTABLES的X鎖。有一個打開的事務,其行/索引值處於不兼容的鎖定狀態。導致超時的這個鎖甚至可以來自一個打開的遊標,該遊標讀取具有RS或RR隔離級別的該行。 終止當前試圖查詢SYSTABLES的任何其他SQL以及可能試圖更新SYSTABLES(如reorg和runstats)的任何實用程序,然後再次嘗試更改。

+0

對「」的鎖運行「db2獲取快照」,並在SYSTABLES表上查找鎖。輸出中的鎖由應用程序組織,所以應該很容易找出哪些應用程序需要中斷或終止,以便您的alter語句將運行。 –

0

定期運行runstats腳本(它是一個DB2腳本),並將腳本設置爲收集RUNSTATS WITH DISTRIBUTION和DETAILED INDEXES ALL。

除了定期運行RUNSTATS腳本,可以執行以下任務,以避免此問題: 使用REOPT ONCE或REOPT ALWAYS使用命令行界面(CLI)套餐更改查詢優化行爲。 在DB2數據庫中,更改表使其不穩定。易變表向DB2優化器指出,表的基數在運行時可能會發生顯着變化(從空到大,反之亦然)。因此,DB2使用索引來訪問表而不是表掃描。

相關問題