다음을 통해 공유


페이지 복원(SQL Server)

적용 대상: SQL Server

이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 페이지를 복원하는 방법을 설명합니다. 페이지 복원의 목표는 전체 데이터베이스를 복원하지 않고 하나 이상의 손상된 페이지를 복원하는 것입니다. 일반적으로 복원 후보인 페이지는 페이지에 액세스할 때 발생하는 오류로 인해 "의심"으로 표시되었습니다. 주의 대상 페이지는 msdb 데이터베이스의 suspect_pages 테이블에서 확인할 수 있습니다.

항목 내용

시작하기 전에

페이지 복원이 유용한 경우

페이지 복원은 격리된 손상된 페이지를 복구하기 위한 것입니다. 몇 가지 개별 페이지를 복원하고 복구하는 것이 파일 복원보다 빠를 수 있으므로 복원 작업 중에 오프라인 상태인 데이터의 양이 줄어듭니다. 그러나 파일에서 몇 페이지 이상을 복원해야 하는 경우 일반적으로 전체 파일을 복원하는 것이 더 효율적입니다. 예를 들어 디바이스의 여러 페이지에서 디바이스 오류의 가능성을 나타내는 경우 파일을 다른 위치로 복원한 다음 해당 디바이스를 복구해 보세요.

또한 모든 페이지 오류에 복원이 필요한 것은 아닙니다. 데이터를 다시 계산하여 해결할 수 있는 보조 인덱스 등의 캐시된 데이터에서 문제가 발생할 수 있습니다. 예를 들어 데이터베이스 관리자가 보조 인덱스를 삭제하고 다시 작성하면 손상된 데이터는 수정되었더라도 suspect_pages 테이블에 이러한 수정 내용이 반영되지 않습니다.

제한 사항

  • 페이지 복원은 전체 또는 대량 로그 복구 모델을 사용하는 SQL Server 데이터베이스에 적용됩니다. 페이지 복원은 읽기/쓰기 파일 그룹에 대해서만 지원됩니다.

  • 데이터베이스 페이지만 복원할 수 있습니다. 페이지 복원을 사용하여 다음을 복원할 수 없습니다.

    • 트랜잭션 로그

    • 할당 페이지: GAM(전역 할당 맵) 페이지, SGAM(공유 전역 할당 맵) 페이지, PFS(페이지 여유 공간) 페이지.

    • 모든 데이터 파일의 0페이지(파일 부트 페이지)

    • 1:9페이지(데이터베이스 부팅 페이지).

    • 전체 텍스트 카탈로그

  • 대량 로그 복구 모델을 사용하는 데이터베이스의 경우 페이지 복원에는 다음과 같은 추가 조건이 있습니다.

    • 파일 그룹 또는 페이지 데이터가 오프라인 상태인 동안 백업하는 것은 오프라인 데이터가 로그에 기록되지 않으므로 대량 로그 데이터의 경우 문제가 될 수 있습니다. 모든 오프라인 페이지에서 로그를 백업하지 못할 수 있습니다. 이 경우 최신 백업으로 복원하는 것보다 데이터 손실이 적을 수 있으므로 DBCC REPAIR를 사용하는 것이 좋습니다.

    • 대량 로그 데이터베이스의 로그 백업에 잘못된 페이지가 발생하면 WITH CONTINUE_AFTER_ERROR 지정하지 않으면 실패합니다.

    • 페이지 복원은 일반적으로 대량 로그 복구에서 작동하지 않습니다.

      페이지 복원을 수행하는 최선의 구현 방법은 데이터베이스를 전체 복구 모델로 설정하고 로그 백업을 시도하는 것입니다. 로그 백업이 작동하는 경우 페이지 복원을 계속할 수 있습니다. 로그 백업이 실패하는 경우 이전 로그 백업 이후 작업을 손실해야 하거나 REPAIR_ALLOW_DATA_LOSS 옵션을 사용하여 DBCC를 실행해야 합니다.

