SQL Server에서의 백업 복원 및 복구 작동 방법 이해

업데이트: 2006년 7월 17일

파랑 데이터베이스 디스크를 나타내는 아이콘 이 항목에서는 모든 SQL Server 데이터베이스와 관련된 내용을 다룹니다.

복원은 백업에서 데이터를 복사하고 기록된 트랜잭션을 데이터에 적용하여 대상 복구 지점으로 롤포워드하는 과정입니다. 데이터 또는 차등 백업에는 각 백업을 복원하는 과정에서 활성 트랜잭션을 롤포워드할 만큼 충분한 트랜잭션 로그 레코드가 포함됩니다. 또한 각 백업에는 커밋되지 않은 트랜잭션을 롤백하여 데이터베이스를 트랜잭션 일관성이 있고 사용 가능한 상태로 만들기에 충분한 로그가 포함됩니다. 커밋되지 않은 트랜잭션(있는 경우)을 롤포워드하고 데이터베이스를 온라인 상태로 만드는 과정을 복구라고 합니다.

롤포워드 세트

기록된 데이터 변경 내용을 데이터베이스의 데이터에 적용하여 데이터를 최신 상태로 만드는 과정을 롤포워드라고 합니다. 복원된 모든 데이터 세트를 롤포워드 세트라고 부릅니다. 롤포워드 세트는 데이터베이스 또는 부분 백업이나 파일 백업 세트와 같은 하나 이상의 전체 백업을 복원하여 정의됩니다. 만약 RESTORE 문이 파일 그룹, 파일 또는 페이지를 지정하면 이 항목만 롤포워드 세트에 포함됩니다. 아니면 복원되는 백업의 모든 파일이 롤포워드 세트에 포함됩니다. 전체 백업에 로그 레코드가 포함되어 있으면 이 로그를 사용해 복원된 데이터를 롤포워드합니다.

[!참고] 복원 중에 파일 그룹을 지정하면 복원은 현재 존재하는 전체 파일 그룹을 포함합니다. 이 파일 그룹에는 백업을 수행한 후 파일 그룹에 추가된 파일이 모두 들어 있습니다. 자세한 내용은 롤 포워드 중 추가된 파일의 생성 제어를 참조하십시오.

차등 백업의 경우 차등 기반 이후 데이터베이스에 추가된 파일이 있으면 차등 백업 복원 시 롤포워드 세트의 페이지를 차등 백업의 데이터로 덮어쓸 수 있습니다. 자세한 내용은 차등 백업 사용을 참조하십시오.

차등 백업 복원은 페이지가 롤포워드 세트와 백업에 포함되어 있으며 RESTORE 문이 페이지 또는 페이지 파일을 나열하거나 또는 파일이나 페이지를 전혀 나열하지 않은 경우에만 페이지를 업데이트합니다.

전체 및 대량 로그 복구 모델에서 로그는 구분하여 백업해야 합니다. 데이터 및 차등 백업(선택 사항)을 복원한 뒤에는 대개 데이터베이스를 오류 발생 시점의 상태로 만들기 위해 후속 로그 백업을 복원합니다. 로그 백업 복원은 롤포워드 세트의 모든 페이지를 롤포워드합니다. 로그 백업에 대한 자세한 내용은 트랜잭션 로그 백업 작업을 참조하십시오.

복원 시퀀스

각각의 복원 시나리오는 복원 시퀀스라고 하는 하나 이상의 복원 단계(작업)로 구현됩니다. 각 작업은 개별 Transact-SQL RESTORE 문에 해당됩니다. 복원 시퀀스는 하나 이상의 복원 단계로 영향을 받은 데이터를 이동합니다.

Transact-SQL 복원 시퀀스 및 시퀀스 구축 방법에 대한 자세한 내용은 SQL Server 데이터베이스에 대한 복원 시퀀스 작업을 참조하십시오.

복원 단계

복원은 여러 단계의 처리를 거치는 작업입니다. 복원 단계는 데이터 복사, 다시 실행(롤포워드), 그리고 실행 취소(롤백)를 포함합니다.

  • 데이터 복사 단계는 데이터베이스의 백업 미디어에서 모든 데이터와 로그 그리고 인덱스 페이지를 데이터베이스 파일로 복사하는 작업입니다.
  • 다시 실행 단계는 기록된 트랜잭션을 백업에서 복사한 데이터에 적용하여 데이터를 복구 지점으로 롤포워드합니다. 이 지점에서 데이터베이스는 일반적으로 커밋되지 않은 트랜잭션을 가지며 사용할 수 없는 상태입니다. 이럴 경우 데이터베이스 복구에 실행 취소 단계가 필요합니다.
  • 복구의 첫 번째 부분인 실행 취소 단계에서는 커밋되지 않은 트랜잭션을 롤백하고 사용자가 데이터베이스를 사용할 수 있도록 합니다. 롤백 단계 이후의 백업은 복원할 수 없습니다.

이 섹션의 나머지 부분에서는 이 단계들을 좀 더 자세히 검사합니다.

