4. 障害対応
4.1 インスタンス起動前のファイル削除
べて削除された状態ではインスタンスは起動できません。pg_resetxlog コマンドを実行し て WAL ファイルを再作成します。インスタンスが異常終了した 直後の場合には、
pg_resetxlogコマンドに-fオプションを指定して、強制的にWALファイルを作成します。
例 113 インスタンスの起動失敗ログ
□ インスタンス異常終了後、最新WALファイル削除時
インスタンスが異常終了し、最新のWALファイルが削除された場合、ログファイルには エラーが出力されますが、インスタンスは正常に起動します。クラッシュ・リカバリは途中 までしか実行されませんが、ログには何も出力されません。
例 114 最新のWALファイルが削除された場合の起動ログ
LOG: could not open file "pg_xlog/000000010000000000000002" (log file 0, segment 2): No such file or directory
LOG: invalid primary checkpoint record
LOG: could not open file "pg_xlog/000000010000000000000002" (log file 0, segment 2): No such file or directory
LOG: invalid secondary checkpoint record
PANIC: could not locate a valid checkpoint record
LOG: startup process (PID 27972) was terminated by signal 6: Aborted LOG: aborting startup due to startup process failure
LOG: database system was interrupted; last known up at 2017-02-11 12:07:16 JST LOG: database system was not properly shut down; automatic recovery in progress LOG: redo starts at 0/2000B98
FATAL: the database system is starting up FATAL: the database system is starting up LOG: redo done at 0/4FFFF78
LOG: last completed transaction was at log time 2017-02-11 12:08:22.592264+09 FATAL: the database system is starting up
LOG: MultiXact member wraparound protections are now enabled LOG: database system is ready to accept connections
LOG: autovacuum launcher started
4.1.3 データファイル削除時の動作(正常終了時)
インスタンス正常終了後に、テーブルを構成するデータファイルを削除しました。インス タンス再起動後の動作を検証しました。
図 11 データファイル削除時の動作
□ 実行結果
インスタンスは正常に起動しました。削除されたテーブルにSELECT文でアクセスする とエラー(ERRORカテゴリ)が発生しました。インスタンスやセッションには影響はあり ません。
□ ログ
インスタンス起動時にログは出力されません。SELECT文実行時には以下のログが出力さ れました。
例 115 検索時のログ
4.1.4 データファイル削除時の動作(クラッシュ時/変更なし)
インスタンスが稼働中にクラッシュした場合の動作について検証しました。前回のチェ ックポイントから変更が無いテーブルのデータファイルが削除された場合の動作になりま す。これは運用しているデータベース・サーバーがOSパニックにより異常終了し、fsckコ マンドによりファイルが削除されたことを想定しています。
LOG: database system is ready to accept connections
ERROR: could not open file "base/16385/16392": No such file or directory STATEMENT: SELECT COUNT(*) FROM backup1 ;
Table
SELECT rm file
pg_ctl stop pg_ctl start
Instance
t
図 12 データファイル消去の動作
□ 実行結果
インスタンスは正常に起動しました。削除されたテーブルに SELECT 文でアクセスする とエラー(ERRORカテゴリ)が発生しました。インスタンスやセッションには影響はあり ません。
□ ログファイル
インスタンス起動時にクラッシュ・リカバリが行われたログが出力されます。SELECT文 実行時には以下のログが出力されました。
例 116 起動時のログ
例 117 検索時のログ
LOG: database system was interrupted; last known up at 2017-02-11 14:59:05 JST LOG: database system was not properly shut down; automatic recovery in progress LOG: redo starts at 3/A000098
LOG: invalid record length at 3/CA7AC28 LOG: redo done at 3/CA79988
FATAL: the database system is starting up
LOG: MultiXact member wraparound protections are now enabled LOG: database system is ready to accept connections
ERROR: could not open file "base/16385/16601": No such file or directory STATEMENT: SELECT * FROM data1 ;
kill -9 Table
pg_ctl start
t
rm file SELECT
Instance
4.1.5 データファイル削除時の動作(クラッシュ時/変更あり)
インスタンス稼働中にクラッシュした場合の動作について検証しました。前回のチェッ クポイント以降に更新され、WALにトランザクション情報が記録されたテーブルのデータ ファイルが消滅した場合の動作になります。これは運用しているデータベース・サーバーが OSパニックにより異常終了し、fsckコマンドによりファイルが削除されたことを想定して います。
図 13 データファイル消去の動作
□ 実行結果
インスタンスは正常に起動しました。削除されたテーブルに SELECT 文でアクセスする とエラーは発生しませんでした。ただし、更新されたブロックの情報以外は損失しています。
インスタンスやセッションには影響はありません。
□ ログファイル
インスタンス起動時にクラッシュ・リカバリが行われたログが出力されます。しかしデー タが欠損したことに対するログは出力されませんでした。
SELECT
t Table
kill -9 rm file pg_ctl start Instance
UPDATE
例 118 起動時のログ
4.1.6 その他のファイル
その他のファイルを削除した場合の動作を検証しました。
□ Visibility Map (VM) /Free Space Map (FSM)ファイル削除時の動作
VMファイル、FSMファイルは削除されてもエラーは発生せず、対象テーブルに対する SQL文も成功します。これらのファイルは次回のVACUUM時には再作成されます。
□ pg_filenode.mapファイル削除時の動作
pg_filenode.mapファイルが削除されると、システム・カタログと実際のファイルがマッ
ピングできなくなるためデータベースが利用できなくなります。
例 119 pg_filenode.map 削除時のログ
□ PG_VERSIONファイル削除時の動作
PG_VERSIONファイルが削除されるとディレクトリがPostgreSQL用であることが認
識できなくなります。
例 120 PG_VERSION削除時のログ
LOG: database system was interrupted; last known up at 2017-02-11 15:03:32 JST
LOG: database system was not properly shut down; automatic recovery in progress
LOG: redo starts at 3/CA7AC98
LOG: invalid record length at 3/CD51DB8 LOG: redo done at 3/CD51D90
LOG: last completed transaction was at log time 2017-02-11 11:35:11.928603+09 LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
FATAL: "base/16385" is not a valid data directory DETAIL: File "base/16385/PG_VERSION" is missing.
FATAL: could not open relation mapping file "base/16385/pg_filenode.map": No such file or directory