1

我在 IBMi/System-i/iSeries/AS400 上有一个表,它没有外键、主键或任何类型的约束。我正在尝试使用 SQL 添加主键:

ALTER TABLE MYLIB.TBLGB ADD CONSTRAINT MYLIB.R_MYLIB_PK_GB PRIMARY KEY (GBAPP, GBTSK, GBSET, GBSTP)

结果是:

Error: [SQL0538] The FOREIGN key in constraint R_MYLIB_PK_GB in MYLIB not same as the parent key. Cause . . . . . : The FOREIGN key in constraint R_MYLIB_PK_GB in MYLIB is not the same as the parent key of table *N in *N. The FOREIGN key must have the same number of columns as the parent key and the data type and attributes of the FOREIGN key must be identical to the data type and attributes of the corresponding column of the parent key. Recovery . . . : Correct the statement so that the description of the FOREIGN key conforms to that of the parent key of the specified table.

我对此完全感到困惑,因为绝对没有外键链接到该表。事实上,我已经从这个库中的所有表中删除了所有约束。我可以查看什么来确定是什么阻止了这个?

另一个有趣的细节是,这在其他基本相同的库上运行良好......

4

3 回答 3

0

很可能,保存和恢复的顺序不正确。该表具有不应保存且应在保存前删除的属性。还原导致新系统上的数据库目录包含不一致的元素。

如果不是,那么下一个可能性(并且几乎是唯一的其他可能性)是数据库目录在还原完成之前已经存在不一致。这些可能是由不当关闭或其他操作引起的。

第一步应该是:

RCLDBXREF OPTION(*CHECK)

如果报告了问题,请运行:

RCLDBXREF OPTION(*FIX)

如果系统对于 RCLDBXREF 命令来说太旧,请使用:

RCLSTG SELECT(*DBXREF)

旧版本没有可用的“*CHECK”选项。

根据数据库的大小和复杂性、所需的重新同步次数和服务器的一般性能特征,其中任何一个都可以运行 10 分钟到几个小时。大多数无法解释的数据库目录问题(除了那些需要 PTF 的问题)都可以通过其中任何一个解决。

通常首选 RCLDBXREF 命令,但有些问题需要使用 RCLSTG 替代命令。RCLSTG 存在重大限制,因此请务必阅读命令 [Help]。

于 2014-03-17T14:16:06.347 回答
0

使用DSPFDDSPDBR命令检查文件描述和数据库关系。

于 2012-04-05T19:54:37.317 回答
0

约束由模式限定。因此,除非您还有一个名为 mylib 的模式,否则请删除限定条件。

它抱怨表的原因可能是因为它试图在模式 systables 中找到一个表,但这纯粹是猜想。

于 2012-04-05T20:01:54.757 回答