ログ末尾のバックアップ

このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用するデータベースのみに関連しています。

SQL Server 2005 以降のバージョンで完全復旧モデルまたは一括ログ復旧モデルを使用するほとんどの場合は、まだバックアップされていないログ レコードをキャプチャするため、ログの末尾をバックアップする必要があります。復元操作直前のログの末尾から取ったログ バックアップをログ末尾のバックアップといいます。

SQL Server 2005 以降のバージョンでは通常、データベースの復元を開始する前に、ログ末尾のバックアップを取る必要があります。ログ末尾のバックアップを取ることで、作業の損失を防ぎ、ログ チェーンを完全な状態で保持することができます。データベースを障害発生時点に復旧するとき、ログ末尾のバックアップは復旧計画の対象になる最後のバックアップです。ログの末尾をバックアップできない場合、障害の前に作成した最後のバックアップの末尾までしかデータベースを復旧できません。

ログ末尾のバックアップは、すべての復元シナリオで必要となるわけではありません。復元ポイントが以前のログ バックアップに含まれている場合、またはデータベースを移動するか置き換えて (上書きして) いる場合、ログ末尾のバックアップは不要であり、最新のバックアップ以降の特定の時点に復元する必要もありません。また、ログ ファイルが破損し、ログ末尾のバックアップを作成できない場合は、ログ末尾のバックアップを使用しないでデータベースを復元する必要があります。最新のログ バックアップの後にコミットされたトランザクションは失われます。詳細については、後の「ログ末尾のバックアップを使用しない復元」を参照してください。

ログの末尾のバックアップ

他のログ バックアップと同様、ログ末尾のバックアップを取るには BACKUP LOG ステートメントを使用します。以下に示す状況では、ログ末尾のバックアップをお勧めします。

  • データベースがオンライン状態であり、データベースに対して復元操作を実行する場合は、復元操作を開始する前に WITH NORECOVERY を使用してログの末尾をバックアップします。

    BACKUP LOG database_name TO <backup_device> WITH NORECOVERY

    注意注意

    エラーを回避するため、NORECOVERY オプションを必ず指定します。

  • データベースがオフラインであり、開始していない場合。

    ログ末尾のバックアップを行います。このとき、トランザクションは発生しないので、WITH NORECOVERY の指定は省略できます。データベースが破損している場合は、次のように、WITH CONTINUE_AFTER_ERROR を使用します。

    BACKUP LOG database_name TO <backup_device> WITH CONTINUE_AFTER_ERROR

    データベースが破損しているなどの理由でデータベースが起動しない場合、ログ末尾のバックアップが成功するのは、ログ ファイルが破損しておらず、データベースがログ末尾のバックアップをサポートしている状態であり、一括ログ記録された変更がデータベースに含まれていない場合に限られます。

次の表に、これらのオプションを要約します。

BACKUP LOG オプション

コメント

NORECOVERY

データベースの復元操作を続行する場合は、必ず NORECOVERY を使用します。NORECOVERY を指定すると、データベースは復元中の状態になります。これにより、ログ末尾のバックアップの後にデータベースが変化しないことが保障されます。

これと併せて、NO_TRUNCATE オプションまたは COPY_ONLY オプションを指定しない限り、ログは切り捨てられます。

重要な注意事項重要
データベースが破損している場合を除き、NO_TRUNCATE を使用しないことをお勧めします。

CONTINUE_AFTER_ERROR

破損したデータベースの末尾をバックアップする場合に限り、CONTINUE_AFTER_ERROR を使用します。

注意注意
破損したデータベースにログ末尾のバックアップを適用する場合、通常であればログ バックアップにキャプチャされるメタデータの一部を使用できない場合があります。詳細については、後の「不完全なバックアップ メタデータが含まれたログ末尾のバックアップ」を参照してください。

データベースが損傷したときにトランザクション ログのバックアップを作成するには

不完全なバックアップ メタデータが含まれたログ末尾のバックアップ

データベースがオフラインである場合、データベースが破損している場合、またはデータ ファイルが欠落している場合でも、ログ末尾のバックアップではログの末尾がキャプチャされます。これが原因で、復元情報コマンドや msdb のメタデータが不完全になる場合があります。ただし、メタデータが不完全なだけで、キャプチャされたログは完全であり、使用できます。

ログ末尾のバックアップに不完全なメタデータが含まれている場合は、backupset テーブルの has_incomplete_metadata1 に設定されます。また、RESTORE HEADERONLY の出力で HasIncompleteMetadata1 に設定されます。

ログ末尾のバックアップのメタデータが不完全な場合、ログ末尾のバックアップ時に、ファイル グループに関する情報の大部分が backupfilegroup テーブルから欠落します。backupfilegroup テーブルのほとんどの列は NULL になり、意味を持つ列は次の列のみです。

  • backup_set_id

  • filegroup_id

  • type

  • type_desc

  • is_readonly

ログ末尾のバックアップを使用しない復元

ログ末尾のバックアップを必要としない復元シナリオには、次のものがあります。

変更履歴

変更内容

「ログの末尾のバックアップ」を更新して、"データベースがオフラインであり、開始していない場合" のログ末尾のバックアップに関する情報を修正しました。