전체 데이터베이스 복원(전체 복구 모델)Complete Database Restores (Full Recovery Model)

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

전체 데이터베이스 복원의 목적은 전체 데이터베이스를 복원하는 것입니다.In a complete database restore, the goal is to restore the whole database. 복원하는 동안 전체 데이터베이스는 오프라인 상태가 됩니다.The whole database is offline for the duration of the restore. 데이터베이스의 일부를 온라인에 연결하기 전에 데이터베이스의 모든 부분의 지정 시간이 같고 커밋되지 않은 트랜잭션이 없는 일치하는 지점으로 모든 데이터를 복구합니다.Before any part of the database can come online, all data is recovered to a consistent point in which all parts of the database are at the same point in time and no uncommitted transactions exist.

전체 복구 모델에서는 데이터 백업이나 백업을 복원한 후, 이후의 모든 트랜잭션 로그 백업을 복원한 다음 데이터베이스를 복구해야 합니다.Under the full recovery model, after you restore your data backup or backups, you must restore all subsequent transaction log backups and then recover the database. 이러한 로그 백업 중 하나의 특정 복구 지점 으로 데이터베이스를 복원할 수 있습니다.You can restore a database to a specific recovery point within one of these log backups. 복구 지점은 특정 날짜 및 시간, 표시된 트랜잭션 또는 LSN(로그 시퀀스 번호)일 수 있습니다.The recovery point can be a specific date and time, a marked transaction, or a log sequence number (LSN).

데이터베이스를 복원할 경우, 특히 전체 복구 모델 또는 대량 로그 복구 모델에서는 단일 복원 순서를 사용해야 합니다.When restoring a database, particularly under the full recovery model or bulk-logged recovery model, you should use a single restore sequence. 복원 순서 는 하나 이상의 복원 단계를 통해 데이터를 이동시키는 하나 이상의 복원 작업으로 구성됩니다.A restore sequence consists of one or more restore operations that move data through one or more of the phases of restore.

중요

알 수 없거나 신뢰할 수 없는 출처의 데이터베이스는 연결 또는 복원하지 않는 것이 좋습니다.We recommend that you do not attach or restore databases from unknown or untrusted sources. 이러한 데이터베이스에 포함된 악성 코드가 의도하지 않은 Transact-SQLTransact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류가 발생할 수 있습니다.These databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. 알 수 없거나 신뢰할 수 없는 소스의 데이터베이스를 사용하기 전에 비프로덕션 서버의 데이터베이스에서 DBCC CHECKDB 를 실행하여 데이터베이스에서 코드(예: 저장 프로시저 또는 다른 사용자 정의 코드)를 시험해 보세요.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

항목 내용In this Topic:

참고

이전 버전 SQL ServerSQL Server의 백업 지원에 대한 자세한 내용은 RESTORE(Transact-SQL)의 "호환성 지원" 섹션을 참조하세요.For information about support for backups from earlier versions of SQL ServerSQL Server, see the "Compatibility Support" section of RESTORE (Transact-SQL).

오류 지점으로 데이터베이스 복원Restoring a Database to the Point of Failure

