我跑步时收到此错误:
alter table tablename add column columnname varchar(1) default 'N';
DB2 SQL错误:SQLCODE = -911,SQLSTATE = 40001,SQLERRMC = 68
如何解决?
答案 0 :(得分:1)
alter语句希望在SYSIBM.SYSTABLES中的此行上获得X锁定。有一个打开的事务,该行/索引值处于不兼容的锁定状态。导致超时的此锁甚至可以来自以RS或RR隔离级别读取此行的打开游标。 终止当前尝试查询SYSTABLES的任何其他SQL以及可能尝试更新SYSTABLES的任何实用程序,如reorg和runstats,然后再次尝试更改。
答案 1 :(得分:0)
请参阅DB2 Info center(我为DB2 10选择了一个,很可能这个错误代码在其他版本中是相同的,但是双重检查!)。
似乎您的表上打开了一个事务,这会阻止您执行alter
命令。
答案 2 :(得分:0)
在你改变一张桌子后,你需要重建:在这里重新开始:
答案 3 :(得分:0)
定期运行runstats脚本(这是一个DB2脚本),并将脚本设置为收集RUNSTATS WITH DISTRIBUTION AND DETAILED INDEXES ALL。
除了定期运行runstats脚本外,您还可以执行以下任务来避免此问题: 使用REOPT ONCE或REOPT ALTERS与命令行界面(CLI)包一起更改查询优化行为。 在DB2数据库中,更改表以使其易变。易失性表向DB2优化器指示表基数在运行时可以显着改变(从空到大,反之亦然)。因此,DB2使用索引来访问表而不是表扫描。