我目前在我的开发机器上为db2进行测试备份和恢复数据库表时遇到问题。从来没有完全成功。虽然我能够在删除并重新创建表后恢复所有数据,但我无法重置外键约束,因为我收到SQL错误抱怨密钥不匹配。这是我的确切步骤,我确定不是完全正确的方法,但它最终会恢复5423行数据:
过程
导出到ixf消息的/export/home/dale/comments.ixf /export/home/dale/msg.txt select * from .comments
注意:步骤1将5423行数据导出到某个位置
drop table .comments
从ixf创建的/export/home/dale/comments.ixf导入.comments
注意:此处的步骤3创建表但不插入任何数据行
从/export/home/dale/comments.ixf加载客户端,由identityoverride修改的ixf替换为.comments
注意:在此步骤之前,我可以在重新创建的数据库表中插入5423行数据
alter table .comments add FOREIGN KEY(comments_id)REFERENCES .news(article_key)
注意:这里alter table失败,因为db2抱怨某些comments_id与article_key不匹配
有人可以帮助解决我的问题吗?提前致谢
答案 0 :(得分:0)
错误意味着您在“注释”表中导入的某些行引用了“新闻”表中不存在的行。
您可能没有正确形成约束。列名“comment_id”听起来像是Comments表的主键。您需要与新闻表的主键匹配的外键。它也可能被称为“article_key”或“article_id”。
ALTER TABLE Comments
ADD FOREIGN KEY( article_key)
REFERENCES News( article_key);
如果“comment_id”实际上不是“评论”表的主键,则问题来自于不同时备份和恢复“新闻”和“评论”表。
您可以导出和导入新闻表以及评论表,或删除引用缺少新闻行的评论
DELETE FROM Comments
WHERE comments_id NOT IN (
SELECT article_key
FROM News
)
在执行此操作之前,您可能需要尝试列出将由上述查询删除的注释
SELECT *
FROM Comments
WHERE comments_id NOT IN (
SELECT article_key
FROM News
)
答案 1 :(得分:0)
我找到了解决问题的方法以及上面的评论,