今回は、Silverの「S2 運用管理 - S2.4 バックアップ方法(トランザクションログ(WAL)とWALアーカイブ)」からの出題です。
WALファイルはPostgreSQL バージョン9.6まではデータベースクラスタのpg_xlogディレクトリの下に作られていたが、PostgreSQL バージョン10以降ではデータベースクラスタのpg_walディレクトリの下に作られる。
ポイントインタイムリカバリ(PITR)では、archive_commandパラメータを適切に設定することで、生成されたWALファイルをデータベースクラスタの外のディレクトリにコピーして保存する必要がある。
PITRでは、wal_levelパラメータを適切に設定し、詳細な情報がWALファイルに書き出されるようにする必要がある。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2020年4月8日
PostgreSQLをはじめ多くのデータベースでは、データの変更時にデータファイルをいきなり更新するのではなく、まず追記型のログファイルに変更内容を書き出し、その後の適当な時点でデータファイルを更新する、という手順をとっています。この場合、ログファイルへの書き出しが完了した時点で、クライアントには更新完了のステータスが返されます。 このログファイルのことを、一般的にはトランザクションログ、などと呼ぶことが多いですが、PostgreSQLではデータファイルの更新に先立って(ahead)、書き出す(write)という意味で、Write Ahead Log(WAL)と呼んでいます。
データファイルが更新されるより前に何らかの原因でデータベースが異常終了した場合、データベースの再起動時に、WALに書き出された変更のうち、どこまでがデータファイルに反映されているかを調べ、未反映の部分についてデータファイルを更新する処理(リカバリ)が行われます。 WALファイルは、トランザクションのログ、という意味でPostgreSQL 9.6まではpg_xlogというディレクトリの下に出力されていましたが、PostgreSQL 10からはpg_walというディレクトリの下に出力するようになりました。
ポイントインタイムリカバリ(PITR)は、ある時点のバックアップ(ベースバックアップ)に、それ以降に発生したWALの内容をすべて適用することで、データベースの内容を最新(あるいは指定した特定の時点)の状態に復旧(リカバリ)する手段ですが、データベースクラスタ内に保存できるWALのサイズは有限なので、それを別の場所にコピーして保存する必要があります。この処理のことをWALアーカイブと呼びますが、そのためにはarchive_commandというパラメータにファイルをコピーするためのコマンドあるいはスクリプトを設定します。また、wal_levelをreplicaまたはそれ以上の値に設定し、リカバリに必要な情報が出力されるようにする必要があります。デフォルトはreplicaなので変更しなくても大丈夫ですが、minimalに設定されていると、クラッシュリカバリのみが可能で、PITRは実行できなくなります。
間違っているものを選ぶ問題なので、正解はAです。
WALの更新はデータファイルの更新よりも前に行われます。
例題解説についてのご質問やご意見は以下からご連絡ください。
※本例題および解説は、例題作成者から提供されたものです。実際の試験問題とは異なります。
※実際の試験問題に関するお問い合わせについてはご回答いたしかねます。あからじめご了承ください。
© EDUCO All Rights Reserved.