데이터 복사 단계

복원 처리의 첫 번째 단계는 데이터 복사 단계입니다. 데이터 복사 단계는 복원할 데이터베이스, 파일 또는 페이지의 내용을 초기화합니다. 이 단계는 전체 또는 차등 백업을 사용하는 데이터베이스 복원, 파일 복원 및 페이지 복원 작업에 의해 수행됩니다.

데이터 복사 단계에는 하나 이상의 전체 백업 및 필요에 따라 차등 백업의 데이터를 복사한 다음 영향을 받은 데이터베이스, 파일 또는 페이지의 내용을 해당 백업에서 캡처한 시점으로 다시 설정하는 작업이 포함되어 있습니다.

다음 단계인 다시 실행(롤포워드) 단계의 시작 지점은 롤포워드 세트 내 가장 오래된 파일이나 페이지에 의해 결정됩니다.

다시 실행 단계(롤포워드)

다시 실행(또는 롤포워드)은 기록된 변경 사항을 롤포워드 세트의 데이터에 다시 실행하여 데이터를 이전 시간 상태로 옮기는 과정입니다. SQL Server 데이터베이스 엔진에서는 전체 백업에 포함된 로그부터 시작하여 순서대로 로그 백업이 복원되도록 롤포워드를 수행합니다.

복원에는 불필요한 롤포워드가 제외됩니다. 일반적으로 백업할 때 읽기 전용이었으며 여전히 읽기 전용인 데이터는 롤포워드할 필요가 없으므로 건너뜁니다.

복구 지점

롤포워드의 목표는 데이터를 복구 지점의 원래 상태로 반환하는 것입니다. 복구 지점은 사용자가 데이터 세트를 복구하도록 지정하는 지점입니다. 전체 복구 모델에서는 복구 지점을 특정 시점, 표시된 트랜잭션 또는 로그 시퀀스 번호로 지정할 수 있습니다. 대량 로그 복구 모델에서는 이전 로그 백업 이후에 대량 작업이 수행되지 않은 경우에만 시간을 지정하여 복원할 수 있습니다.

다시 실행 일치

다시 실행 단계에서 데이터는 항상 복구 지점의 데이터베이스 상태와 다시 실행 일치하는 지점으로 롤포워드됩니다. 모든 데이터가 실행 취소가 발생할 수 있는 지점으로 롤포워드되었습니다.

데이터베이스 상태는 주 파일에 의해 다음과 같이 정의됩니다.

  • 주 파일이 복원되면 복구 지점이 전체 데이터베이스의 상태를 결정합니다. 예를 들어 실수로 테이블을 삭제하기 전의 시점으로 데이터베이스를 복구하려면 전체 데이터베이스를 동일 시점으로 복원해야 합니다.
  • 주 파일이 복원되지 않으면 데이터베이스 상태가 알려지고 데이터베이스와 트랜잭션 일치하는 복구 지점으로 복원된 데이터가 롤포워드됩니다. SQL Server에서 이 작업을 강제 적용합니다.

하지만 복구 지점에 커밋되지 않은 트랜잭션에 의해 변경된 내용이 데이터베이스에 포함되어 있을 수 있습니다. 온라인 복원의 경우 데이터베이스의 현재 온라인 상태와 일치하는 시점으로 데이터를 복구합니다.

차등 백업은 차등 백업이 이루어진 시점으로 건너뜁니다. 롤포워드 세트의 페이지는 차등 백업의 최근 페이지로 덮어씁니다.

실행 취소(롤백) 단계 및 복구

다시 실행이 모든 로그 트랜잭션을 롤포워드하면 일반적으로 복구 지점에서 커밋되지 않은 트랜잭션에 의한 변경 사항이 데이터베이스에 포함됩니다. 이로 인해 롤포워드된 데이터의 트랜잭션이 일치하지 않게 됩니다. 복구 프로세스는 트랜잭션 로그를 열어 커밋되지 않은 트랜잭션을 식별합니다. 트랜잭션이 일치하지 않는 데이터를 다른 트랜잭션이 볼 수 없도록 하는 잠금을 보유하지 않는 한 커밋되지 않은 트랜잭션은 롤백으로 인해 실행 취소됩니다. 이 단계를 실행 취소 또는 롤백 단계라고 합니다. 복구 프로세스를 시작할 때 데이터에서 트랜잭션이 일치하면 실행 취소 단계를 건너뜁니다. 데이터베이스에서 트랜잭션이 일치한 후에 복구에서 데이터베이스를 온라인 상태로 만듭니다.

[!참고] 일반적으로 복구는 데이터베이스 시작 시에 일관성 있게 만드는 일련의 작업입니다. 데이터베이스가 정상적으로 종료된 경우 복구에서 다시 실행 단계를 건너뜁니다. 이를 다시 시작 시 복구라고 합니다.

