web-dev-qa-db-ja.com

破損したFirebirdデータベースの修正

200 GBのFirebirdデータベース(Firebird 2.1.3で作成され、現在2.1.5が実行されています)があり、破損しているようです。バックアップしようとすると、次のようになります。

データベースファイルが壊れているようです<>
間違ったページタイプ
ページ0のタイプが間違っています(予期される0は1を検出しました)
gds_get_segmentが失敗しました

gfixで終わる

デッドロック

どうすれば修正できますか?

[〜#〜]更新[〜#〜]

この特定のデータベースは修正されていませんが、解決策はIB FirstAIDを試すことです。

推奨読書:

8
Sergei Ousynin

以下は、ステップバイステップの短いウォークスルーです。

  • ユーザーを切断し、データベースへの着信接続を無効にする
  • データベースファイルのコピー(または2つのコピー)を作成し、そのファイルで作業する
  • -vオプションを指定してGFIXを使用し、データベースファイルを検証する
  • gFIXを-vおよび-fと一緒に使用して完全な検証を行う

問題がそれほど深刻でない場合は、壊れたdbをバックアップして、新しい名前で復元してみます。

  • gFIX -mendを使用して、破損したデータベースをバックアップ用に準備する
  • gBAK -b -gを使用してデータベースをバックアップします。 -gはガベージコレクションを無効にします
  • gBAK -cを使用して、バックアップを新しいデータベースに復元します。

成功した場合、問題は修正されており、データベースは機能しています。そうでない場合は、同じ構造の空のデータベースを作成して、データをそこに送り込むことができます。

バックアップまたは復元が失敗する理由の1つは、壊れたデータベーストリガーが存在し、データベースへの接続を妨げている場合です。たとえば、データベーストリガーが、インデックスが壊れているテーブルなどを使用する場合があります。これを回避するには、-nodbtriggersオプションを使用してisqlツールでデータベースに接続し、それらのトリガーを無効にします。後で他の問題を修正して有効なデータベースを再び取得するときに、それらを有効にすることができます。

復元が失敗するもう1つの理由は、データが壊れているために、一部の有効性制約(チェック制約など)が満たされない場合です。この場合、-N [O_VALIDITY]コマンドスイッチを使用してデータベースを復元し、gbakを実行できます。

データベースを修正するプロセスのより詳細な情報、およびいくつかのタイプの破損の説明に興味がある場合は、次のページをご覧ください。

http://www.ibphoenix.com/resources/documents/search/doc_5

すべてが失敗した場合は、ほとんどの問題を修正してデータを抽出できるIBSurgeonツールを試すことができます。また、IBSurgeonのWebサイトには、データベース破損の原因と修正方法の詳細な説明があります。

http://ib-aid.com/option,com_content/task,view/id,58/Itemid,62/

このガイドをチェックしてください http://www.firebirdfaq.org/faq324/

6

以下で説明するように、16進エディタでデータベースファイルを開き、0から1までの間違ったページタイプを修正できます。それは私のために働いた。 http://forums.devshed.com/firebird-sql-development-61/corrupt-database-gifix-doesnt-fix-948653.html

0
Victor Ionescu