0

次のように何らかの形で破損したデータベースがあります。
テーブル A のレコードには、テーブル B を指す外部キー列に値がありますが、B にはそのようなレコードは存在しません。
データベースは h2 バージョン 1.3.152 で作成され、 1.3.170 (この記事の時点で最新) で回復しました。
また、回復ツールがこれについて文句を言わなかったのも奇妙です (しかし、問題は解決されませんでした)

回復する方法のアイデアはありますか?

実際の例:

select * from punto where punto_id = 3309; --> 何も返さない

select * fromtramo where 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 が使用されます)。

参照整合性がどのように侵害されたかを言うのは非常に困難です。この問題は、データベースが破損したときに発生したか、参照整合性が無効になっているときに発生した可能性があります(無効になっている場合)。

回復ツールは、データベース ファイル内のデータを可能な限り回復することを目的としています。参照整合性の問題は修正されません。

参照整合性の問題を解決するには、複数の方法があります。1 つの解決策は、余分なレコードを削除することです。もう 1 つの解決策は、不足しているレコードを追加することです。ただし、現在、それらを自動的に修正する方法はありません。

于 2012-12-10T19:28:20.090 に答える