db2 SQLCODE -668 插入时

Posted

技术标签:

【中文标题】db2 SQLCODE -668 插入时【英文标题】:db2 SQLCODE -668 when inserting 【发布时间】:2011-11-26 12:57:54 【问题描述】:

当我将数据插入表 (db2) 时,我收到了这个错误:

Message: Operation not allowed for reason code "7" on 
table "ELSAG.ICGR1106".. SQLCODE=-668, SQLSTATE=57016, DRIVER=3.50.152,...

当我用谷歌搜索它时,我发现前面的 ALTER TABLE 语句试图将一列添加到一个表中,该表具有一个定义为行属性敏感性的编辑过程。无法向此表添加任何列。

有办法改正吗?

一旦我删除并重新创建表,我就可以再次插入。

提前致谢。

【问题讨论】:

【参考方案1】:

要添加到 James 的答案并节省人们环顾四周的时间,您可以执行

CALL SYSPROC.ADMIN_CMD('REORG TABLE MY_TABLE_NAME')

通过任何可用的 SQL 客户端(即甚至通过 ODBC 或 JDBC 连接)来纠正此问题。但是,连接必须处于自动提交模式,并且您必须具有管理员权限才能执行此命令。

我强烈建议在调用之前阅读REORG 上的文档。

【讨论】:

【参考方案2】:

据此: SQL0668

您已对表进行了一些更改,这需要 REORG 才能进一步更新表。

对表运行 REORG 实用程序,应该没问题。

【讨论】:

在 DB2 LUW 下也可能是在发生“ALTER TABLE”或“LOAD”之后需要“SET INTEGRITY”。【参考方案3】:

CALL SYSPROC.ADMIN_CMD('REORG TABLE TABLE_NAME') 解决问题

【讨论】:

【参考方案4】:
SELECT REORG_PENDING FROM SYSIBMADM.ADMINTABINFO where TABSCHEMA = '<schema_name>' and tabname = '<table_name>';

如果上面的查询返回 Y 然后运行以下查询:

call sysproc.admin_cmd('reorg table <schema_name>.<table_name>');

欲了解更多信息,请访问:SQL0668N Operating not allowed for reason code '7'

【讨论】:

【参考方案5】:

我在某些表上关闭了完整性检查,然后在更改数据时收到了该错误消息。这在这里生成了有帮助的语句:

select 'SET INTEGRITY FOR ' || rtrim(tabname) || ' IMMEDIATE CHECKED;' 
from syscat.tables 
where CONST_CHECKED like '%N%' 
  or status != 'N'
  or access_mode != 'F'
with ur;

【讨论】:

以上是关于db2 SQLCODE -668 插入时的主要内容,如果未能解决你的问题,请参考以下文章

DB2 日志文件限制,SQLCODE:-964

常见DB2 sql错误码积累

SQLCODE:-516 是啥意思

db2插入数据失败

在 DB2 中使用 MERGE 命令时出错

尝试使用 MicroStrategy 连接时 DB2 上的 SQLCODE -1334