今回は、Goldの「G4 障害復旧 - G4.2 破損クラスタ復旧(開発者向けオプション)」からの出題です。
データベース全体に対してVACUUMを実行する
該当のテーブルファイルを削除し、PostgreSQLを再起動する
zero_damaged_pages を on に設定して再度テーブルを参照する
該当のシステムテーブルに対してCLUSTERを実行する
PostgreSQLをシングルユーザ状態で起動し、該当のテーブルに定義されたインデックスに対してREINDEX INDEXを実行する
※この例題は実際のOSS-DB技術者認定試験とは異なります。
質問文にあるエラーメッセージは、該当のテーブルファイルのヘッダ情報が破損していることを示しています。
ヘッダ情報が破損している場合、該当のテーブルに対して全てのページをスキャンする必要のある、選択肢A, D, EのようなSQLコマンドを実行することはできません。
また、選択肢Bのように、直接ファイルを削除して再起動しても状況は悪化するだけです。
真に必要でない限り、PostgreSQLのファイルを直接操作することはお勧めしません。
上記より選択肢A, B, D, Eは不正解になり、正解はCということになります。
選択肢Cのzero_damaged_pagesは、開発者向けのオプションです。
通常の運用では、off に設定しておき、必要なとき(本題のように
ファイル破損からの復旧時など)に、SET文を用いて on に変更するとよいでしょう。
=# SET zero_damaged_pages TO on;
なお、本パラメータをonに設定すると、破損があると判断されるページをゼロで埋める挙動をとります。
つまり、該当のページに含まれるデータは復旧できなくなります。
利用に際しては、本パラメータをonにすることの影響(破損がないページの
データのみ復旧でき、破損があるページのデータは復旧できない)を理解した上で、最終手段として利用してください。
http://www.postgresql.jp/document/10/html/runtime-config-developer.html#GUC-ZERO-DAMAGED-PAGES
正解は C です。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.