2012-09-17 1229 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使用索引来访问表而不是表扫描。

相关问题