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

DB2SQL错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=68,db2,Db2,我在运行时遇到此错误: alter table tablename add column columnname varchar(1) default 'N'; DB2SQL错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=68 如何解决这个问题?请参见(我为DB210选择了一个错误代码,很可能这个错误代码在其他版本中是相同的,但请仔细检查!) 您的表上似乎有一个打开的事务,它阻止您的alter命令执行。更改表后,您需要重新设置:在此处读取:alter语句希望在SY

我在运行时遇到此错误:

alter table tablename add column columnname varchar(1) default 'N';
DB2SQL错误:SQLCODE=-911,SQLSTATE=40001,SQLERRMC=68

如何解决这个问题?

请参见(我为DB210选择了一个错误代码,很可能这个错误代码在其他版本中是相同的,但请仔细检查!)


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

更改表后,您需要重新设置:在此处读取:

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

定期运行runstats脚本(一个DB2脚本),并将该脚本设置为使用分布和详细索引收集runstats

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

如何检查DB2中打开的事务?我对任何工作都是新手。请注意,环顾Stackoverflow,在我看来,这个答案可能会对您有所帮助(我自己也没法再多做了)。运行“db2 get snapshot for locks on”(db2 get snapshot for locks on)并在SYSTABLES表中查找锁。输出中的锁由应用程序组织,因此应该很容易发现哪个应用程序需要中断或终止,以便运行alter语句。