권장 사항

  • 페이지 복원 시나리오

    오프라인 페이지 복원
    모든 버전의 SQL Server에서는 데이터베이스가 오프라인 상태일 때에도 페이지를 복원할 수 있습니다. 오프라인 페이지 복원에서는 손상된 페이지가 복원되는 동안 데이터베이스는 오프라인 상태가 됩니다. 복원 시퀀스가 끝나면 데이터베이스가 온라인 상태가됩니다.

    온라인 페이지 복원
    SQL Server Enterprise Edition에서는 온라인 페이지 복원을 지원하며, 데이터베이스가 현재 오프라인 상태인 경우에는 오프라인 복원을 사용합니다. 대부분의 경우 데이터베이스가 온라인 상태로 유지되는 동안 페이지가 복원되는 파일 그룹을 포함하여 손상된 페이지를 복원할 수 있습니다. 주 파일 그룹이 온라인 상태이면 보조 파일 그룹 중 하나 이상이 오프라인인 경우에도 페이지 복원은 일반적으로 온라인으로 수행됩니다. 그러나 경우에 따라 손상된 페이지에 오프라인 복원이 필요할 수 있습니다. 예를 들어 특정 중요 페이지의 손상으로 인해 데이터베이스가 시작되지 않을 수 있습니다.

    Warning

    손상된 페이지가 중요한 데이터베이스 메타데이터를 저장하는 경우 온라인 페이지 복원 시도 중에 메타데이터에 대한 필수 업데이트가 실패할 수 있습니다. 이 경우 오프라인 페이지 복원을 수행할 수 있지만 먼저 RESTORE WITH NORECOVERY를 사용하여 트랜잭션 로그를 백업하여 비상 로그 백업을 만들어야 합니다.

  • 페이지 복원은 페이지 체크섬을 포함하여 향상된 페이지 수준 오류 보고와 추적을 사용합니다. 체크 합계 또는 손상된 쓰기, 손상된 페이지로 인해 손상된 것으로 검색된 페이지는 페이지 복원 작업으로 복원할 수 있습니다. 명시적으로 지정된 페이지만 복원됩니다. 지정된 각 페이지는 지정된 데이터 백업에서 해당 페이지의 복사본으로 대체됩니다.

    후속 로그 백업을 복원하면 복구 중인 페이지가 하나 이상 포함된 데이터베이스 파일에만 적용됩니다. 페이지를 포함하는 파일 그룹을 현재 로그 파일로 전달하려면 끊어지지 않은 로그 백업 체인을 마지막 전체 또는 차등 복원에 적용해야 합니다. 파일 복원에서와 같이 롤포워드 집합은 단일 로그 다시 실행 패스로 고급입니다. 페이지 복원이 성공하려면 복원된 페이지를 데이터베이스와 일치하는 상태로 복구해야 합니다.

보안

사용 권한

복원할 데이터베이스가 없으면 CREATE DATABASE 권한이 있어야 RESTORE를 실행할 수 있습니다. 데이터베이스가 있으면 RESTORE 권한은 기본적으로 sysadmindbcreator 고정 서버 역할의 멤버와 데이터베이스의 소유자(dbo)에 설정됩니다. FROM DATABASE_SNAPSHOT 옵션의 경우 데이터베이스가 항상 있습니다.

멤버 자격 정보를 서버에서 항상 사용할 수 있는 역할에 RESTORE 권한이 제공됩니다. 고정 데이터베이스 역할의 멤버 자격은 데이터베이스가 액세스 가능한 상태이며 손상되지 않은 경우에만 확인할 수 있는데, RESTORE 실행 시 데이터베이스가 항상 이러한 상태인 것은 아니므로 db_owner 고정 데이터베이스 역할의 멤버에게는 RESTORE 권한이 없습니다.

SQL Server Management Studio 사용

SQL Server 2016(13.x)부터 SQL Server Management Studio는 페이지 복원을 지원합니다.

