記事
· 2021年3月3日 5m read

稼働中のインスタンスを停止せずにバックアップを行う方法

これは InterSystems FAQ サイトの記事です。
 

InterSystems製品を停止しないバックアップ方法は、3種類あります。


① 外部バックアップ
② オンライバックアップ
③ レガシー並行外部バックアップ

 

各詳細については、以下ドキュメントをご参照ください。


バックアップ方法について【IRIS】
バックアップ方法について

それぞれの特徴について、簡単に解説します。

① 外部バックアップ

外部バックアップでは、SANシステム等のストレージ機能を利用して、データベースファイル(InterSystems IRIS の場合は IRIS.DAT、Caché/Ensemble/HealthShareの場合は CACHE.DAT)のスナップショットを作成する間だけ、データベースへの書き込みを停止させます。
スナップショット作成中は、データベースへの書き込みは停止されますが、ユーザ・プロセスによるメモリ内の更新は引き続き実行できます。
しかし、スナップショット機能がなく、バックアップ対象のデータベースを、退避エリアにコピーするような場合、データベースファイル(*.DAT)のファイルサイズが大きければ大きい程、コピーに時間がかかります。
コピーに時間がかかれば、データベースへの書き込み停止時間も長くなります。
また停止時間が長時間に及ぶことで、ユーザからの更新量も増え、データベースキャッシュが一杯になる事も予測され、その結果、ユーザプロセスが停止してしまいます。
データベースへの書き込み停止状態が、長時間に及ぶ事が予測できるような場合は、③のレガシー並行外部バックアップを利用したほうが、書き込み停止時間を短くできます。

② オンラインバックアップ

オンラインバックアップでは、データベース内でデータに割り当てられているブロック全てがバックアップされます。
オンラインバックアップ中も、データベース内のブロックが更新されることがあるため、更新が継続する限り、繰り返し更新ブロックのバックアップを行います。 最終的には、完全なバックアップを取る必要があるため、必ずどこかの時点で静止状態を作る必要があります。
このためオンラインバックアップでは、データベースへの書き込みを停止する状態が、何度か続きます。
データベースへの書き込み停止については、①の外部バックアップと同様で、ユーザ・プロセスによるメモリ内の更新は引き続き実行できます。
しかし、オンラインバックアップの場合、バックアップ対象のデータベース容量が大きければ大きいほど、バックアップにかかる時間は長くなるため、「書き込み停止」合計時間が長くなります。
できるだけ、書き込み停止時間を短くしたい場合には、①の外部バックアップ、または、③のレガシー並行外部バックアップを利用します。

③ レガシー並行外部バックアップ

レガシー並行外部バックアップは、InterSystems製品のユーティリティを利用して、データベースファイル(*.DAT)のスナップショットの作成(または、バックアップエリアへの退避)と、オンラインバックアップの差分バックアップを組み合わせたバックアップ方法です。
方法は、以下の通りです。


================================================================
(1) バックアップ開始のフラグをデータベースにセットし、
(2) データベースファイル(*.DAT)をコピーし、
(3) そのコピー時間中に変更されたデータに対して、「オンラインバックアップ」の差分バックアップを実行する
================================================================

データベースへの書き込み停止状態になるのは、(3)の差分バックアップの最終処理のみです。

この時のバックアップ対象データは、データベースファイル(*.DAT)コピー中に変更されたデータのみであるため、フルバックアップを行う時間と比べ、停止時間は極端に短くなります。

実際の利用方法は以下の通りです。

詳細については、ドキュメントもご参照ください。

バックアップのリストアについて【IRIS】
バックアップのリストアについて

===============================================================
(1) バックアップ開始のフラグをデータベースにセット

set ^ClearOK=$$CLRINC^DBACK("QUIET")

(2) OS上で データベースファイル(*.DAT)をコピー

(3) 外部バックアップユーティリティを使用したことを示すための実行 

set x=$$BACKUP^DBACK("","E","dirty backup","","","")

(4) 差分バックアップを実行 

set x=$$BACKUP^DBACK("","I","incremental",bckfile,logfile,"QUIET","Y","Y","Y","")

===============================================================

 

上記、InterSystems製品内の処理をルーチンやクラスメソッド化し、バッチ処理と組み合わせることで、運用できます。

以下は、Caché2009.1以降で動作するサンプルルーチンです。
InterSystems IRIS でお試しいただく場合には、データベースファイルを退避する箇所を「IRIS.DAT」に変更してからお試しください。

 

Backupサンプルルーチン
 

レガシー並行外部バックアップで利用する^DBACKルーチンについて詳細は、以下ドキュメントをご参照ください

^DBACKルーチンについて^DBACKルーチンについて【IRIS】
^DBACKルーチンについて^DBACKルーチンについて

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください