NOARCHIVE モードで運用中(オンライン中)のデータベースを VSS(Volume Shadow Copy)を使用してバックアップを取ってみました。
結論としては、(テストでは)バックアップ開始時点のデータを問題なく戻すことができました。(*1)
注意点としては、バックアップする際に忘れずにオンライン REDO ログをバックアップし、リストアの際にオンライン REDO ログも戻すようにします。(*2)
メカニズムは以下です。
-
VSS を使用したバックアップを開始すると、Windows によってスナップショットがとられます。
このスナップショットは「クラッシュ整合状態」と言われ、要するに電源を引き抜いた後(電源遮断時)のハードディスクの状態と同じです。
この状態のものがバックアップとして取られます。 -
この VSS で取得したバックアップファイルをリストアすると、クラッシュから復旧したのと同じ状態なので、Oracle はクラッシュリカバリーを実行します。
これによってデータファイルがリカバリーされ、バックアップ開始時点のデータが戻ります。(*3)
もっとも、NOARCHIVE モードでは、
- オンライン中のデータベースを VSS を使ってバックアップ
- クラッシュ後の、一貫性のない(制御ファイルとデータファイルのSCNが異なる)状態でのバックアップ
を公式にサポートしていません。従って、このような運用は避けるべきです。(*4)
NOARCHIVE モードでの VSS を使用した正しいバックアップの取り方は以下。
- バックアップ前に、一度正常に Shutdown する。
- VSS を使用し、バックアップを開始する。
- バックアップが開始された(スナップショットが取得された)ことを確認後、データベースを再起動する。
このようにすれば、バックアップの終了を待つことなくデータベースの再起動ができるため、ダウンタイムが最小かつ一貫性のあるバックアップが取得できます。
-
しかし 100% 成功するとは限らないと思います。
例えば、多重化された制御ファイル間の不整合でデータベースがリカバリーできないなどの障害が発生するかもしれません。 -
正常に shutdown(abort 以外)してから取得したバックアップの場合は、クラッシュリカバリーは不要であるため、オンライン REDO ログは不要です。
-
クラッシュリカバリーでは、必須でバックアップ開始時点のオンライン REDO ログファイルが必要です。
-
というか、どこまでのデータを保全しないといけないか、という視点で考えれば、このようなバックアップにほとんど意味がありません。バックアップの設計を考え直した方が無難です。