페이지를 복원하려면

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진의 적절한 인스턴스에 연결하고 서버 이름을 클릭하여 서버 트리를 확장합니다.

  2. 데이터베이스를 확장합니다. 데이터베이스에 따라 사용자 데이터베이스를 선택하거나 시스템 데이터베이스를 확장한 다음 시스템 데이터베이스를 선택합니다.

  3. 데이터베이스를 마우스 오른쪽 단추로 클릭하고 태스크, 복원을 차례로 가리킨 다음 페이지를 클릭하여 페이지 복원 대화 상자를 엽니다.

    복원
    이 섹션에서는 복원 데이터베이스(일반 페이지)에서 복원 위치의 함수와 동일한 기능을 수행합니다.

    데이터베이스
    복원할 데이터베이스를 지정합니다. 새 데이터베이스를 입력하거나 드롭다운 목록에서 기존 데이터베이스를 선택할 수 있습니다. 목록에는 시스템 데이터베이스 마스터tempdb를 제외한 서버의 모든 데이터베이스가 포함됩니다.

    Warning

    암호로 보호된 백업을 복원하려면 RESTORE 문을 사용해야 합니다.

    비상 로그 백업
    백업 디바이스에서 데이터베이스에 대한 비상 로그 백업이 저장될 파일 이름을 입력하거나 선택합니다.

    백업 세트
    이 섹션에서는 복원과 관련된 백업 집합을 표시합니다.

    헤더
    이름 백업 세트의 이름입니다.
    구성 요소 백업된 구성 요소이며 데이터베이스, 파일 또는 <비어 있음>(트랜잭션 로그의 경우)이 될 수 있습니다.
    Type 수행된 백업 유형입니다. 전체, 차등 또는 트랜잭션 로그일 수 있습니다.
    서버 백업 작업을 수행한 데이터베이스 엔진 인스턴스의 이름입니다.
    데이터베이스 백업 작업에 포함된 데이터베이스의 이름입니다.
    위치 볼륨에 있는 백업 세트의 위치입니다.
    첫 번째 LSN 백업 세트에 있는 첫 번째 트랜잭션의 LSN(로그 시퀀스 번호)입니다. 파일 백업의 경우 비어 있습니다.
    마지막 LSN 백업 세트에 있는 마지막 트랜잭션의 로그 시퀀스 번호(LSN)입니다. 파일 백업의 경우 비어 있습니다.
    검사점 LSN 백업 생성 시 가장 최근 검사점의 로그 시퀀스 번호(LSN)입니다.
    전체 LSN 가장 최근에 수행한 전체 데이터베이스 백업의 로그 시퀀스 번호(LSN)입니다.
    시작 날짜 클라이언트의 국가별 설정으로 표시되는 백업 작업 시작 날짜 및 시간입니다.
    완료 날짜 클라이언트의 국가별 설정으로 표시되는 백업 작업 완료 날짜 및 시간입니다.
    크기 백업 세트의 크기(바이트)입니다.
    사용자 이름 백업 작업을 수행한 사용자의 이름입니다.
    만료 백업 세트가 만료되는 날짜 및 시간입니다.

    페이지 복원 작업을 수행하는 데 필요한 백업 파일의 무결성을 확인하려면 확인 을 클릭합니다.

  4. 손상된 페이지를 확인하려면 데이터베이스 상자에서 올바른 데이터베이스를 선택한 상태에서 데이터베이스 페이지 확인을 클릭합니다. 장기 실행 작업입니다.

    Warning

    손상되지 않은 특정 페이지를 복원하려면 추가를 클릭하고 복원할 페이지의 파일 ID페이지 ID를 입력합니다.

  5. 페이지 표는 복원할 페이지를 식별하는 데 사용됩니다. 처음에는 이 표가 suspect_pages 시스템 테이블의 내용으로 채워집니다. 표에서 페이지를 추가하거나 제거하려면 추가 또는 제거를 클릭합니다. 자세한 내용은 suspect_pages 테이블 관리(SQL Server)를 참조하세요.

  6. 백업 세트 표에는 기본 복원 계획의 백업 세트가 나열됩니다. 필요에 따라 확인을 클릭하여 백업을 복원하지 않고도 백업을 읽을 수 있고 백업 세트가 완료되었는지 확인합니다. 자세한 내용은 RESTORE VERIFYONLY(Transact-SQL)를 참조하세요.

    페이지

  7. 페이지 표에 나열된 페이지를 복원하려면 확인을 클릭합니다.

Transact-SQL 사용

