SQL Server 데이터베이스를 지정 시간으로 복원(전체 복구 모델)Restore a SQL Server Database to a Point in Time (Full Recovery Model)

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목에서는 SQL Server 2017SQL Server 2017 또는 SQL Server Management StudioSQL Server Management Studio 을 사용하여 Transact-SQLTransact-SQL에서 데이터베이스를 지정 시간으로 복원하는 방법에 대해 설명합니다.This topic describes how to restore a database to a point in time in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. 이 항목에서는 전체 또는 대량 로그 복구 모델을 사용하는 SQL ServerSQL Server 데이터베이스와 관련된 내용을 다룹니다.This topic is relevant only for SQL ServerSQL Server databases that use the full or bulk-logged recovery models.

중요

대량 로그 복구 모델에서 로그 백업에 대량 로그 변경 내용이 있을 경우 해당 백업 내의 지점으로 지정 시간 복구를 수행할 수 없습니다.Under the bulk-logged recovery model, if a log backup contains bulk-logged changes, point-in-time recovery is not possible to a point within that backup. 이 경우에는 데이터베이스를 트랜잭션 로그 백업의 끝으로 복구해야 합니다.The database must be recovered to the end of the transaction log backup.

시작하기 전 주의 사항 Before You Begin

권장 사항 Recommendations

  • STANDBY를 사용하여 알 수 없는 지정 시간을 찾습니다.Use STANDBY to find unknown point in time.

  • 복원 순서의 이른 시간으로 지정 시간 지정Specify the point in time early in a restore sequence

보안 Security

사용 권한 Permissions

복원할 데이터베이스가 없으면 CREATE DATABASE 권한이 있어야 RESTORE를 실행할 수 있습니다.If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. 데이터베이스가 있으면 RESTORE 권한은 기본적으로 sysadmindbcreator 고정 서버 역할의 멤버와 데이터베이스의 소유자(dbo)에 설정됩니다. FROM DATABASE_SNAPSHOT 옵션의 경우 데이터베이스가 항상 있습니다.If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

멤버 자격 정보를 서버에서 항상 사용할 수 있는 역할에 RESTORE 권한이 제공됩니다.RESTORE permissions are given to roles in which membership information is always readily available to the server. 고정 데이터베이스 역할의 멤버 자격은 데이터베이스가 액세스 가능한 상태이며 손상되지 않은 경우에만 확인할 수 있는데, RESTORE 실행 시 데이터베이스가 항상 이러한 상태인 것은 아니므로 db_owner 고정 데이터베이스 역할의 멤버에게는 RESTORE 권한이 없습니다.Because fixed database role membership can be checked only when the database is accessible and undamaged, which is not always the case when RESTORE is executed, members of the db_owner fixed database role do not have RESTORE permissions.

SQL Server Management Studio 사용 Using SQL Server Management Studio

