[pgsql-jp: 36952] Re: WAL の*.backupファイルは不要か?

Katsuhiko Okano k_okano @ po.ntts.co.jp
2006年 3月 31日 (金) 16:00:12 JST


岡野と申します。

> PostgreSQL8.0.3/RedHat9.0を使っています。
> pg_start_backup()/pg_stop_backup() で生成される *.backup ファイルは
> リカバリに必要なのでしょうか。*.backup ファイルが無くても正常にリカ
> バリして動作しているように見えます。(少なくとも最新のデータは、記録
> されていた。)

バックアップすべきだと思います。

データベース起動時に、
どこからリカバリ(REDO)すればよいかを表すチェックポイントを探すため、
バックアップ履歴ファイルを読み出して取得しようとし、
読み出せなかったときは制御ファイルを読み出して取得しようとします。
そのため制御ファイルが残っていればチェックポイントを知ることが出来ます。
#8.0.3のソースの src/backend/access/transam/xlog.cの
#StartupXLOG関数の4098行目あたりからです。

しかし、pg_start_backup('LABEL')を呼び出した後に誰かが手動で
CHECKPOINTを実行すると、制御ファイルのチェックポイントが書き換わります。
バックアップ履歴ファイルは、pg_start_backup時のチェックポイントのままです。
ファイルコピー中で、一部のファイルだけコピーされていたタイミングに実行された場
合には
バックアップ履歴ファイルがないとおかしな事になる可能性があるのではないでしょう
か。

また、バックアップ履歴ファイルにはユーザーの指定したバックアップラベル
が入っています。
(イレギュラーな運用が発生して)どのバックアップファイル群を使ってリカバリ
するかを人間が判断しなければならない状況では、
ラベルファイルにある情報(例えば、不定期バックアップの理由だとか
このバックアップには一部しか含まれていないとか)が役に立つと思います。

バックアップ履歴ファイルは単なる小さなテキストファイルですので、
名前があらかじめ分からない以外は扱いやすいファイルだと思います。


ちなみに、PostgreSQL8.1からは、
>pg_stop_backup()を実行した時に古い*.backupファイルを削除するようにしました。
(Bruce) 
とリリースノートにあります。
----------------------------------------
Katsuhiko Okano
k_okano at po.ntts.co.jp
NTT Sofrware Corp. (division "NBRO-PT4")



pgsql-jp メーリングリストの案内