4. 障害対応
4.1 インスタンス起動前のファイル削除
は、pg_resetxlogコマンドに-fオプションを指定して、強制的にWALファイルを作成しま す。
例 84 インスタンスの起動失敗ログ
4.1.3 データファイル消滅時の動作(正常終了時)
インスタンス正常終了後、次回インスタンスが起動するまでにテーブルを構成するデー タファイルが削除された場合の動作を検証しました。
図 8 データファイル消去の動作
実行結果
インスタンスは正常に稼働しました。削除されたテーブルにSELECT文でアクセス するとエラー(ERRORカテゴリ)が発生しました。インスタンスやセッションには影 響はありません。
ログ
インスタンス起動時にログは出力されません。SELECT 文実行時には以下のログが 出力されました。
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
table
pg_ctl stop rm file pg_ctl start
SELECT
t
表 43 検索時のログ
4.1.4 データ・ファイル消滅時の動作(クラッシュ時/変更なし)
インスタンス稼働中にクラッシュした場合の動作について検証しました。前回のチェッ クポイントから変更が無いテーブルのデータファイルが消滅した場合の動作になります。
これは運用しているデータベース・サーバーがOSパニックにより異常終了し、fsckコマン ドによりファイルが削除されたことを想定しています。
図 9 データファイル消去の動作
実行結果
インスタンスは正常に稼働しました。削除されたテーブルにSELECT文でアクセス するとエラー(ERRORカテゴリ)が発生しました。インスタンスやセッションには影 響はありません。
ログ
インスタンス起動時にクラッシュ・リカバリが行われたログが出力されます。
SELECT文実行時には以下のログが出力されました。
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
kill -9 rm file pg_ctl start
SELECT
t
表 44 起動時のログ
表 45 検索時のログ
4.1.5 データファイル消滅時の動作(クラッシュ時/変更あり)
インスタンス稼働中にクラッシュした場合の動作について検証しました。前回のチェッ クポイント以降に更新され、WALにトランザクション情報が記録されたテーブルのデータ ファイルが消滅した場合の動作になります。これは運用しているデータベース・サーバー がOSパニックにより異常終了し、fsckコマンドによりファイルが削除されたことを想定し ています。
図 10 データファイル消去の動作
LOG: database system was interrupted; last known up at 2014-07-01 19:26:19 JST
LOG: database system was not properly shut down; automatic recovery in progress
LOG: redo starts at 0/170AC508
LOG: record with zero length at 0/1766E888 LOG: redo done at 0/1766E858
LOG: last completed transaction was at log time 2014-07-01 19:26:23.657567+09 LOG: autovacuum launcher started
LOG: database system is ready to accept connections
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
kill -9 rm file pg_ctl start
SELECT
t UPDATE
実行結果
インスタンスは正常に稼働しました。削除されたテーブルにSELECT文でアクセス するとエラーは発生しませんでした。ただし、更新されたブロックの情報以外は損失し ています。インスタンスやセッションには影響はありません。
ログ
インスタンス起動時にクラッシュ・リカバリが行われたログが出力されます。しかし データが欠損したことに対するログは出力されませんでした。
表 46 起動時のログ
4.1.6 その他のファイル
□ VM/FSMファイル削除時の動作
VMファイル、FSMファイルは削除されてもエラーは発生せず、対象テーブルに対する SQL文も成功します。これらのファイルは次回のVACUUM時には再作成されます。
□ pg_filenode.mapファイル削除時の動作
pg_filenode.mapファイルが削除されると、オブジェクト名と実際のファイルが特定でき
なくなるためSQL文の実行がエラーになります。
例 85 pg_filenode.map 削除時のログ
LOG: database system was interrupted; last known up at 2014-07-01 19:37:33 JST
LOG: database system was not properly shut down; automatic recovery in progress
LOG: redo starts at 0/180000E0
LOG: record with zero length at 0/18008190 LOG: redo done at 0/18008160
LOG: last completed transaction was at log time 2014-07-01 19:38:05.152216+09 LOG: autovacuum launcher started
LOG: database system is ready to accept connections
psql: FATAL: could not open relation mapping file "base/16385/pg_filenode.map":
No such file or directory
□ PG_VERSIONファイル削除時の動作
PG_VERSIONファイルが削除されるとディレクトリがPostgreSQL用であることが認
識できなくなります。
例 86 PG_VERSION削除時のログ
FATAL: "base/16385" is not a valid data directory DETAIL: File "base/16385/PG_VERSION" is missing.