0

运行时出现此错误:

alter table tablename add column columnname varchar(1) default 'N';

DB2 SQL 错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=68

如何解决?

4

4 回答 4

1

alter 语句想要在 SYSIBM.SYSTABLES 中的这一行上获得 X 锁。有一个打开的事务具有此行/索引值处于不兼容的锁定状态。这个导致超时的锁甚至可能来自一个打开的游标,该游标使用 RS 或 RR 隔离级别读取该行。终止当前尝试查询 SYSTABLES 的任何其他 SQL 以及任何可能尝试更新 SYSTABLES 的实用程序,例如 reorg 和 runstats,然后再次尝试更改。

于 2015-04-23T13:55:53.557 回答
0

请参阅DB2 信息中心 (我为 DB2 10 选择了一个,很可能此错误代码在其他版本中是相同的,但请仔细检查!)。

似乎您的表上有一个事务打开,这会阻止您的alter命令执行。

于 2012-09-17T16:42:10.797 回答
0

after you have Altered a table you need to Reorg: reade up on it here:

于 2015-04-23T12:34:45.530 回答
0

定期运行 runstats 脚本,它是一个 DB2 脚本,并将脚本设置为收集 RUNSTATS WITH DISTRIBUTION AND DETAILED INDEXES ALL。

除了定期运行 runstats 脚本之外,您还可以执行以下任务来避免该问题: 将 REOPT ONCE 或 REOPT ALWAYS 与命令行界面 (CLI) 包一起使用以更改查询优化行为。在 DB2 数据库中,更改表以使其易变。易失性表向 DB2 优化器表明,表基数在运行时会发生显着变化(从空到大,反之亦然)。因此,DB2 使用索引而不是表扫描来访问表。

于 2016-04-26T05:09:52.873 回答