0

我有一个数据库以某种方式以下列方式损坏:
表 A 中的一条记录在指向表 B 的外键列中有一个值,但 B 中不存在这样
的记录。数据库是在 h2 版本 1.3.152 中创建的,并且我用 1.3.170 恢复了它(在这篇文章的那一刻最新)。
恢复工具没有抱怨这一点也很奇怪(但问题没有解决)
关于为什么/如何发生的任何想法?
关于如何恢复的任何想法?

实际示例:

select * from punto where punto_id = 3309; --> 不返回任何东西

从tramo中选择* caseta_punto_id = 3309;--> 返回 1 条记录

punto.punto_id 引用 tramo.caseta_punto_id

您可以在此处下载数据库的副本。

谢谢。

4

1 回答 1

0

该数据库实际上是使用 2010 年的 H2 版本 1.2.140 创建的。(数据库文件中的“CREATE_BUILD”设置为 140,即使用版本 1.2.140。)

很难说参照完整性是如何受到侵犯的。该问题可能在数据库损坏时发生,或者可能在禁用引用完整性时发生(如果曾经被禁用)。

恢复工具旨在尽可能多地恢复数据库文件中的数据。它不能解决参照完整性问题。

有多种方法可以解决参照完整性问题。一种解决方案是删除多余的记录,另一种是添加缺失的记录。但是,我目前没有自动修复它们的方法。

于 2012-12-10T19:28:20.090 回答