PREPARATION
受験対策

Goldの例題解説「障害復旧 - トランザクションログ復旧」

今回は、Goldの「障害復旧 - トランザクションログ復旧」からの出題です。

例題

4.02

PostgreSQLのWALファイルが破損した場合の復旧方法として正しいものを2つ選びなさい。

  1. pg_xact領域のファイルをすべて削除し、PostgreSQLを再起動する

  2. PostgreSQLを起動したまま、環境変数PGDATAにデータベースクラスタ領域を指定してpg_resetwalを実行する

  3. PostgreSQLを停止し、コマンドラインでデータベースクラスタ領域を指定してpg_resetwalを実行後にPostgreSQLを起動する

  4. pg_controldataファイルを削除し、PostgreSQLを再起動する

  5. pg_resetwalの-xオプションで次のトランザクションIDを指定する場合は、pg_clogディレクトリ内のファイル名で最も大きな数字に1を加えて、1048576で乗算した値を用いる

※この例題は実際のOSS-DB技術者認定試験とは異なります。

解答と解説

PostgreSQLには、WALファイルの破損で起動できない場合に備えて、pg_resetwalユーティリティが備わっています。
WALファイルの復旧では、PostgreSQLのファイルを直接操作するのではなく、pg_resetwalを用いるべきです。【選択肢A、Dと異なる】

pg_resetwalは、PostgreSQLの起動中には実行されません。【選択肢Bと異なり、選択肢Cに該当】
また、pg_resetwalの実行は、PostgreSQLの管理者ユーザのみが行えます。
これは、pg_resetwalの操作にはデータベースクラスタ配下への読み込み/書き込み権限が必要となるためです。
なお、データベースクラスタはコマンドラインで指定する必要があります。
ほかのユーティリティ(psqlなど)とは異なりPGDATA環境変数では指定できません。【選択肢Cに該当】

pg_resetwalがpg_controlから適切な値を読み込めない場合には、-o、-x 等のオプションを使用して、適切な値を指定できます。
例えば、-o、-xの各オプションはそれぞれ「次のOID」、「次のトランザクションID」を指定できます。

-xオプション(次のトランザクションID)の適切な値は、データディレクトリ配下のpg_xactディレクトリ内で最も大きな数字を持つファイル名を探すことで決定することができます。
その値に1を加え、1048576で乗算します。
pg_clogディレクトリのファイル名は16進数で表されているので、16進数で算出すると簡単です。
つまり、1(16進数)を加えた後、後ろにゼロを5つ付けるだけです(16進数で後ろにゼロを5つ付けると1048576で乗算したことになります)。
例えば、0011がpg_xactで最も大きなエントリであれば、-x 0x1200000となります。
【選択肢Eに該当】

選択肢A, Dは、PostgreSQLのファイルを直接操作しているため誤りです。
選択肢Bは、pg_resetwalを、PostgreSQLを停止せずに実行しており、またPGDATA環境変数でデータベースクラスタを指定しているため誤りです。
選択肢C, Eは正しいです。

正解は C と E です。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors

関連資格