하나 이상의 백업이 복원되면 일반적으로 복구에 다시 실행 및 실행 취소 단계가 모두 포함됩니다. 모든 전체 및 차등 백업에는 해당 백업의 데이터를 자체적으로 일치하는 상태로 복구할 수 있을 만큼 충분한 트랜잭션 로그 레코드가 들어 있습니다.

[!참고] SQL Server 2005 Enterprise Edition에서는 크래시 복구 또는 데이터베이스 미러링 장애 조치(Failover)를 수행하는 동안 사용자가 실행 취소 단계 중에 데이터베이스에 액세스할 수 있습니다. 이를 빠른 복구라 합니다. 빠른 복구는 충돌이 발생했을 때 커밋되지 않은 트랜잭션이 충돌 전에 유지하던 모든 잠금을 다시 획득하기 때문에 가능합니다. 잠금은 이러한 트랜잭션이 롤백되는 동안 사용자의 다른 작업이 발생하지 않도록 트랜잭션을 보호합니다.

RECOVERY 및 NORECOVERY 옵션과 복원 단계의 관계

다음과 같이 문에서 WITH NORECOVERY를 지정했는지 여부에 따라 RESTORE 문이 다시 실행 단계 이후에 종료되거나 실행 취소 단계로 계속됩니다.

  • WITH RECOVERY는 다시 실행 단계와 실행 취소 단계를 모두 포함하여 데이터베이스를 복구합니다. 추가 백업은 복원할 수 없습니다. 이것이 기본값입니다.
    롤포워드 세트가 데이터베이스와 일치하도록 충분히 롤포워드되지 못하면 실행 취소 단계를 수행할 수 없습니다. 데이터베이스 엔진에서 오류를 표시하며 복구가 중지됩니다.
    전체 롤포워드 세트가 데이터베이스와 일치하면 복구가 수행되며 데이터베이스를 온라인 상태로 만들 수 있습니다.
  • WITH NORECOVERY는 실행 취소 단계를 생략하여 커밋되지 않은 트랜잭션을 유지합니다. 실행 취소 단계를 생략하면 다른 백업을 복원하여 시간 안에 데이터베이스를 더 많이 롤포워드할 수 있습니다. 종종 RESTORE WITH NORECOVERY가 데이터를 데이터베이스와 일치하는 지점으로 롤포워드하는 경우가 있습니다. 이런 경우 데이터베이스 엔진에서는 RECOVERY 옵션을 사용하여 롤포워드 세트를 복구할 수 있다는 정보 메시지를 표시합니다.
    롤포워드 세트에 대한 자세한 내용은 SQL Server에서의 백업 복원 및 복구 작동 방법 이해를 참조하십시오.

[!참고] 세 번째 방법인 WITH STANDBY는 이 항목의 범위 밖에 있습니다.

RESTORE 옵션에 대한 자세한 내용은 RESTORE(Transact-SQL)를 참조하십시오.

복구 경로

복구 경로는 시간 경과에 따라 데이터베이스는 진전되었지만 일관성은 유지된 고유한 변환 집합입니다. 복구 경로 및 복구 분기 지점과 복구 분기의 관련 개념에 대한 자세한 내용은 복구 경로를 참조하십시오.

SQL Server가 오프라인 상태일 때 데이터베이스 복원

전체 텍스트 카탈로그가 없으면 SQL Server가 오프라인 상태일 때 SQL 기록기를 사용하여 데이터베이스를 복구 및 복원할 수 있습니다. 전체 텍스트 카탈로그가 데이터베이스와 연결되어 있으면 먼저 SQL Server를 시작하거나 Microsoft SQL Server용 전체 텍스트 검색 엔진(MSFTESQL) 서비스를 중지해야 합니다.

SQL Server는 실행되는 동안 복원 작업 준비 과정에서 전체 텍스트 카탈로그 파일을 강제로 닫습니다. 하지만 SQL Server가 오프라인 상태이면 MSFTESQL이 특정 전체 텍스트 파일을 열어 놓을 수 있습니다. 이렇게 하면 복원 응용 프로그램이 파일을 덮어쓸 수 없습니다. 이러한 전체 텍스트 파일을 강제로 닫기 위해 응용 프로그램에서 MSFTESQL을 종료할 수 있습니다.

이러한 경우를 방지하려면 다음 중 하나를 수행하십시오.

참고 항목

개념

SQL Server의 복원 및 복구 개요
트랜잭션 로그 백업 작업

관련 자료

SQL Server 데이터베이스의 전체 및 차등 백업 만들기
SQL Server 데이터베이스에 대한 복원 시나리오 구현
SQL Server 데이터베이스에 대한 복원 시퀀스 작업

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 7월 17일

변경된 내용
  • 다음 섹션에서 부분 업데이트했습니다.
    • "복원 시퀀스"
    • "다시 실행 일치"(이전에는 "데이터베이스 일관성")
    • "실행 취소(롤백) 단계 및 복구"(이전에는 "백업 복구")
  • 이전의 "RESTORE 옵션과 복원 단계의 관계" 항목을 통합 및 업데이트하고 WITH RECOVERY에 대한 설명을 수정했습니다.