• 検索結果がありません。

インスタンス起動前のファイル削除

ドキュメント内 PostgreSQL Internals (1) (ページ 133-139)

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

ドキュメント内 PostgreSQL Internals (1) (ページ 133-139)