데이터베이스를 지정 시간으로 복원하려면To restore a database to a point in time

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진SQL Server Database Engine의 해당 인스턴스에 연결하고 서버 트리를 확장합니다.In Object Explorer, connect to the appropriate instance of the SQL Server 데이터베이스 엔진SQL Server Database Engine, and expand the server tree.

  2. 데이터베이스를 확장합니다.Expand Databases. 데이터베이스에 따라 사용자 데이터베이스를 선택하거나 시스템 데이터베이스를 확장한 다음 시스템 데이터베이스를 선택합니다.Depending on the database, either select a user database or expand System Databases, and then select a system database.

  3. 데이터베이스를 마우스 오른쪽 단추로 클릭하고 태스크를 가리킨 다음 복원을 가리키고 데이터베이스를 클릭합니다.Right-click the database, point to Tasks, point to Restore, and then click Database.

  4. 일반 페이지에서 원본 섹션을 사용하여 복원할 백업 집합의 원본과 위치를 지정합니다.On the General page, use the Source section to specify the source and location of the backup sets to restore. 다음 옵션 중 하나를 선택합니다.Select one of the following options:

    • 데이터베이스Database

      복원할 데이터베이스를 드롭다운 목록에서 선택합니다.Select the database to restore from the drop-down list. 목록에는 msdb 백업 기록에 따라 백업된 데이터베이스만 포함되어 있습니다.The list contains only databases that have been backed up according to the msdb backup history.

    참고

    백업을 다른 서버에서 가져온 경우 대상 서버에 지정한 데이터베이스에 대한 백업 기록 정보가 없습니다.If the backup is taken from a different server, the destination server will not have the backup history information for the specified database. 이 경우 장치 를 선택하여 복원할 파일이나 장치를 수동으로 지정합니다.In this case, select Device to manually specify the file or device to restore.

    • 장치Device

      찾아보기(...) 단추를 클릭하여 백업 장치 선택 대화 상자를 엽니다.Click the browse (...) button to open the Select backup devices dialog box. 백업 미디어 유형 상자에서 나열된 장치 유형 중 하나를 선택합니다.In the Backup media type box, select one of the listed device types. 백업 미디어 상자에 대해 하나 이상의 장치를 선택하려면 추가를 클릭합니다.To select one or more devices for the Backup media box, click Add.

      원하는 장치를 백업 미디어 목록 상자에 추가한 후 확인 을 클릭하여 일반 페이지로 돌아갑니다.After you add the devices you want to the Backup media list box, click OK to return to the General page.

      원본: 장치: 데이터베이스 목록 상자에서 복원할 데이터베이스의 이름을 선택합니다.In the Source: Device: Database list box, select the name of the database which should be restored.

      참고 이 목록은 장치 를 선택한 경우에만 사용할 수 있습니다.Note This list is only available when Device is selected. 선택한 장치에 백업이 있는 데이터베이스만 사용할 수 있습니다.Only databases that have backups on the selected device will be available.

  5. 대상 섹션의 데이터베이스 상자에는 복원할 데이터베이스의 이름이 자동으로 채워집니다.In the Destination section, the Database box is automatically populated with the name of the database to be restored. 데이터베이스의 이름을 변경하려면 데이터베이스 상자에 새 이름을 입력합니다.To change the name of the database, enter the new name in the Database box.

  6. 일정 을 클릭하여 백업 시간대 대화 상자에 액세스합니다.Click Timeline to access the Backup Timeline dialog box.

  7. 복원 위치 섹션에서 특정 날짜 및 시간을 클릭합니다.In the Restore to section, click Specific date and time.

  8. 날짜시간 상자 또는 슬라이더 막대를 사용하여 복원을 중지할 특정 날짜 및 시간을 지정합니다.Use either the Date and Time boxes or the slider bar to specify a specific date and time to where the restore should stop. 확인을 클릭합니다.Click OK.

    참고

    시간대 간격 상자를 사용하여 일정에 표시되는 시간을 변경합니다.Use the Timeline Interval box to change the amount of time displayed on the timeline.

  9. 특정 지정 시간을 지정한 후에는 데이터베이스 복구 관리자에서 해당 지정 시간에 복원해야 하는 백업만 복원에 사용할 백업 세트 선택 표의 복원 열에서 선택되도록 합니다.After you have specified a specific point in time, the Database Recovery Advisor ensures that only backups that are required for restoring to that point in time are selected in the Restore column of the Backup sets to restore grid. 이러한 선택된 백업은 지정 시간 복원에 필요한 권장 복원 계획을 구성합니다.These selected backups make up the recommended restore plan for your point-in-time restore. 지정 시간 복원 작업에는 선택된 백업만을 사용해야 합니다.You should use only the selected backups for your point-in-time restore operation.

    복원에 사용할 백업 세트 표의 열에 대한 자세한 내용은 데이터베이스 복원(일반 페이지)을 참조하세요.For information about the columns in the Backup sets to restore grid, see Restore Database (General Page). 데이터베이스 복구 관리자에 대한 자세한 내용은 복원 및 복구 개요(SQL Server)를 참조하세요.For information about the Database Recovery Advisor, see Restore and Recovery Overview (SQL Server).

  10. 상황에 따라 옵션 페이지의 복원 옵션 패널에서 다음 옵션 중 하나를 선택할 수 있습니다.On the Options page, in the Restore options panel, you can select any of the following options, if appropriate for your situation:

    • 기존 데이터베이스 덮어쓰기(WITH REPLACE)Overwrite the existing database (WITH REPLACE)

    • 복제 설정 유지(WITH KEEP_REPLICATION)Preserve the replication settings (WITH KEEP_REPLICATION)

    • 복원된 데이터베이스에 대한 액세스 제한(WITH RESTRICTED_USER)Restrict access to the restored database (WITH RESTRICTED_USER)

      이러한 옵션에 대한 자세한 내용은 데이터베이스 복원(옵션 페이지)을 참조하세요.For more information about these options, see Restore Database (Options Page).

  11. 복구 상태 상자에 대한 옵션을 선택합니다.Select an option for the Recovery state box. 이 상자에서 복원 작업 후 데이터베이스의 상태를 확인합니다.This box determines the state of the database after the restore operation.

    • RESTORE WITH RECOVERY 는 커밋되지 않은 트랜잭션을 롤백하여 데이터베이스를 사용 준비가 된 상태로 유지하는 기본 동작입니다.RESTORE WITH RECOVERY is the default behavior which leaves the database ready for use by rolling back the uncommitted transactions. 추가 트랜잭션 로그를 복원할 수 없습니다.Additional transaction logs cannot be restored. 필요한 모든 백업을 지금 복원하는 경우 이 옵션을 선택합니다.Select this option if you are restoring all of the necessary backups now.

    • RESTORE WITH NORECOVERY 는 데이터베이스를 비작동 상태로 유지하고 커밋되지 않은 트랜잭션을 롤백하지 않습니다.RESTORE WITH NORECOVERY which leaves the database non-operational, and does not roll back the uncommitted transactions. 추가 트랜잭션 로그를 복원할 수Additional transaction logs can be restored. 데이터베이스는 복구할 때까지 사용할 수 없습니다.The database cannot be used until it is recovered.

    • RESTORE WITH STANDBY 는 읽기 전용 모드로 데이터베이스를 유지합니다.RESTORE WITH STANDBY which leaves the database in read-only mode. 이 옵션은 커밋되지 않은 트랜잭션의 실행을 취소하지만, 복구 결과를 되돌릴 수 있도록 실행 취소 동작을 대기 파일에 저장합니다.It undoes uncommitted transactions, but saves the undo actions in a standby file so that recovery effects can be reverted.

      옵션에 대한 설명은 데이터베이스 복원(옵션 페이지)을 참조하세요.For descriptions of the options, see Restore Database (Options Page).

  12. 복원 전 비상 로그 백업 수행은 선택한 지정 시간에 필요한 경우에 선택됩니다.Take tail-log backup before restore will be selected if it is necessary for the point in time that you have selected. 이 설정을 수정할 필요는 없지만 필요하지 않은 경우에도 비상 로그를 백업할 수 있습니다.You do not need to modify this setting, but you can choose to backup the tail of the log even if it is not required.

  13. 데이터베이스에 대한 활성 연결이 있으면 복원 작업이 실패할 수 있습니다.Restore operations may fail if there are active connections to the database. 기존 연결 닫기 옵션을 선택하여 Management StudioManagement Studio 와 데이터베이스 간의 모든 활성 연결을 닫습니다.Check the Close existing connections option to ensure that all active connections between Management StudioManagement Studio and the database are closed. 이 확인란을 선택하면 복원 작업을 수행하기 전에 데이터베이스가 단일 사용자 모드로 설정되고 복원 작업이 완료될 때 데이터베이스가 다중 사용자 모드로 설정됩니다.This check box sets the database to single user mode before performing the restore operations, and sets the database to multi-user mode when complete.

  14. 각 복원 작업 사이에 확인 메시지를 표시하려면 각 백업 복원 전에 확인 을 선택합니다.Select Prompt before restoring each backup if you wish to be prompted between each restore operation. 데이터베이스가 크고 복원 작업의 상태를 모니터링하려는 경우가 아니면 이 옵션은 일반적으로 필요하지 않습니다.This is not usually necessary unless the database is large and you wish to monitor the status of the restore operation.

