2012-06-14 74 views
10

私は電力サージの後になった私のPostgreSQL DB、と複数のエラーがあります。修理破損したデータベースにpostgresql

私は私のデータベースから、ほとんどのテーブルにアクセスすることはできませんが。私は例select * from ac_cash_collectionのためにしようとすると、私はfoolowingエラーを取得:

ERROR: missing chunk number 0 for toast value 118486855 in pg_toast_2619

私がしようとすると、pg_dumpは、私は次のエラーを取得:私は先に行って、データベース全体のREINDEXを実行しようとした

 
Error message from server: ERROR: relation "public.st_stock_item_newlist" does not exist 
pg_dump: The command was: LOCK TABLE public.st_stock_item_newlist IN ACCESS SHARE MODE 

を、私は実際にそれを放置して眠りにつき、午前中は何もしなかったので、私はそれをキャンセルしなければならなかった。

私はできるだけ早くこれを解決するためにいくつかの助けが必要です、助けてください。

+0

電源障害がハードディスクを何とか壊したと思いますが、バックアップを復元する必要があります。 –

+0

[Google it](https://www.google.com/webhp?q=postgresql%20ERROR% 3A%20missing%20chunk%20number)? – lanzz

+0

パワーサージがバックアップを壊してしまった... –

答えて

3

あなたは何も他、指示上http://wiki.postgresql.org/wiki/Corruptionと行為を行う前に。そうしないと、問題が悪化する危険があります。 ignore_system_indexeszero_damaged_pages


が有用であるかもしれないFine Manualに記載されている2つの設定パラメータがあります。私はそれらを使用したことはありませんが、もし私が嫌ならば...

トーストテーブルに役立つかどうかわかりません。いずれにせよ、それらを設定するとデータベースが再び使用可能になる場合は、{backup + drop + restore}を実行してすべてのテーブルとカタログを新生児の形状に戻します。成功!

+2

最初にコピーを取ることに関する警告が追加されました。それは真剣に重要です。 'zero_damaged_pa​​ges' *はTOASTテーブル(とインデックスとその他全て)に影響します。それは*データを消去することで動作し、回復しません。 'pg_resetxlog'や他の"ビッグハンマー "の回復ツールを使う前に、とても慎重に考えてください。 –

+0

優れたアドバイス、IMHO。 OQを再読み込みすると、関連するカタログが破損しているように見えます。 – wildplasser

+0

ここでバックアップできない場合があります。テーブルが拡張ストレージを使用している場合、 'pg_dump'が'圧縮データが壊れています 'のようなエラーで失敗することを期待してください。 – kontextify

4

バックアップがある場合は、バックアップから復元してください。

もしそうでなければ、定期的なバックアップが必要な理由を知りました。ハードウェアが誤動作した場合、PostgreSQLができることはありません。

さらに、このような状況に陥った場合は、まずPostgreSQLを停止し、すべての表領域、WALなど、すべてのファイルレベルの完全なバックアップを取ってください。

したがって、まだ一部のデータを回復したい場合。

  1. 個々のテーブルをダンプしてみてください。あなたがこれでできることを手に入れよう。
  2. 問題が発生した場合はインデックスを削除する
  3. テーブルのダンプセクション(ID = 0..9999,1000.1.19999など) - リカバリするためにいくつかの行が壊れている箇所を特定し、まだ何が良いですか。
  4. 特定の列だけをダンプしてみてください。大規模なテキスト値はアウトラインで(トーストテーブルに)保存されるため、残りのデータが取り出される可能性があります。
  5. システムテーブルが破損している場合は、多くの作業に取り組んでいます。

これは大変な作業ですが、復旧したものを確認し、不足しているものを見つけようとする必要があります。

さらに多くのことができます(場合によっては空のブロックを作成すると部分的なデータをダンプできます)が、データが特に価値のないものでなければ、もっと複雑で厄介です。

重要なメッセージです。定期的なバックアップを取って、正常に動作することを確認してください。

+1

+1今日、私はバックアップが重要であることを知ってうれしく、データベースを正常に回復しました。 – Claudix

1

あなたが何かをする前に、破損したデータベースの完全なファイルシステムレベルのコピーをとってください。そうする

http://wiki.postgresql.org/wiki/Corruption

故障、破損の原因となったかについての証拠を破壊し、あなたの修理努力がひどく行くとさらに悪いものを作る場合、あなたがそれらを元に戻すことができないことを意味します。

今すぐ

関連する問題