RESTORE DATABASE 문에서 페이지를 지정하려면 페이지와 페이지의 페이지 ID가 포함된 파일의 파일 ID가 필요합니다. 필수 구문은 다음과 같습니다.

 RESTORE DATABASE <database_name>  
  
 PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
  
 FROM <backup_device> [ ,... n ]
  
 WITH NORECOVERY

PAGE 옵션의 매개 변수에 대한 자세한 내용은 RESTORE 인수(Transact-SQL)를 참조하세요. RESTORE DATABASE 구문에 대한 자세한 내용은 RESTORE(Transact-SQL)를 참조하세요.

페이지를 복원하려면

  1. 복원할 손상된 페이지의 페이지 ID를 가져옵니다. 체크섬 또는 조각난 쓰기 오류는 페이지 ID를 반환하여 페이지를 지정하는 데 필요한 정보를 제공합니다. 손상된 페이지의 페이지 ID를 조회하려면 다음 원본 중 하나를 사용하세요.

    페이지 ID의 원본 항목
    msdb.. suspect_pages suspect_pages 테이블 관리(SQL Server)
    오류 로그 SQL Server 오류 로그 보기(SQL Server Management Studio)
    이벤트 추적 이벤트 모니터링 및 응답
    DBCC DBCC(Transact-SQL)
    WMI 공급자 서버 이벤트 개념을 위한 WMI 공급자
  2. 페이지가 포함된 전체 데이터베이스, 파일 또는 파일 그룹 백업을 사용하여 페이지 복원을 시작합니다. RESTORE DATABASE 문에서 PAGE 절을 사용하여 복원할 모든 페이지의 페이지 ID를 나열합니다.

  3. 가장 최근의 차등을 적용합니다.

  4. 후속 로그 백업을 적용합니다.

  5. 복원된 페이지의 최종 LSN( 마지막으로 복원된 페이지가 오프라인으로 전환되는 지점)을 포함하는 데이터베이스의 새 로그 백업을 만듭니다. 시퀀스의 첫 번째 복원의 일부로 설정된 최종 LSN은 다시 실행 대상 LSN입니다. 페이지가 포함된 파일의 온라인 롤포워드는 다시 실행 대상 LSN에서 중지할 수 있습니다. 파일의 현재 다시 실행 대상 LSN을 알아보려면 sys.master_filesredo_target_lsn 열을 확인합니다. 자세한 내용은 sys.master_files(Transact-SQL)을 참조하세요.

  6. 새 로그 백업을 복원합니다. 이 새 로그 백업이 적용되면 페이지 복원이 완료되고 페이지를 사용할 수 있습니다.

    참고 항목

    이 시퀀스는 파일 복원 시퀀스와 유사합니다. 실제로 페이지 복원 및 파일 복원은 모두 동일한 시퀀스의 일부로 수행할 수 있습니다.

예(Transact-SQL)

다음 예제에서는 파일 B의 손상된 파일 페이지를 NORECOVERY으로 복원합니다. 다음으로, 두 개의 로그 백업이 적용 NORECOVERY되고, 그 다음에는 비상 로그 백업이 적용되며, 이 백업은 RECOVERY으로 복원됩니다. 이 예제에서는 온라인 복원을 수행합니다. 이 예제에서 파일 B의 파일 ID는 1이고 손상된 페이지의 페이지 ID는 57, 202, 9161016입니다.

RESTORE DATABASE [<database>] PAGE='1:57, 1:202, 1:916, 1:1016'  
   FROM DISK = '<file_backup_of_file_B>'
   WITH NORECOVERY;  
RESTORE LOG [<database>] FROM [<log_backup>]
   WITH NORECOVERY;  
RESTORE LOG [<database>] FROM [<log_backup>]
   WITH NORECOVERY;   
BACKUP LOG [<database>] TO [<new_log_backup>];
RESTORE LOG [<database>] FROM [<new_log_backup>] WITH RECOVERY;  
GO

참고 항목

RESTORE(Transact-SQL)
트랜잭션 로그 백업 적용(SQL Server)
suspect_pages 테이블 관리(SQL Server)
SQL Server 데이터베이스 백업 및 복원