10

我正在使用 db2 9.5 我在表中创建了一个已成功创建的列,但我无法更新表列并出现以下错误

[错误] 脚本行:1-1 -------------- DB2 SQL 错误:SQLCODE:-668,SQLSTATE:57016,SQLERRMC: 7;DB2ADMIN.XCATENTRYEXT 消息:由于表“DB2ADMIN.XCATENTRYEXT”上的原因代码“7”,不允许操作。

在谷歌上的一些博客/网站之后,我发现 REORG 命令作为解决方案,如以下链接 http://bytes.com/topic/db2/answers/508869-reorg-tablespace中所述

我已尝试在数据库上运行以下查询来解决问题。

Database["DB2"].ExecuteNonQuery("call SYSPROC.ADMIN_CMD ('REORG TABLE DB2ADMIN.XCATENTRYEXT index CATENTRY_ID INPLACE')")

REORG TABLE DB2ADMIN.XCATENTRYEXT index CATENTRY_ID INPLACE

REORG TABLE DB2ADMIN.XCATENTRYEXT 
REORG INDEXES I0000908 FOR TABLE DB2ADMIN.XCATENTRYEXT

但所有查询的结果都有相同的错误,例如

 DB2 SQL error: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC: Database;BEGIN-OF-STATEMENT;<variable_set>
 Message: An unexpected token "Database" was found following "BEGIN-OF-STATEMENT".  Expected tokens may include:  "<variable_set>".

我被这个错误困住了,我什至无法更新该特定表的任何列。

4

3 回答 3

19

可以通过 SQL 语句进行 REORG:

CALL SYSPROC.ADMIN_CMD('REORG TABLE SCHEMA.TABLENAME');
于 2014-11-05T08:26:42.887 回答
16

从错误消息中可以看出,您以某种方式将整个字符串Database["DB2"].ExecuteNonQuery("call SYSPROC.ADMIN_CMD ('REORG TABLE DB2ADMIN.XCATENTRYEXT index CATENTRY_ID INPLACE')")作为 SQL 语句提交,这显然是不正确的。

只需在 shell 命令行上发出这些命令:

db2 connect to <your database name here>
db2 REORG TABLE DB2ADMIN.XCATENTRYEXT
于 2013-12-05T14:41:35.167 回答
1

如果您使用的是 dbeaver 之类的工具,您可以转到 Schema --> 表名 --> 右键单击​​ --> 选择工具,您应该会看到重组表的选项

于 2021-01-22T05:34:41.087 回答