Transact-SQL 사용 Using Transact-SQL

Before you beginBefore you begin

지정된 시간은 항상 로그 백업에서 복원됩니다.A specified time is always restored from a log backup. 복원 순서의 모든 RESTORE LOG 문에서 동일한 STOPAT 절에 대상 시간이나 트랜잭션을 지정해야 합니다.In every RESTORE LOG statement of the restore sequence, you must specify your target time or transaction in an identical STOPAT clause. 지정 시간 복원을 수행하려면 먼저 종료 지점이 대상 복원 시간보다 빠른 전체 데이터베이스 백업을 복원해야 합니다.As a prerequisite to a point-in-time restore, you must first restore a full database backup whose end point is earlier than your target restore time. 대상 지정 시간이 포함된 로그 백업까지의 모든 후속 로그 백업을 복원하는 동안 이 전체 데이터베이스 백업은 가장 최근 전체 데이터베이스 백업보다 더 오래된 버전일 수 있습니다.That full database backup can be older than the most recent full database backup as long as you then restore every subsequent log backup, up to and including the log backup that contains your target point in time.

복원할 데이터베이스를 손쉽게 확인하려면 선택적으로 RESTORE DATABASE 문에 WITH STOPAT 절을 지정하여 데이터 백업이 지정된 대상 시간에 비해 너무 최근인 경우 오류가 발생하도록 하면 됩니다.To help you identify which database backup to restore, you can optionally specify your WITH STOPAT clause in your RESTORE DATABASE statement to raise an error if a data backup is too recent for the specified target time. 그러나 데이터 백업에 대상 시간이 포함된 경우에도 항상 전체 데이터 백업이 복원됩니다.The complete data backup is always restored, even if it contains the target time.

