マークされたトランザクションを含む関連データベースの復旧

適用対象:SQL Server

このトピックは、マークされたトランザクションが含まれており、完全復旧モデルまたは一括ログ復旧モデルを使用するデータベースのみに関連しています。

特定の回復ポイントまでの復元するための要件については、「SQL Server データベースを特定の時点に復元する (完全復旧モデル)」を参照してください。

SQL Server では、トランザクション ログに名前付きマークを挿入することによって、その特定のマークの時点に復旧するサポートをします。 ログ マークはトランザクションに固有で、関連するトランザクションがコミットされる場合のみ挿入されます。 このため、マークを特定の操作に結び付けることが可能で、この操作を含む時点または含まない時点に復旧できます。

名前付きマークをトランザクション ログに挿入する前に、次の点を考慮してください。

  • トランザクション マークはログ領域を使用するので、データベース復旧ストラテジにおいて重要な役割を果たすトランザクションだけに使用する必要があります。

  • マークされたトランザクションのコミットが完了したら、 msdblogmarkhistoryテーブルに 1 行が挿入されます。

  • マークされたトランザクションが同じデータベース サーバーまたは異なるサーバー上の複数のデータベースと関係している場合は、影響を受けたすべてのデータベースのログにそのマークが記録される必要があります。 詳細については、「マークされたトランザクションを使用して関連するデータベースを一貫した状態に復旧する方法 (完全復旧モデル)」を参照してください。

トランザクションをマークする方法の詳細については、「マークされたトランザクションを使用して関連するデータベースを一貫した状態に復旧する方法 (完全復旧モデル)」を参照してください。

名前付きマークをトランザクション ログに挿入するための Transact-SQL 構文

トランザクション ログにマークを挿入するには、 BEGIN TRANSACTION ステートメントと WITH MARK [description] 句を使用します。 マークの名前はトランザクションの名前と同じです。 省略可能な description は、マークの名前ではなく、マークの説明テキストです。 たとえば、次の BEGIN TRANSACTION ステートメントで作成されるトランザクションとマークは、いずれも名前が Tx1になります。

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'    

トランザクション ログには、マーク名 (トランザクション名)、説明、データベース、ユーザー、 datetime 情報、および LSN (ログ シーケンス番号) が記録されます。 マーク名に datetime 情報を使用することで、マークが一意に識別されます。

複数のデータベースに関係するトランザクションにマークを挿入する方法については、「マークされたトランザクションを使用して関連するデータベースを一貫した状態に復旧する方法 (完全復旧モデル)」を参照してください。

特定のマークの時点へ復旧するための Transact-SQL 構文

RESTORE LOG ステートメントを使用してマークされたトランザクションを対象にする場合は、次のいずれかの句を使用して、マーク位置またはその直前で停止できます。

  • WITH STOPATMARK = '<mark_name>' 句を使用して、マークされたトランザクションが回復ポイントであることを指定します。

    STOPATMARK では、マークまでロールフォワードされます。ロールフォワードには、マークされたトランザクションも含まれます。

  • WITH STOPBEFOREMARK = '<mark_name>' 句を使用して、マークの直前のログ レコードが回復ポイントであることを指定します。

    STOPBEFOREMARK は、マークまでロールフォワードし、マークされたトランザクションをロールフォワードの対象から除外します。

STOPATMARK オプションと STOPBEFOREMARK オプションは両方とも、省略可能な AFTER datetime 句をサポートしています。 datetime を使用する場合、マーク名を一意にする必要はありません。

AFTER datetime の指定を省略すると、指定した名前を持つ最初のマークでロールフォワードが停止します。 AFTER datetime を指定すると、 datetime以降の指定した名前を持つ最初のマークでロールフォワードが停止します。

時間を指定したすべての復元操作と同様に、一括ログ記録の対象となる操作がデータベースで実行されている場合は、マーク時点に復旧できません。

マークされたトランザクションまで復旧するには

マークされたトランザクションへのデータベースの復元 (SQL Server Management Studio)

RESTORE (Transact-SQL)

ログ バックアップの準備

この例の場合、関連データベースに適切なバックアップ方法は次のようになります。

  1. 両方のデータベースで完全復旧モデルを使用します。

  2. 各データベースの完全バックアップを作成します。

    データベースは順次と同時の両方でバックアップできます。

  3. トランザクション ログをバックアップする前に、すべてのデータベースで実行されるトランザクションにマークを付けます。 マークされたトランザクションを作成する方法の詳細については、「マークされたトランザクションを使用して関連するデータベースを一貫した状態に復旧する方法 (完全復旧モデル)」を参照してください。

  4. 各データベースでトランザクション ログをバックアップします。

マークされたトランザクションへのデータベースの復旧

バックアップを復元するには

  1. 可能であれば、壊れていないデータベースの ログ末尾のバックアップ を作成します。

  2. 各データベースの最新の完全バックアップを復元します。

  3. すべてのトランザクション ログ バックアップで使用できるマークされた最新のトランザクションを識別します。 この情報は、各サーバー上の msdb データベースの logmarkhistory テーブルに格納されています。

  4. そのマークが格納されているすべての関連データベースのログ バックアップを識別します。

  5. それぞれのログ バックアップを復元し、マーク付きトランザクションで停止します。

  6. 各データベースを復旧します。