표시된 트랜잭션이 포함된 관련 데이터베이스 복구Recovery of Related Databases That Contain Marked Transaction

이 항목에서는 표시된 트랜잭션을 포함하며 전체 복구 모델 또는 대량 로그 복구 모델을 사용하는 데이터베이스와 관련된 내용을 다룹니다.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테이블에 행이 삽입됩니다.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).

명명된 표시를 트랜잭션 로그에 삽입하는 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)