일반적으로 실패 지점으로 데이터베이스를 복구하는 작업에는 다음의 기본 단계가 포함됩니다.Typically, recovering a database to the point of failure involves the following basic steps:

  1. 활성 트랜잭션 로그(비상 로그)를 백업합니다.Back up the active transaction log (known as the tail of the log). 이렇게 하면 비상 로그 백업이 만들어집니다.This creates a tail-log backup. 활성 트랜잭션 로그를 사용할 수 없을 때 해당 로그 부분의 모든 트랜잭션이 손실됩니다.If the active transaction log is unavailable, all transactions in that part of the log are lost.

    중요

    대량 로그 복구 모델에서 대량 로그 작업이 포함된 로그를 백업하려면 데이터베이스의 모든 데이터 파일에 대한 액세스 권한이 있어야 합니다.Under the bulk-logged recovery model, backing up any log that contains bulk-logged operations requires access to all data files in the database. 데이터 파일에 액세스할 수 없는 경우 트랜잭션 로그를 백업할 수 없습니다.If the data files cannot be accessed, the transaction log cannot be backed up. 이 경우 가장 최근의 로그 백업 이후 변경된 모든 내용을 수동으로 다시 실행해야 합니다.In that case, you have to manually redo all changes that were made since the most recent log backup.

    자세한 내용은 비상 로그 백업(SQL Server)을 참조하세요.For more information, see Tail-Log Backups (SQL Server).

  2. 데이터베이스를 복구하지 않고 가장 최근의 전체 데이터베이스 백업을 복원합니다(RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).Restore the most recent full database backup without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  3. 차등 백업이 있는 경우 데이터베이스를 복구하지 않고 가장 최근의 차등 백업을 복원합니다(RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).If differential backups exist, restore the most recent one without recovering the database (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

    가장 최근의 차등 백업을 복원하면 복원해야 하는 로그 백업 수를 줄일 수 있습니다.Restoring the most recent differential backup reduces the number of log backups that must be restored.

  4. 복원한 백업 이후 첫 번째 트랜잭션 로그 백업부터 시작하여 NORECOVERY의 순서로 로그를 복원합니다.Starting with the first transaction log backup that was created after the backup you just restored, restore the logs in sequence with NORECOVERY.

  5. 데이터베이스를 복구합니다(RESTORE DATABASE database_name WITH RECOVERY).Recover the database (RESTORE DATABASE database_name WITH RECOVERY). 또는 이 단계를 마지막 로그 백업 복원과 결합할 수도 있습니다.Alternatively, this step can be combined with restoring the last log backup.

    다음 그림은 이 복원 순서를 보여 줍니다.The following illustration shows this restore sequence. 오류가 발생한 후(1) 비상 로그 백업이 생성됩니다(2).After a failure occurs (1), a tail-log backup is created (2). 그런 다음 데이터베이스가 오류 지점으로 복원됩니다.Next, the database is restored to the point of the failure. 이 과정에는 데이터베이스 백업 및 후속 차등 백업을 복원하고, 비상 로그 백업을 포함하여 차등 백업 이후에 생성된 모든 로그 백업을 복원하는 작업이 포함됩니다.This involves restoring a database backup, a subsequent differential backup, and every log backup taken after the differential backup, including the tail-log backup.

    실패 시간으로 전체 데이터베이스 복원Complete database restore to the time of a failure

참고

데이터베이스 백업을 다른 서버 인스턴스로 복원할 경우 백업 및 복원으로 데이터베이스 복사를 참조하세요.When you restore a database backup onto a different server instance, see Copy Databases with Backup and Restore.

기본 Transact-SQL RESTORE 구문Basic Transact-SQL RESTORE Syntax

이전 그림의 복원 순서에 대한 기본 RESTORE Transact-SQLTransact-SQL 구문은 다음과 같습니다.The basic RESTORE Transact-SQLTransact-SQL syntax for the restore sequence in the preceding illustration is as follows:

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY;RESTORE LOG database FROM log_backup WITH NORECOVERY;

    각 추가 로그 백업에 대해 이 복원 로그 단계를 반복합니다.Repeat this restore-log step for each additional log backup.

  4. RESTORE DATABASE database WITH RECOVERY;RESTORE DATABASE database WITH RECOVERY;

예: 오류 지점으로 복구(Transact-SQL)Example: Recovering to the Point of Failure (Transact-SQL)

다음 Transact-SQLTransact-SQL 예에서는 복원 순서에서 오류 지점으로 데이터베이스를 복원하는 필수 옵션을 보여 줍니다.The following Transact-SQLTransact-SQL example shows the essential options in a restore sequence that restores the database to the point of failure. 이 예에서는 데이터베이스의 비상 로그 백업을 만듭니다.The example creates a tail-log backup of the database. 다음으로 전체 데이터베이스 백업 및 로그 백업을 복원한 다음 비상 로그 백업을 복원합니다.Next, the example restores a full database backup and log backup and then restores the tail-log backup. 이 예의 경우 별도의 마지막 단계에서 데이터베이스를 복구합니다.The example recovers the database in a separate, final step.

참고

이 예에서는 전체 데이터베이스 백업(SQL Server)의 "호환성 지원" 섹션을 참조하세요.This example uses a database backup and log backup that is created in the "Using Database Backups Under the Full Recovery Model" section in Full Database Backups (SQL Server). AdventureWorks2012AdventureWorks2012 예제 데이터베이스는 데이터베이스 백업 전에 전체 복구 모델을 사용하도록 설정되었습니다.Before the database backup, the AdventureWorks2012AdventureWorks2012 sample database was set to use the full recovery model.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2012   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  

--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  

--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2012   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;  
GO  

데이터베이스를 로그 백업 내 지점으로 복원Restoring a Database to a Point Within a Log Backup

전체 복구 모델에서, 전체 데이터베이스 복원은 일반적으로 지정 시간, 표시된 트랜잭션 또는 로그 백업 내 LSN으로 복구될 수 있습니다.Under the full recovery model, a complete database restore can usually be recovered to a point of time, a marked transaction, or an LSN within a log backup. 그러나 대량 로그 복구 모델에서 로그 백업에 대량 로그 변경 내용이 있을 경우 지정 시간 복구를 사용할 수 없습니다.However, under the bulk-logged recovery model, if the log backup contains bulk-logged changes, point-in-time recovery is not possible.

예제 지정 시간 복원 시나리오Sample Point-in-Time Restore Scenarios

다음 예에서는 매일 자정에 전체 데이터베이스 백업을 만들고 월요일부터 토요일까지 정시에 차등 데이터베이스 백업을 만들며 하루 종일 10분마다 트랜잭션 로그 백업을 만드는 업무용 데이터베이스 시스템이 있다고 가정합니다.The following example assumes a mission-critical database system for which a full database backup is created daily at midnight, a differential database backup is created on the hour, Monday through Saturday, and transaction log backups are created every 10 minutes throughout the day. 데이터베이스를 수요일 5:19 A.M. 상태로 복원하려면To restore the database to the state is was in at 5:19 A.M. 다음을 수행합니다.Wednesday, do the following:

  1. 화요일 자정에 만든 전체 데이터베이스 백업을 복원합니다.Restore the full database backup that was created Tuesday at midnight.

  2. 수요일 5:00 A.M.에 만든 차등 데이터베이스 백업을Restore the differential database backup that was created at 5:00 A.M. 적용합니다.on Wednesday.

  3. 수요일 5:10 A.M.에 만든 트랜잭션 로그 백업을Apply the transaction log backup that was created at 5:10 A.M. 적용합니다.on Wednesday.

  4. 복구 프로세스에서 5:19 A.M. 전에 발생한 트랜잭션만 적용하도록 지정하여 수요일 5:20 A.M.에Apply the transaction log backup that was created 5:20 A.M. 만든 트랜잭션 로그 백업을 적용합니다.on Wednesday, specifying that the recovery process applies only to transactions that occurred before 5:19 A.M.

    또는 데이터베이스를 목요일 3:04 A.M.의 상태로 복원해야 하는데Alternatively, if the database needs to be restored to its state at 3:04 A.M. 목요일 3:00 A.M.에 만든 차등 데이터베이스 백업을 사용할 수 없으면Thursday, but the differential database backup that was created at 3:00 A.M. 다음을 수행합니다.Thursday is unavailable, do the following:

  5. 수요일 자정에 만든 데이터베이스 백업을 복원합니다.Restore the database backup that was created Wednesday at midnight.

  6. 목요일 2:00 A.M.에 만든 차등 데이터베이스 백업을Restore the differential database backup that was created at 2:00 A.M. 적용합니다.on Thursday.

  7. 목요일 2:10 A.M.부터 3:00 A.M.까지 만든 트랜잭션 로그 백업을Apply all the transaction log backups created from 2:10 A.M. 모두to 3:00 A.M. 적용합니다.on Thursday.

  8. 목요일 3:04 A.M.에 복구 프로세스를 중지하여 3:10 A.M.에 만든Apply the transaction log backup that was created at 3:10 A.M. 트랜잭션 로그 백업을 적용합니다.on Thursday, stopping the recovery process at 3:04 A.M.

참고

지정 시간으로 복원하는 예제를 보려면 SQL Server 데이터베이스를 지정 시간으로 복원(전체 복구 모델)의 "호환성 지원" 섹션을 참조하세요.For an example of a point-in-time restore, see Restore a SQL Server Database to a Point in Time (Full Recovery Model).

관련 태스크Related Tasks

전체 데이터베이스 백업을 복원하려면To restore a full database backup

참고 항목See Also

RESTORE(Transact-SQL) RESTORE (Transact-SQL)
BACKUP(Transact-SQL) BACKUP (Transact-SQL)
트랜잭션 로그 백업 적용(SQL Server) Apply Transaction Log Backups (SQL Server)
sp_addumpdevice(Transact-SQL) sp_addumpdevice (Transact-SQL)
전체 데이터베이스 백업(SQL Server) Full Database Backups (SQL Server)
차등 백업(SQL Server) Differential Backups (SQL Server)
백업 개요(SQL Server) Backup Overview (SQL Server)
복원 및 복구 개요(SQL Server)Restore and Recovery Overview (SQL Server)