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

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

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

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.

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