기본 Transact-SQLTransact-SQL 구문Basic Transact-SQLTransact-SQL syntax

RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY…RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY…

복구 지점은 time 에 지정된 datetime값 또는 그전에 발생한 최근 트랜잭션 커밋입니다.The recovery point is the latest transaction commit that occurred at or before the datetime value that is specified by time.

특정 시점 이전에 수정한 내용만 복원하려면 복원하는 각 백업에 대해 WITH STOPAT = time 을 지정합니다.To restore only the modifications that were made before a specific point in time, specify WITH STOPAT = time for each backup you restore. 이렇게 하면 대상 시간을 지나치지 않게 됩니다.This makes sure that you do not go past the target time.

데이터베이스를 지정 시간으로 복원하려면To restore a database to a point in time

참고

이 절차에 대한 예는 이 섹션의 뒷부분에 나오는 예제(Transact-SQL)을 참조하세요.For an example of this procedure, see Example (Transact-SQL), later in this section.

  1. 데이터베이스를 복원할 서버 인스턴스에 연결합니다.Connect to server instance on which you want to restore the database.

  2. NORECOVERY 옵션을 사용하여 RESTORE DATABASE 문을 실행합니다.Execute the RESTORE DATABASE statement using the NORECOVERY option.

    참고

    부분 복원 순서에서 FILESTREAM 파일 그룹이 제외될 경우 지정 시간 복원은 지원되지 않습니다.If a partial restore sequence excludes any FILESTREAM filegroup, point-in-time restore is not supported. 복원 순서를 강제로 계속할 수 있지만You can force the restore sequence to continue. RESTORE 문에서 누락된 FILESTREAM 파일 그룹은 복원되지 않습니다.However the FILESTREAM filegroups that are omitted from your RESTORE statement can never be restored. 지정 시간 복원을 강제로 수행하려면 후속 RESTORE LOG 문에도 지정해야 하는 STOPAT, STOPATMARK 또는 STOPBEFOREMARK 옵션과 함께 CONTINUE_AFTER_ERROR 옵션을 지정합니다.To force a point-in-time restore, specify the CONTINUE_AFTER_ERROR option together with the STOPAT, STOPATMARK, or STOPBEFOREMARK option, which you must also specify in your subsequent RESTORE LOG statements. CONTINUE_AFTER_ERROR를 지정하면 부분 복원 순서가 성공하고 FILESTREAM 파일 그룹이 복구 불가능한 상태가 됩니다.If you specify CONTINUE_AFTER_ERROR, the partial restore sequence succeeds and the FILESTREAM filegroup becomes unrecoverable.

  3. 데이터베이스를 복구하지 않고 마지막 전체 데이터베이스 백업과 마지막 차등 데이터베이스 백업(있는 경우)을 복원합니다(RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).Restore the last differential database backup, if any, without recovering the database (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  4. 로그 복원을 중지할 시간을 지정하여 각 트랜잭션 로그 백업을 만들어진 순서대로 적용합니다(RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT=time, RECOVERY).Apply each transaction log backup in the same sequence in which they were created, specifying the time at which you intend to stop restoring log (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT=time, RECOVERY).

    참고

    RECOVERY 및 STOPAT 옵션.The RECOVERY and STOPAT options. 지정된 시간이 트랜잭션 로그에서 수용하는 시간을 초과하는 경우처럼 요청한 시간이 트랜잭션 로그 백업에 포함되지 않을 경우 경고가 생성되고 데이터베이스는 복구되지 않은 상태로 남습니다.If the transaction log backup does not contain the requested time (for example, if the time specified is beyond the end of the time covered by the transaction log), a warning is generated and the database remains unrecovered.

예제(Transact-SQL) Example (Transact-SQL)

다음 예에서는 12:00 AM , April 15, 2020 상태로 데이터베이스를 복원하고 여러 로그 백업이 연관된 복원 작업을 보여 줍니다.The following example restores a database to its state as of 12:00 AM on April 15, 2020 and shows a restore operation that involves multiple log backups. 백업 장치 AdventureWorksBackups에서 복원할 전체 데이터베이스 백업은 해당 장치의 세 번째 백업 세트(FILE = 3)이고, 첫 번째 로그 백업은 네 번째 백업 세트(FILE = 4)이고, 두 번째 로그 백업은 다섯 번째 백업 세트(FILE = 5)입니다.On the backup device, AdventureWorksBackups, the full database backup to be restored is the third backup set on the device (FILE = 3), the first log backup is the fourth backup set (FILE = 4), and the second log backup is the fifth backup set (FILE = 5).

중요

AdventureWorks2012AdventureWorks2012 데이터베이스는 단순 복구 모델을 사용합니다.The AdventureWorks2012AdventureWorks2012 database uses the simple recovery model. 로그 백업을 허용하기 위해 전체 데이터베이스를 백업하기 전에 ALTER DATABASE AdventureWorks SET RECOVERY FULL을 사용하여 전체 복구 모델을 사용하도록 데이터베이스를 설정했습니다.To permit log backups, before taking a full database backup, the database was set to use the full recovery model, using ALTER DATABASE AdventureWorks SET RECOVERY FULL.

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  

RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  

RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  

관련 항목:See Also

backupset(Transact-SQL) backupset (Transact-SQL)
RESTORE(Transact-SQL) RESTORE (Transact-SQL)
RESTORE HEADERONLY(Transact-SQL) RESTORE HEADERONLY (Transact-SQL)