ログ末尾のバックアップ
このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用するデータベースのみに関連しています。
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_metadata が 1 に設定されます。また、RESTORE HEADERONLY の出力で HasIncompleteMetadata が 1 に設定されます。
ログ末尾のバックアップのメタデータが不完全な場合、ログ末尾のバックアップ時に、ファイル グループに関する情報の大部分が backupfilegroup テーブルから欠落します。backupfilegroup テーブルのほとんどの列は NULL になり、意味を持つ列は次の列のみです。
backup_set_id
filegroup_id
type
type_desc
is_readonly
ログ末尾のバックアップを使用しない復元
ログ末尾のバックアップを必要としない復元シナリオには、次のものがあります。
前のログ バックアップ内のある時点にデータベースを復元する。
データベースを復元するときに、復元シーケンスのすべての RESTORE ステートメントで STOPAT、STOPATMARK、STOPBEFOREMARK のいずれかのオプションを指定する場合、ログ末尾のバックアップは不要です。
前の時点にデータベースを復元するには
Transact-SQL を使用して特定の時点に復元するための詳細については、「特定の時点まで復元する方法 (Transact-SQL)」、「マークされたトランザクションへの復旧」、または「ログ シーケンス番号 (LSN) への復旧」を参照してください。
SQL Server Management Studio を使用する場合の詳細については、「特定の時点まで復元する方法 (SQL Server Management Studio)」または「データベースをマークされたトランザクションに復元する方法 (SQL Server Management Studio)」を参照してください。
データベースのコピーを新しい場所に復元する。
データベースを復元するときに、別のサーバー インスタンスにデータベースを復元する場合に限り、同じデータベース名を使用できます。たとえば、データベース ミラーリング用のミラー データベースや、ログ配布用のセカンダリ データベースを作成する場合です。同一のサーバー インスタンス上でデータベースを移動する場合、そのデータベースには新しい名前を指定する必要があります。
データベースを新しい場所に復元するには
Transact-SQL を使用して、復元シーケンスのすべての RESTORE ステートメントで MOVE オプションを指定します。詳細については、「新しい場所と名前でデータベースを復元する方法 (Transact-SQL)」または「ファイルを新しい場所に復元する方法 (Transact-SQL)」を参照してください。
SQL Server Management Studio を使用して、[データベースの復元] ([オプション] ページ) の [復元先] で、各ファイルの新しい場所を指定します。詳細については、「データベースのバックアップを復元する方法 (SQL Server Management Studio)」を参照してください。
データベースを完全に置き換える (上書きする)。
注意 REPLACE オプションを使用した復元はほとんど使用されることはなく、熟練したデータベース管理者だけが十分な検討を経て使用するものです。詳細については、「REPLACE オプションの使用」を参照してください。
データベースを置き換えるには
Transact-SQL を使用して、RESTORE ステートメントで REPLACE オプションを指定します。
SQL Server Management Studio を使用して、[データベースの復元] ([オプション] ページ) の [復元先] で、各ファイルの新しい場所を指定します。詳細については、「データベースのバックアップを復元する方法 (SQL Server Management Studio)」を参照してください。
変更履歴
変更内容 |
---|
「ログの末尾のバックアップ」を更新して、"データベースがオフラインであり、開始していない場合" のログ末尾のバックアップに関する情報を修正しました。 |