【问题标题】:DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=68DB2 SQL 错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=68
【发布时间】:2012-09-17 16:31:13
【问题描述】:

我在运行时收到此错误:

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

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

如何解决?

【问题讨论】:

    标签: db2


    【解决方案1】:

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

    【讨论】:

    • 运行“db2 get snapshot for locks on ”并在 SYSTABLES 表上查找锁。输出中的锁由应用程序组织,因此应该很容易发现需要中断或终止哪个应用程序,以便您的 alter 语句运行。
    【解决方案2】:

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

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

    【讨论】:

    • 如何检查 DB2 中打开了哪个事务?我对任何数据库类型的工作都很陌生。请指教
    • 环顾 Stackoverflow,在我看来这个答案是:stackoverflow.com/questions/7957887/… 可能会对您有所帮助(反正我自己也无法组合更多)。
    【解决方案3】:

    更改表格后,您需要重新组织:请在此处阅读:

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        相关资源
        最近更新 更多