ログ末尾のバックアップ (SQL Server)
このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用する SQL Server データベースのバックアップと復元のみに関連しています。
ログ末尾のバックアップ は、まだバックアップされていないすべてのログ レコード ( ログの末尾) をキャプチャし、作業内容の消失を防いで、ログ チェーンの完全性を維持します。 SQL Server データベースをその最新の時点まで復元するには、トランザクション ログの末尾をあらかじめバックアップしておく必要があります。 ログ末尾のバックアップは、データベースの復旧プランの対象になる最後のバックアップとなります。
Note
ログ末尾のバックアップは、すべての復元シナリオで必要となるわけではありません。 復旧ポイントが、それより前のログ バックアップに含まれているのであれば、ログ末尾のバックアップは不要です。 また、データベースを移動するか置き換えて (上書きして) いる場合、ログ末尾のバックアップは不要であり、最新のバックアップ以降の特定の時点に復元する必要もありません。
ログ末尾のバックアップが必要となるシナリオ
以下に示すシナリオでは、ログ末尾のバックアップをお勧めします。
データベースがオンライン状態であり、データベースに対して復元操作を実行する予定がある場合に、ログ末尾のバックアップを最初に行う。 オンライン データベースのエラーを回避するには、 を使用する必要があります。 BACKUPTransact-SQL ステートメントの WITH NORECOVERY オプション。
データベースがオフラインで起動できず、データベースを復元する必要がある場合に、まずログの末尾をバックアップする。 このとき、トランザクションは発生しないので、WITH NORECOVERY の指定は省略できます。
データベースが破損したとき、BACKUP ステートメントの WITH CONTINUE_AFTER_ERROR オプションを使用してログ末尾のバックアップを試す。
破損しているデータベースでログ末尾のバックアップが成功するのは、ログ ファイルが破損しておらず、データベースがログ末尾のバックアップをサポートしている状態であり、一括ログ記録された変更がデータベースに含まれていない場合に限られます。 ログ末尾のバックアップを作成できない場合、最新のログ バックアップの後にコミットされたトランザクションはすべて失われます。
次の表は、BACKUP NORECOVERY と CONTINUE_AFTER_ERROR オプションをまとめたものです。
BACKUP LOG オプション | 説明 |
---|---|
NORECOVERY | データベースの復元操作を続行する場合は、必ず NORECOVERY を使用します。 NORECOVERY を指定すると、データベースは復元中の状態になります。 これにより、ログ末尾のバックアップの後にデータベースが変化しないことが保障されます。 NO_TRUNCATE オプションまたは COPY_ONLY オプションも指定されていない限り、ログは切り捨てられます。 **大事な** データベースが破損している場合を除き、NO_TRUNCATEを使用しないようにすることをお勧めします。 |
CONTINUE_AFTER_ERROR | 破損したデータベースの末尾をバックアップする場合に限り、CONTINUE_AFTER_ERROR を使用します。 注: 破損したデータベースでログの末尾をバックアップすると、通常ログ バックアップでキャプチャされるメタデータの一部が使用できなくなる可能性があります。 詳細については、後の「不完全なバックアップ メタデータが含まれたログ末尾のバックアップ」を参照してください。 |
不完全なバックアップ メタデータが含まれたログ末尾のバックアップ
データベースがオフラインである場合、データベースが破損している場合、またはデータ ファイルが欠落している場合でも、ログ末尾のバックアップではログの末尾がキャプチャされます。 これが原因で、復元情報コマンドや msdbのメタデータが不完全になる場合があります。 ただし、メタデータが不完全なだけで、キャプチャされたログは完全であり、使用できます。
ログ末尾のバックアップに不完全なメタデータが含まれている場合は、 backupset テーブルの has_incomplete_metadata が 1に設定されます。 また、 RESTORE HEADERONLYの出力で HasIncompleteMetadata が 1に設定されます。
ログ末尾のバックアップのメタデータが不完全な場合、ログ末尾のバックアップ時に、ファイル グループに関する情報の大部分が backupfilegroup テーブルから欠落します。 backupfilegroup テーブルのほとんどの列は NULL になり、意味を持つ列は次の列のみです。
backup_set_id
filegroup_id
type
type_desc
is_readonly
Related Tasks
ログ末尾のバックアップを作成するには、「データベースが破損した場合のトランザクション ログのバックアップ (SQL Server)」を参照してください。
トランザクション ログ バックアップを復元するには、「トランザクション ログ バックアップの復元 (SQL Server)」を参照してください。
参照
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
SQL Server データベースのバックアップと復元
コピーのみのバックアップ (SQL Server)
トランザクション ログのバックアップ (SQL Server)
トランザクション ログ バックアップの適用 (SQL Server)