マークされたトランザクションを含む関連データベースの復旧Recovery of Related Databases That Contain Marked Transaction

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックは、マークされたトランザクションが含まれており、完全復旧モデルまたは一括ログ復旧モデルを使用するデータベースのみに関連しています。This topic is relevant only for databases that contain marked transactions and that use the full or bulk-logged recovery models.

特定の復旧ポイントまでの復元するための要件については、「 SQL Server データベースを特定の時点に復元する (完全復旧モデル)」を参照してください。For information about the requirements for restoring to a specific recovery point, see Restore a SQL Server Database to a Point in Time (Full Recovery Model).

SQL ServerSQL Server トランザクション ログに名前付きマークを挿入することによって、その特定のマークの時点に復旧できます。supports inserting named marks into the transaction log to allow recovery to that specific mark. ログ マークはトランザクションに固有で、関連するトランザクションがコミットされる場合のみ挿入されます。Log marks are transaction specific and are inserted only if their associated transaction commits. このため、マークを特定の操作に結び付けることが可能で、この操作を含む時点または含まない時点に復旧できます。As a result, marks can be tied to specific work, and you can recover to a point that includes or excludes this work.

名前付きマークをトランザクション ログに挿入する前に、次の点を考慮してください。Before you insert named marks into the transaction log, consider the following:

  • トランザクション マークはログ領域を使用するので、データベース復旧ストラテジにおいて重要な役割を果たすトランザクションだけに使用する必要があります。Because transaction marks consume log space, use them only for transactions that play a significant role in the database recovery strategy.

  • マークされたトランザクションのコミットが完了したら、 msdblogmarkhistoryテーブルに 1 行が挿入されます。After a marked transaction commits, a row is inserted in the logmarkhistory table in msdb.

  • マークされたトランザクションが同じデータベース サーバーまたは異なるサーバー上の複数のデータベースと関係している場合は、影響を受けたすべてのデータベースのログにそのマークが記録される必要があります。If a marked transaction spans multiple databases on the same database server or on different servers, the marks must be recorded in the logs of all the affected databases. 詳細については、「 マークされたトランザクションを使用して関連するデータベースを一貫した状態に復元する方法 (完全復旧モデル)」を参照してください。For more information, see Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

注意

トランザクションをマークする方法の詳細については、「 マークされたトランザクションを使用して関連するデータベースを一貫した状態に復元する方法 (完全復旧モデル)」を参照してください。For information about how to mark transactions, see Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

名前付きマークをトランザクション ログに挿入するための Transact-SQL 構文Transact-SQL Syntax for Inserting Named Marks into a Transaction Log

トランザクション ログにマークを挿入するには、 BEGIN TRANSACTION ステートメントと WITH MARK [description] 句を使用します。To insert marks into the transaction logs, use the BEGIN TRANSACTION statement and the WITH MARK [description] clause. マークの名前はトランザクションの名前と同じです。The mark is named the same as the transaction. 省略可能な description は、マークの名前ではなく、マークの説明テキストです。The optional description is a textual description of the mark, not the mark name. たとえば、次の BEGIN TRANSACTION ステートメントで作成されるトランザクションとマークは、いずれも名前が Tx1になります。For example, the name of both the transaction and the mark that is created in the following BEGIN TRANSACTION statement is Tx1:

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

トランザクション ログには、マーク名 (トランザクション名)、説明、データベース、ユーザー、 datetime 情報、および LSN (ログ シーケンス番号) が記録されます。The transaction log records the mark name (transaction name), description, database, user, datetime information, and the log sequence number (LSN). マーク名に datetime 情報を使用することで、マークが一意に識別されます。The datetime information is used with the mark name to uniquely identify the mark.

複数のデータベースに関係するトランザクションにマークを挿入する方法については、「 マークされたトランザクションを使用して関連するデータベースを一貫した状態に復元する方法 (完全復旧モデル)」を参照してください。For information about how to insert a mark into a transaction that spans multiple databases, see Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

特定のマークの時点へ復旧するための Transact-SQL 構文Transact-SQL Syntax for Recovering to a Mark

