1

バックアップなしで、Postgresが壊れたシステムを取得しました(RAIDが理由です)。

Postgres を使用して別のコンピューターにデータを配置しようとしています (ただし、バックアップを作成します)。

しかし、データディレクトリを設定してpostgresを実行すると、常にメッセージが表示されます

GET FATAL:  database files are incompatible with server
2012-08-15 19:58:38 GET DETAIL:  The database cluster was initialized with BLCKSZ 16777216, but the server was compiled with BLCKSZ 8192.
2012-08-15 19:58:38 GET HINT:  It looks like you need to recompile or initdb.

とても奇妙な数字 16777216 (2 の 24 乗 - 大きい) です。

ただし、コンパイル時にデフォルト値 8192 をリセットできません ( --with-blocksize= で遊んでも効果はありません。BLCKSZ - ヘッダー ファイルで見つかりません)。

)。

データを抽出する方法はありますか?

これは環境と状況です。

ハードドライブ: アレイ内の 3 つの SAS ディスクによる RAID 1

OS: Ubuntu 10.04.04 amd64

Postgres: 9.1 (apt-get による (リポジトリ リンクをより高いバージョンの Ubuntu に変更します))

システムが壊れる - しばらくしてから

AAC: Host Adapter BLINK LED 0x56
AACO: Adapter kernel panic'd 56

(ファイルシステムまたはハードウェアのエラー)

どういうわけか、データディレクトリを取得しました。表示される pg_conroldata:

pg_control バージョン番号: 903
カタログ バージョン番号: 201105231
データベース システム識別子: 5714530593695276911
データベース クラスタの状態: シャットダウン
pg_control の最終更新日: 2012 年 8 月 15 日火曜日 11:50:50
最新のチェックポイントの場所: 1B595668/2000020
以前のチェックポイントの場所: 0/0
最新のチェックポイントのREDO の場所: 1B595668/2000020
最新のチェックポイントの TimeLineID: 1
最新のチェックポイントの NextXID: 0/4057946
最新のチェックポイントの NextOID: 40960
最新のチェックポイントの NextMultiXactId: 1
最新のチェックポイントの NextMultiOffset: 0
最新のチェックポイントの最も古い XID: 670
最新のチェックポイントの最も古い XID の DB: 1344846103
最新のチェックポイントの最も古い ActiveXID: 0 最新のチェックポイントの
時間: 2012 年 8 月 15 日火曜日 11:50:50
最小の回復終了場所: 0/0
バックアップの開始場所: 0/0
現在の wal_level 設定: 最小
現在の max_connections 設定: 100
現在の max_prepared_xacts 設定: 0
現在の max_locks_per_xact 設定: 64
最大データ アライメント: 8
データベース ブロック サイズ: 16777216
大きなリレーションのセグメントあたりのブロック数: 131072
WAL ブロック サイズ: 8192
WAL セグメントあたりのバイト数: 16777216
識別子の最大長: 64
インデックス内の最大列数: 2387576020
TOAST チャンクの最大サイズ: 0
日付/時刻型ストレージ: 浮動小数点数
Float4 引数の受け渡し: 参照
渡し Float8 引数の受け渡し: 参照渡し

最初に、Ubuntu サーバー (ハードディスク - シンプルなシリアル 2、Ubuntu 10.04 i386、Postgres 9.1) で DB をアップしようとしましたが、上記と同じ例外が発生しました (BLCKSZ を使用)。

そのため、英語のPostgres 9.1を使用してUbuntu 10.04 amd64をデプロイしました(前のステップのエラーログにロシア語の記号の代わりに「 」があったため)仮想マシンで同じ例外が発生しました(BLCKSZを使用)。

apt-get postgres バージョンを削除し、docs http://www.postgresql.org/docs/9.1/static/installation.htmlで説明されているようにコンパイルした Ather 。で遊んでconfigure --with-blocksize=BLOCKSIZEも効果がありませんでした-同じエラーが発生しました

投稿失礼します。

pg_contol は、いくつかの操作によって壊れていました。

というわけで、クラスタはpg_resetxlogによって初期データで正常に復元されました。

4

2 に答える 2

0

16Mb のブロックサイズは非常に奇妙で、これら 2 つの値も完全に偽物に見えるためです。

Maximum columns in an index:       2387576020
Maximum size of a TOAST chunk:     0

...非標準のブロック サイズで postgres のコンパイルに時間を費やす前に、このデータの整合性を疑問視することをお勧めします。

リレーションに対応するファイルのサイズを見ると、16Mb の倍数ですか、それとも 8Kb の倍数ですか? データベースに数ギガバイトのテーブルがある場合、ディスク上のカットオフ サイズ (postgre がデータを複数のファイルに分割するサイズ) はどのくらいですか? data block sizeこれは*と等しくなければなりませんBlocks per segment of large relation。デフォルトのインストールでは、1Gb です。

于 2012-08-17T00:24:07.833 に答える
0

カーネル リソースの構成の詳細については、こちらを参照してください。おそらく、この新しい OS のデフォルト/現在の設定では、postmaster を起動できません。

ここでは、BLCKSZ パラメータの意味とコンテキストについて詳しく説明します。PostgreSQL の 64 ビット ビルドの実行に失敗したシステムで、新しいシステムは 32 ビット ビルドですか? 可能であれば、障害が発生したシステムの PostgreSQL のバージョン情報を取得しようとすると、問題が明らかになる可能性があります。使用したバージョン、ビルド、OS をお知らせください。カスタムビルドでしたか?

于 2012-08-15T20:33:28.470 に答える