ablog

不器用で落着きのない技術者のメモ

表領域のバックアップ・モードについて

オンラインの読取り/書込み表領域のユーザー管理バックアップの作成

表領域がオンラインで、データベースがオープンしているときに、データファイルのユーザー管理バックアップを作成するには、読取り/書込み表領域をバックアップ・モードに設定する必要があります。 ALTER TABLESPACE ... BEGIN BACKUP 文を使用すると、表領域をバックアップ・モードに設定できます。 バックアップ・モードでは、変更されたデータ・ブロック全体がREDOストリームにコピーされます。 ユーザーがALTER TABLESPACE ... END BACKUPまたはALTER DATABASE END BACKUP文を使用して表領域のバックアップ・モードを終了すると、データファイル・チェックポイントSCNが現在のデータファイル・チェックポイントSCNまで進みます。

この方法でバックアップされたデータファイルをリストアすると、リカバリが必要な場合は、REDOログ・ファイルの適切なセットを適用するように求められます。 REDOログには、データファイルをリカバリし、データファイルを一貫性のある状態にするために必要なすべての変更が含まれています。

ユーザー管理データベース・バックアップの作成

Oracle使いへの王道 (DB SELECTION) P.341

オフラインバックアップの仕組み
(中略)

  1. バックアップする表領域をバックアップモードに変更します。オンラインバックアップ中でも、データベースライターによるデータファイルへの書き出しは停止されません。
  2. チェックポイントが完了したときにデータファイルチェックポイントヘッダーに書き込まれるチェックポイント情報は、通常とは別の場所に書き込まれます。
  3. データベースライターによるデータファイルへの書き出しは停止しないので、データベースライターとOSのコピーコマンドが同時に同一ブロックにアクセスする可能性があります。同時にアクセスした場合、バックアップしたファイルの1つのブロックには、チェックポイント前とチェックポイント完了後のデータが混在することになります。これはOracleのI/Oブロックサイズと、OSのコピーコマンドのI/Oブロックサイズが異なるためです。このように1つのブロックにチェックポイント前後のデータが混在することは、本来想定していないので正しくリカバリできません。そこでバックアップモードを導入し、通常は、変更した列データだけを保存しているREDOログに、変更したブロック全体を保存することでブックレベルの一貫性を保ち、正常なリカバリを実現しています。ただしバックアップモード中は、変更を加えたデータファイルのブロック全体がREDOログに保存されるので、生成されるREDOログの量が増大します。
  • バックアップモードにすると、
    • データファイルヘッダーのチェックポイントSCNが更新されなくなる。
    • REDOログに変更したブロック全体が保存されるようになる。
  • バックアップモードを終了すると、
    • データファイルヘッダーのチェックポイントSCNが最新のチェックポイントまで進む。
    • REDOログには変更した列データのみが保存されるようになる。

従って、オンラインバックアップで取得したバックアップからリストア・リカバリする場合、リストアされたデータファイルのヘッダーのチェックポイントSCNより後の変更をアーカイブログを使ってブロック単位で変更を適用していき、バックアップモードが終了した後はブロック単位ではなく列データ単位で変更が適用されていき、直近までリカバリする場合は、アーカイブログによる変更を全て適用して、オンラインREDOログによる変更を適用して、最後にUNDO表領域のUNDOデータを使って、commit されていないデータをロールバックするという流れになります。
ちなみにUNDO表領域はリストア後にアーカイブログとオンラインREDOログによって変更が適用され、最新の状態になり、その最新のUNDO表領域のUNDOデータを使ってロールバックが行われます。