マークされたトランザクションを RESTORE LOG ステートメントで指定する場合、次のいずれかの句を使用して、マークに到達した時点またはマークの直前まで復旧できます。When you target a marked transaction by using aRESTORE LOGstatement, you can use one the following clauses to stop at or immediately before the mark:

  • WITH STOPATMARK = ' <mark_name> ' 句を使用して、マークされたトランザクションが復旧ポイントであることを指定します。Use the WITH STOPATMARK = '<mark_name>' clause to specify that the marked transaction is the recovery point.

    STOPATMARK では、マークまでロールフォワードされます。ロールフォワードには、マークされたトランザクションも含まれます。STOPATMARK rolls forward to the mark and includes the marked transaction in the roll forward.

  • WITH STOPBEFOREMARK = ' <mark_name> ' 句を使用して、マークの直前のログ レコードが復旧ポイントであることを指定します。Use the WITH STOPBEFOREMARK = '<mark_name>' clause to specify that the log record that is immediately before the mark is the recovery point.

    STOPBEFOREMARK では、マークまでロールフォワードされますが、マークされたトランザクションは含まれません。STOPBEFOREMARK rolls forward to the mark and excludes marked the transaction from the roll forward.

STOPATMARK オプションと STOPBEFOREMARK オプションは両方とも、省略可能な AFTER datetime 句をサポートしています。The STOPATMARK and STOPBEFOREMARK options both support an optional AFTER datetime clause. datetime を使用する場合、マーク名を一意にする必要はありません。When datetime is used, mark names do not have to be unique.

AFTER datetime の指定を省略すると、指定した名前を持つ最初のマークでロールフォワードが停止します。If AFTER datetime is omitted, roll forward stops at the first mark that has the specified name. AFTER datetime を指定すると、 datetime以降の指定した名前を持つ最初のマークでロールフォワードが停止します。If AFTER datetime is specified, roll forward stops at the first mark that has the specified name, exactly at or after datetime.

注意

時間を指定したすべての復元操作と同様に、一括ログ記録の対象となる操作がデータベースで実行されている場合は、マーク時点に復旧できません。As in all point-in-time restore operations, recovering to a mark is disallowed when the database is undergoing operations that are bulk-logged.

マークされたトランザクションまで復旧するにはTo restore to a marked transaction

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

RESTORE (Transact-SQL)RESTORE (Transact-SQL)

ログ バックアップの準備Preparing the Log Backups

この例の場合、関連データベースに適切なバックアップ方法は次のようになります。For this example, an appropriate backup strategy for these related databases would be the following:

  1. 両方のデータベースで完全復旧モデルを使用します。Use the full recovery model for both databases.

  2. 各データベースの完全バックアップを作成します。Create a full backup of each database.

    データベースは順次と同時の両方でバックアップできます。The databases can be backed up sequentially or simultaneously.

  3. トランザクション ログをバックアップする前に、すべてのデータベースで実行されるトランザクションにマークを付けます。Before backing up the transaction log, mark a transaction that executes in all databases. マークされたトランザクションを作成する方法の詳細については、「 マークされたトランザクションを使用して関連するデータベースを一貫した状態に復元する方法 (完全復旧モデル)」を参照してください。For information about how to create the marked transactions, see Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

  4. 各データベースでトランザクション ログをバックアップします。Back up the transaction log on each database.

マークされたトランザクションへのデータベースの復旧Recovering the Database to a Marked Transaction

バックアップを復元するにはTo restore the backup

  1. 可能であれば、壊れていないデータベースの ログ末尾のバックアップ を作成します。Create tail-log backups of the undamaged databases, if possible.

  2. 各データベースの最新の完全バックアップを復元します。Restore the most recent full database backup of each database.

  3. すべてのトランザクション ログ バックアップで使用できるマークされた最新のトランザクションを識別します。Identify the most recent marked transaction that is available in all of the transaction log backups. この情報は、各サーバー上の msdb データベースの logmarkhistory テーブルに格納されています。This information is stored in the logmarkhistory table in the msdb database on each server.

  4. そのマークが格納されているすべての関連データベースのログ バックアップを識別します。Identify the log backups for all related databases that contain this mark.

  5. それぞれのログ バックアップを復元し、マーク付きトランザクションで停止します。Restore each log backup, stopping at the marked transaction.

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

参照See Also

BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
トランザクション ログ バックアップの適用 (SQL Server) Apply Transaction Log Backups (SQL Server)
マークされたトランザクションを使用して関連するデータベースを一貫した状態に復元する方法 (完全復旧モデル) Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model)
復元と復旧の概要 (SQL Server) Restore and Recovery Overview (SQL Server)
SQL Server データベースを特定の時点に復元する (完全復旧モデル) Restore a SQL Server Database to a Point in Time (Full Recovery Model)
復元シーケンスの計画と実行 (完全復旧モデル)Plan and Perform Restore Sequences (Full Recovery Model)