データベースをバックアップする際の停止時間をできるだけ短くしたいとき
これは InterSystems FAQ サイトの記事です。
外部バックアップ機能と、SANソリューションが提供するスナップショット(スナップクローン、ミラークローンなど呼び方はベンダ毎に異なります)などのテクノロジを利用することで、バックアップ時のインスタンス停止時間を最短にすることができます。
操作手順概要は以下の通りです。
- 外部バックアップ用ユーティリティを利用して、データベースファイルへの書き込みを一時中断します(%SYSネームスペースで実行します)。
%SYS>set status=##class(Backup.General).ExternalFreeze()
- 外部のスナップショットユーティリティを使用して、ファイルシステムのスナップショットを作成します。
- データベースファイルへの書き込みを再開するため、外部バックアップ用ユーティリティを使用します。
%SYS>set status=##class(Backup.General).ExternalThaw()
- バックアップメディアにスナップショットをコピーします。
【ご参考】
ExternalFreeze() の処理は以下のようになります。
1. ジャーナルファイルの切り替え
2. データベースバッファ上の書き込み待ちバッファをすべてデータベースファイルに書き出す
3. ライトデーモンをサスペンド状態にする
これらの処理の後、データベースファイルは静的な状態になり、外部のバックアップ処理によるバックアップが可能な状態(※)になります。
※スナップショットコピーやミラーコピーの同期完了状態で切り離しが可能な状態。
この処理では、グローバルに対する書き込みを禁止していない為、データベースへの書き込みアクセスは、データベースキャッシュのバッファに余裕があれば可能です。
ただし、ExternalFreeze() によるライトデーモンの不活動が長時間の場合、以下の条件で書き込みアクセスが待ち状態になります。
(1) 書き込み待ちのバッファ数が全バッファ数の70%以上になった場合
(2) ライトデーモンの不活動時間が10分以上(既定値)になった場合
(2)について、ライトデーモンの不活動時間のタイムアウト値は既定値で10分となっています。
ExternalFreeze() が10分以上続く場合、ExternalThaw() が実施されるまで、書き込みアクセスが待ち状態になります。
このライトデーモンの不活動時間のタイムアウト値は、ExternalFreeze() の第7パラメータにてsec単位で指定可能です。
このタイムアウト値の範囲は、120秒~1200秒になります。
実行例:
%SYS>s x=##class(Backup.General).ExternalFreeze(,,,,,,1200) ;タイムアウト値 20分
外部バックアップについての詳細は、以下のドキュメントをご覧ください。
外部バックアップについて
各バックアップ方法については、以下の関連トピックをご覧ください。
【関連トピック】
データベースのバックアップ方法について
累積バックアップと差分バックアップの違いについて
稼働中のインスタンスを停止せずにバックアップを行う方法
データベースのバックアップについて(InterSystems Symposia 2014)
VM Backups and Caché freeze/thaw scripts