3

Firebird データベースで非常に奇妙なことが起きました。

テーブルを作成しようとしましたが、何らかの理由で CREATE TABLE が失敗しました。しかし今、それは非常に奇妙な状態で立ち往生しています:

CREATE TABLE同じテーブル名で再試行すると、エラーが発生します: テーブルは既に存在します。しかし、DROP TABLEそのテーブルにアクセスしようとすると、エラーが発生します: テーブルが存在しません。そのテーブルにアクセスしようとするSELECT * FROMと、「テーブルが存在しません」というエラーが発生し、名前がメタデータ クエリに表示されません。

SELECT RDB$RELATION_NAME
  FROM RDB$RELATIONS
 WHERE RDB$SYSTEM_FLAG=0

なんらかの理由で、テーブルが実際には存在しないように見えますが、テーブルが存在することがどこかに示されているため、テーブルを作成できません。

誰でもこれを修正する方法を知っていますか? そのデータベースへのすべての接続を閉じようとしましたが、これは過去に不整合の問題を解決するのに役立ちましたが、今回は役に立ちません。

4

1 に答える 1

2

テーブルを作成しようとしたときのエラーの詳細を教えてくれなかったので、コメントできません。ただしRDB$RELATIONS、テーブルの作成時に影響を受けるのはシステム テーブルだけではありません。そのテーブルに関する一部の情報が一部のシステム テーブルに存在し、他のシステム テーブルには存在しないという矛盾した状況に陥っている可能性があります。

もう 1 つのオプションは、システム テーブルのインデックスが破損しているため、レコードは存在しませんが、インデックスはまだ存在していると見なします。

バックアップ/復元を実行して、それが役立つかどうかを確認してください。うまくいかない場合は、他のシステム テーブル (RDB$RELATION_FIELDSなど) でその「作成されていない」テーブルに関連するレコードを検索し、見つかった場合はそれらを削除してみてください。

最後のオプションとして、正しいメタデータを使用して新しいクリーン データベースを作成し、 を使用してデータをそこに送り込むことができますIBDataPump

于 2012-08-23T00:10:04.623 に答える