데이터베이스를 데이터베이스 스냅샷으로 되돌리기

적용 대상:SQL Server

온라인 데이터베이스의 데이터가 손상되면 경우에 따라 데이터베이스를 손상 이전의 데이터베이스 스냅샷으로 되돌리는 것이 백업에서 데이터베이스를 복원하는 적절한 대안이 될 수 있습니다. 예를 들어 데이터베이스 되돌리기 작업은 테이블 삭제와 같은 최근의 심각한 사용자 오류 발생 전의 상황으로 돌아가는 데 유용할 수 있습니다. 그러나 스냅샷을 만든 후에 수행한 모든 변경 내용은 손실됩니다.

시작하기 전에

제한 사항

다음과 같은 경우에는 되돌리기가 지원되지 않습니다.

  • 데이터베이스에 대한 여러 스냅샷이 있습니다. 되돌리기의 경우 되돌리려는 데이터베이스에 대한 하나의 스냅샷만 있어야 합니다.

  • 데이터베이스에 읽기 전용 또는 압축 파일 그룹이 있습니다.

  • 이제 모든 파일이 오프라인 상태이지만 스냅샷을 만들 때 온라인 상태였습니다.

데이터베이스를 되돌리기 전에 다음 제한 사항을 고려합니다.

  • 되돌리기는 미디어 복구를 위한 것이 아닙니다. 데이터베이스 스냅샷은 데이터베이스 파일의 불완전한 복사본이므로 데이터베이스 또는 데이터베이스 스냅샷이 손상된 경우 스냅샷에서 되돌리는 것이 불가능할 수 있습니다. 또한 가능한 경우에도 손상 시 되돌리는 것이 문제를 해결할 가능성이 낮습니다. 따라서 데이터베이스를 보호하려면 정기적인 백업을 수행하고 복원 계획을 테스트해야 합니다. 자세한 내용은 SQL Server 데이터베이스의 백업 및 복원을 참조하세요.

    참고 항목

    원본 데이터베이스를 데이터베이스 스냅샷을 만든 시점으로 복원할 수 있어야 하는 경우 전체 복구 모델을 사용하고 이 작업을 수행할 수 있는 백업 정책을 구현합니다.

  • 원래의 원본 데이터베이스를 되돌린 데이터베이스로 덮어쓰기 때문에 스냅샷을 만든 후 데이터베이스에 대해 수행된 모든 업데이트는 손실됩니다.

  • 또한 되돌리기 작업으로 오래된 로그 파일이 덮어 쓰이고 로그가 다시 생성됩니다. 따라서 되돌려진 데이터베이스를 사용자 오류 지점으로 롤아웃할 수 없습니다. 그러므로 데이터베이스를 되돌리기 전에 로그를 백업하는 것이 좋습니다.

    참고 항목

    원본 로그를 복원하여 데이터베이스를 롤포워드할 수 없어도 원본 로그 파일의 내용은 손실된 데이터를 다시 구성할 때 유용할 수 있습니다.

  • 되돌리기로 인해 로그 백업 체인이 끊어집니다. 따라서 되돌려진 데이터베이스의 로그 백업을 수행하려면 먼저 전체 데이터베이스 백업 또는 파일 백업을 수행해야 합니다. 전체 데이터베이스 백업을 사용하는 것이 좋습니다.

  • 되돌리기 작업 중에 스냅샷과 원본 데이터베이스를 모두 사용할 수 없습니다. 원본 데이터베이스와 스냅샷은 모두 "복원 중"으로 표시됩니다. 되돌리기 작업 중에 오류가 발생하면 데이터베이스가 다시 시작될 때 되돌리기 작업이 되돌리기를 완료합니다.

  • 되돌려진 데이터베이스의 메타데이터는 스냅샷 시점의 메타데이터와 동일합니다.

  • 되돌리면 모든 전체 텍스트 카탈로그가 삭제됩니다.

전제 조건

원본 데이터베이스 및 데이터베이스 스냅샷이 다음 필수 조건을 충족하는지 확인합니다.

보안

사용 권한

원본 데이터베이스에 대한 RESTORE DATABASE 권한이 있는 사용자는 데이터베이스 스냅샷을 만들 때 해당 상태로 되돌릴 수 있습니다.

데이터베이스를 데이터베이스 스냅샷으로 되돌리는 방법(Transact-SQL 사용)

데이터베이스를 데이터베이스 스냅샷으로 되돌리려면

참고 항목

