障害が発生したディスクに応じて、以下のリカバリ手順でデータベースクラスタをリカバリしてください。
データ格納ディスク、またはトランザクションログ格納ディスクに障害が発生した場合
以下の手順でデータ格納ディスク、またはトランザクションログ格納ディスクをリカバリしてください。
アプリケーションの停止
データベースを利用しているアプリケーションを停止してください。
インスタンスの停止
インスタンスを停止します。停止方法については、“2.1.2 サーバコマンドを使用する場合”を参照してください。
インスタンスの停止に失敗した場合は、“16.11 インスタンス停止失敗時の対処”を参照してください。
障害ディスクのリカバリ
ディスク交換を行ったあと、ボリュームの構成情報をリカバリします。
格納先のディレクトリの作成
データ格納ディスクに障害が発生した場合
データ格納先のディレクトリを作成します。テーブル空間を定義していた場合、そのディレクトリも作成します。
トランザクションログ格納ディスクに障害が発生した場合
トランザクションログ格納先のディレクトリを作成します。
データ格納先のディレクトリを作成する場合
$ mkdir /database/inst1 $ chown fsepuser:fsepuser /database/inst1 $ chmod 700 /database/inst1
参照
格納先のディレクトリの作成については、“導入ガイド(サーバ編)”の“セットアップ”の“資源配置用のディレクトリの準備”を参照してください。
キーストアのリカバリとキーストアの自動オープンの有効化
データベースに格納するデータを暗号化している場合は、データベースのバックアップを取得した時点のキーストアをリストアしてください。キーストアの自動オープンは、必要に応じて設定してください。
データベースクラスタのリカバリ
バックアップデータを使用して、データベースクラスタをリカバリします。
pgx_rcvallコマンドには、以下を指定します。
-Dオプションは、データ格納先のディレクトリを指定します。-Dオプションを省略した場合、PGDATA環境変数の値が使用されます。
-Bオプションは、バックアップデータ格納先のディレクトリを指定します。
> pgx_rcvall -D /database/inst1 -B /backup/inst1
注意
リカバリに失敗した場合は、表示されるエラーメッセージに従ってエラーの原因を取り除き、pgx_rcvallコマンドを再実行してください。
「pgx_rcvall:リカバリ中にエラーが発生しました」のメッセージがある場合は、その後にリカバリ実行時のログが出力されます。ログの最後の十数行以内にエラーの原因が出力されますので、そのメッセージに従ってエラーの原因を取り除き、pgx_rcvallコマンドを再実行してください。
また、リカバリ中に表示される以下のメッセージは、pgx_rcvallコマンドの正常な動作によって出力されるメッセージのため、ユーザーが意識する必要はありません。
FATAL: データベースシステムは起動処理中です
インスタンスの起動
インスタンスを起動します。インスタンスの起動方法については、“2.1.2 サーバコマンドを使用する場合”を参照してください。
アプリケーションの再開
データベースを利用しているアプリケーションを再開してください。
バックアップデータ格納ディスクをリカバリする手順を説明します。
対処方法には以下の2つの方法があります。
インスタンスを起動したままリカバリする方法
インスタンスを停止してリカバリする方法
インスタンス停止の有無による、実行する手順の違いを以下に示します。
No  | 手順  | インスタンス停止の有無  | |
|---|---|---|---|
なし  | あり  | ||
1  | トランザクションログ二重化の停止確認  | ○  | -  | 
2  | アーカイブログ出力の停止  | ○  | -  | 
3  | アプリケーションの停止  | -  | ○  | 
4  | インスタンスの停止  | -  | ○  | 
5  | 障害ディスクのリカバリ  | ○  | ○  | 
6  | バックアップデータ格納先のディレクトリ作成  | ○  | ○  | 
7  | アーカイブログ出力の再開  | ○  | -  | 
8  | トランザクションログ二重化の再開  | ○  | -  | 
9  | インスタンスの起動  | -  | ○  | 
10  | バックアップの実行  | ○  | ○  | 
11  | アプリケーションの再開  | -  | ○  | 
○:実施
-:実施不要
手順を以下に示します。
トランザクションログ二重化の停止確認
トランザクションログの二重化が停止されているかを、次のSQL関数で確認します。
postgres=# SELECT pgx_is_wal_multiplexing_paused(); pgx_is_wal_multiplexing_paused ------------------- t (1 row)
トランザクションログの二重化が停止していない場合は、次のSQL関数で停止してください。
postgres=# SELECT pgx_pause_wal_multiplexing(); LOG: multiplexing of transaction log files has been stopped pgx_pause_wal_multiplexing ---------------------------- (1 row)
アーカイブログ出力の停止
バックアップ格納ディスクを交換するまでに時間がかかると、トランザクションログが蓄積されていきます。そして、データ格納ディスクまたはトランザクションログ格納ディスクが満杯になると、運用が継続できなくなる危険性があります。
これを回避するために、以下の方法でアーカイブログの出力を停止してください。
archive_commandの変更
アーカイブログを出力したものとみなすよう、例えば“echo skipped archiving WAL file %f”や“/bin/true”などの、必ず正常終了するコマンドを指定します。
echoを指定すると、サーバログにメッセージが出力されるため、調査を行う上での指標になる可能性があります。
設定ファイルの再読込み
pg_ctl reloadコマンド、またはSQL関数pg_reload_confを実行します。
なお、運用が継続できなくなる危険性が無く、単にエラーを出力させたくない場合は、archive_commandに空文字列(")を指定して設定ファイルの再読み込みを実施してください。
障害ディスクのリカバリ
ディスク交換を行ったあと、ボリュームの構成情報をリカバリします。
バックアップデータ格納先のディレクトリ作成
バックアップデータ格納先のディレクトリを作成します。
# mkdir /backup/inst1 # chown fsepuser:fsepuser /backup/inst1 # chmod 700 /backup/inst1
バックアップデータ格納先のディレクトリの作成については、“3.2.2 サーバコマンドを使用する場合”を参照してください。
アーカイブログ出力の再開
archive_commandの設定を元に戻し、設定ファイルを再読込みします。
トランザクションログ二重化の再開
SQL関数pgx_resume_wal_multiplexingを実行します。
SELECT pgx_resume_wal_multiplexing()
バックアップの実行
pgx_dmpallコマンドを使用して、データベースクラスタをバックアップします。
pgx_dmpallコマンドには、以下を指定します。
-Dオプションは、データ格納先のディレクトリを指定します。-Dオプションを省略した場合、PGDATA環境変数の値が使用されます。
> pgx_dmpall -D /database/inst1
アプリケーションの停止
データベースを利用しているアプリケーションを停止してください。
インスタンスの停止
インスタンスを停止します。停止方法については、“2.1.2 サーバコマンドを使用する場合”を参照してください。
インスタンスの停止に失敗した場合は、“16.11 インスタンス停止失敗時の対処”を参照してください。
障害ディスクのリカバリ
ディスク交換を行ったあと、ボリュームの構成情報をリカバリします。
バックアップデータ格納先のディレクトリ作成
バックアップデータ格納先のディレクトリを作成します。
# mkdir /backup/inst1 # chown fsepuser:fsepuser /backup/inst1 # chmod 700 /backup/inst1
詳細については、“3.2.2 サーバコマンドを使用する場合”を参照してください。
インスタンスの起動
インスタンスを起動します。起動方法については、“2.1.2 サーバコマンドを使用する場合”を参照してください。
バックアップの実行
pgx_dmpallコマンドを使用して、データベースクラスタをバックアップします。
pgx_dmpallコマンドには、以下を指定します。
-Dオプションは、データ格納先のディレクトリを指定します。-Dオプションを省略した場合、PGDATA環境変数の値が使用されます。
> pgx_dmpall -D /database/inst1
アプリケーションの再開
データベースを利用しているアプリケーションを再開してください。
参照
pgx_rcvallコマンド、およびpgx_dmpallコマンドの詳細は、“リファレンス”の“pgx_rcvall”および“pgx_dmpall”を参照してください。
archive_modeの詳細は、“PostgreSQL Documentation”の“Server Administration”の“Write Ahead Log”を参照してください。
pgx_resume_wal_multiplexingの詳細は、“B.1 WAL二重化制御関数”を参照してください。