我在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.
我对此完全感到困惑,因为这个表肯定没有外键。实际上,我已从此库中的所有表中删除了所有约束。我可以通过什么来确定阻止它的内容?
另一个有趣的细节是,这在其他基本相同的库上运行良好......
答案 0 :(得分:0)
答案 1 :(得分:0)
约束由架构限定。因此,除非您还有一个名为mylib的模式,否则请删除该限定条件。
它抱怨表的原因可能是因为它试图在模式中找到一个表,systables,但这是纯猜想。
答案 2 :(得分:0)
最有可能的是,保存和恢复的顺序不正确。该表具有不应该保存的属性,应该在保存之前删除。还原导致新系统上的数据库目录具有不一致的元素。
如果没有,那么下一个可能性(以及唯一的另一种可能性)是数据库目录在恢复完成之前已经存在不一致。这些可能是通过不当关闭或其他行动引入的。
第一步应该是:
RCLDBXREF OPTION(*CHECK)
如果报告了问题,请运行:
RCLDBXREF OPTION(*FIX)
如果系统对于RCLDBXREF命令而言太旧,请使用:
RCLSTG SELECT(*DBXREF)
否" *检查"选项适用于旧版本。
根据数据库的大小和复杂程度,所需的重新同步次数以及服务器的一般性能特征,其中任何一个都可以运行10分钟到几个小时。大多数无法解释的数据库目录问题(除了那些需要PTF的问题)都可以通过其中任何一个清除。
通常首选RCLDBXREF命令,但有些问题需要RCLSTG替代方案。 RCLSTG存在重大限制,因此请务必阅读[帮助]命令。