이 절차의 예제는 이 섹션의 뒷부분에 있는 예제(Transact-SQL)를 참조하세요.

  1. 데이터베이스를 되돌릴 데이터베이스 스냅샷을 식별합니다. SQL Server Management Studio에서 데이터베이스의 스냅샷을 볼 수 있습니다(데이터베이스 스냅샷 보기(SQL Server 참조 ). 또한 sys.databases(Transact-SQL) 카탈로그 뷰의 source_database_id 열에서 뷰의 원본 데이터베이스를 식별할 수 있습니다.

  2. 다른 데이터베이스 스냅샷을 삭제합니다.

    스냅샷 삭제에 대한 자세한 내용은 데이터베이스 스냅샷 삭제(Transact-SQL)를 참조하세요. 데이터베이스가 전체 복구 모델을 사용하는 경우 되돌리기 전에 로그를 백업해야 합니다. 자세한 내용은 트랜잭션 로그 백업(SQL Server) 또는 데이터베이스가 손상되면 트랜잭션 로그 백업(SQL Server)을 참조하세요.

  3. 되돌리기 작업을 수행합니다.

    되돌리기 작업을 수행하려면 원본 데이터베이스에 대한 RESTORE DATABASE 권한이 필요합니다. 데이터베이스를 되돌리려면 다음 Transact-SQL 문을 사용합니다.

    RESTORE DATABASE database_name from DATABASE_SNAPSHOT =database_snapshot_name

    여기서 database_name 원본 데이터베이스이고 database_snapshot_name 데이터베이스를 되돌리려는 스냅샷의 이름입니다. 이 문에서는 백업 디바이스가 아닌 스냅샷 이름을 지정해야 합니다.

    자세한 내용은 RESTORE(Transact-SQL)를 참조하세요.

    참고 항목

    되돌리기 작업 동안 스냅샷과 원본 데이터베이스를 모두 사용할 수 없습니다. 원본 데이터베이스와 스냅샷은 모두 "복원 중"으로 표시됩니다. 되돌리기 작업 중에 오류가 발생하면 데이터베이스가 다시 시작될 때 되돌리기를 완료합니다.

  4. 데이터베이스 스냅샷을 만든 후 데이터베이스 소유자가 변경된 경우 되돌려진 데이터베이스의 데이터베이스 소유자를 업데이트할 수 있습니다.

    참고 항목

    되돌린 데이터베이스는 데이터베이스 스냅샷의 사용 권한과 구성(데이터베이스 소유자, 복구 모델 등)을 유지합니다.

  5. 데이터베이스를 시작합니다.

  6. 필요에 따라, 특히 전체 또는 대량 로그 복구 모델을 사용하는 경우 되돌린 데이터베이스를 백업합니다. 데이터베이스를 백업하려면 전체 데이터베이스 백업 만들기(SQL Server)를 참조하세요.

예제(Transact-SQL)

이 섹션에는 데이터베이스를 데이터베이스 스냅샷으로 되돌리는 다음 예가 포함되어 있습니다.

A. AdventureWorks 데이터베이스에 대한 스냅샷 되돌리기

이 예제에서는 현재 데이터베이스에 AdventureWorks2022 스냅샷이 하나만 있다고 가정합니다. 여기에서 데이터베이스가 되돌려지는 스냅샷을 만드는 예제는 데이터베이스 스냅샷 만들기(Transact-SQL)를 참조하세요.

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. Sales 데이터베이스에서 스냅샷 되돌리기

이 예제에서는 현재 Sales 데이터베이스sales_snapshot0600 및 sales_snapshot1200 두 개의 스냅샷이 있다고 가정합니다. 이 예제에서는 이전 스냅샷을 삭제하고 데이터베이스를 최신 스냅샷으로 되돌려 줍니다.

이 예에 사용되는 예제 데이터베이스와 스냅샷을 만드는 코드는 다음을 참조하세요.

  • Sales 데이터베이스 및 sales_snapshot0600 스냅샷은 CREATE DATABASE(SQL Server Transact-SQL)에서 "파일 그룹을 사용하여 데이터베이스 만들기" 및 "데이터베이스 스냅샷 만들기"를 참조하세요.

  • sales_snapshot1200 스냅샷은 데이터베이스 스냅샷 만들기(Transact-SQL)에서 "Sales 데이터베이스에 스냅샷 만들기"를 참조하세요.

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT database_id FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

관련 작업

참고 항목

데이터베이스 스냅샷(SQL Server)
RESTORE(Transact-SQL)
sys.databases(Transact-SQL)
데이터베이스 미러링 및 데이터베이스 스냅샷(SQL Server)