【问题标题】:db2 SQLCODE -668 when insertingdb2 SQLCODE -668 插入时
【发布时间】: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 语句试图将一列添加到一个表中,该表具有一个定义为行属性敏感性的编辑过程。无法向此表添加任何列。

有办法改正吗?

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

提前致谢。

【问题讨论】:

    标签: sql db2


    【解决方案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;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-20
            相关资源
            最近更新 更多