バックアップおよびリカバリ運用を考慮したコピーコマンドの構成について説明します。
コピーコマンドで使用するバックアップ領域は、万が一、バックアップ処理中にデータ格納先に異常が発生した場合に備えて2つ用意します。コピーコマンドでは、これらのバックアップ領域を循環利用しながら、バックアップ処理を行います。
注意
コピーコマンドによるバックアップ先にバックアップデータ格納先のディレクトリを使用することはできません。
コピーコマンドではバックアップ領域を循環利用する必要があるため、バックアップのたびにバックアップ先を決定しなければなりません。そのため、バックアップ先に関する任意の情報が登録可能なバックアップ情報ファイルを利用することで、バックアップ運用を自動化することができます。
参考
バックアップ情報ファイルは、pgx_dmpallコマンドがバックアップデータ格納先のディレクトリに用意したファイルであり、コピーコマンド内から自由に参照や更新が可能です。本ファイルは、pgx_dmpallコマンドが成功した最新のバックアップに関連付けて管理されるため、利用者が登録したコピーコマンドに関する最新のバックアップ情報を得ることができます。また、バックアップ情報ファイルの内容は、pgx_rcvallコマンドから表示することもできます。
pgx_dmpallコマンドは、以下の3つモードで順番にバックアップ用コピーコマンドを呼び出します。そのため、バックアップ用コピーコマンドはそれぞれのモードで行うべき処理が実装されている必要があります。
prepareモード
2つのバックアップ領域のうち、今回のバックアップ対象の領域を決定します。
前回のバックアップ時にバックアップ情報ファイルへ書き込まれた、最新のバックアップ先に関する情報を読み込むことで、今回のバックアップ対象の領域を決定できます。
backupモード
任意のコピー方法にて、prepareモードで決定したバックアップ領域に対してバックアップを行います。
finalizeモード
バックアップ情報ファイルに今回のバックアップ先に関する情報を書き込みます。
これにより、次回のバックアップ時に、prepareモードで最新のバックアップ先を確認することができます。
注意
コピーコマンド内の各モード間のバックアップ情報の引継ぎは、一時ファイルを作成するなど、利用者の任意の方法で行ってください。
pgx_rcvallコマンドは、以下のモードでリカバリ用コピーコマンドを呼び出します。そのため、リカバリ用コピーコマンドはそのモードで行うべき処理が実装されている必要があります。
restoreモード
任意のコピー方法にて、バックアップ用コピーコマンドで取得したバックアップ先からのリストア処理を実装します。
ポイント
コピーコマンドに引数として与えられるモードを参照することで、バックアップとリカバリを1つのコピーコマンドで実装することも可能です。
例
バッチファイル形式で作成する場合
if "%1" == "prepare" goto prepare if "%1" == "backup" goto backup if "%1" == "finalize" goto finalize if "%1" == "restore" goto restore :prepare prepareモードで行う処理を実装します。 exit /b :backup backupモードで行う処理を実装します。 exit /b :finalize finalizeモードで行う処理を実装します。 exit /b :restore restoreモードで行う処理を実装します。 exit /b
ポイント
コピーコマンドの開発を理解していただくことを目的としたサンプルとして、特定のディレクトリにデータベースクラスタとテーブル空間の配置先ディレクトリをバックアップするバッチファイルを提供しています。
サンプルは以下のディレクトリに格納されています。
インストールディレクトリ\share\copy_command.bat.sample