차등 백업이 기본을 지정할 수없는 이유는 무엇입니까?


18

이것은 내 첫 DBA.SE 게시물이므로 실수를 알려주십시오. 감사합니다!

저는 새로운 DBA (IT 전문가가 아니고 다른 회사에서는 그 누구도 할 수 없음)이므로 기본적인 설명이 많을수록 좋습니다. 데이터베이스 백업 전략에 대해 읽었습니다 (또는이를 "복원 전략"이라고 함). 전체, 차등 및 트랜잭션 로그 백업의 기능을 이해하지만 차등 백업이 최신 전체 백업 만 기반으로 할 수있는 이유 를 알고 싶습니다 .

차등 백업이 마지막 전체 백업 이후 변경된 모든 것이라면 왜 차등을 선택한 백업을 기반으로 할 수 없습니까? 더 명확하게하기 위해 복원 할 때가 아니라 백업을 수행 할 때 기준을 지정하는 것이 좋습니다. 복원 할 때 복원을 수행하기 위해 올바른 기준과 해당 차등을 선택한다고 가정합니다 (기준 B에서 만든 차등을 사용하여 기준 A에서 복원하지 않음).

이 기능이 불가능한 이유는 무엇입니까? 나는 이유가 있어야한다고 생각합니다. 그 이유가 무엇인지 모르겠습니다.

참고 :베이스를 지정할 수 없다는 것을 이해하지만 내 질문은 왜 그렇지 않습니까? (또한 "왜 하시겠습니까?"에 대한 토론에 관심이 없습니다.)

유추

다음은 차등 백업을 이해하는 방법에 대한 비유입니다.

셀에 일부 데이터가 포함 된 Excel 파일이 있습니다.

1 일째에이 파일의 사본을 만들어 다른 곳에 저장합니다 ( "전체 백업").

2 일째, 파일을보고 1 일째에 작성한 백업 사본과 비교 한 후 변경된 모든 셀과 새 값이 무엇인지 ( "차등 백업") 기록합니다. 셀에 대한 모든 변경 사항은 주목할 필요가 없으며 최종 값은 무엇입니까? 셀 A1이 "Alfred"로 시작하고 "Betty", "Charlie", "Dave"로 변경 한 경우 "A1은 이제 Dave"입니다.

3 일째에 현재 파일과 백업 파일을 다시 비교하고 변경 사항 (2 일과 동일한 기준을 가진 다른 "차등 백업")을 기록합니다. 다시 말하지만, 관찰 된 시간에 셀당 최종 값만 기록하는 것이지 하루 종일 셀이 유지 한 모든 값은 아닙니다.

4 일째에 다시 비교하고 변경 사항을 기록합니다. 셀 A1을 계속 사용하면 이제 하루 종일 10 개의 다른 이름이 있더라도 "Sarah"라고 표시됩니다. "지금 A1은 Sarah"입니다.

5 일째에 파일이 엉망이됩니다. 그래서 1 일에 만든 백업 복사본을보고 4 일에 마지막 상태를 기록한 후 백업 복사본에 변경된 내용을 적용하면 4 일의 상태에 대한 "복원"파일이 생깁니다. 따라서 1 일째 백업을보고 4 일째 셀 A1이 "Sarah"로 종료 된 것을 확인하고 백업 셀 A1을 "Sarah"로 변경하십시오.

2 일째에 파일의 다른 백업 사본 ( "전체")을 만든 경우 왜 문제가됩니까? 3 일 또는 4 일에 파일과 1 일에 작성된 사본을 비교 (읽기, "차등 백업 수행") 할 수없는 이유는 무엇입니까? 내가 이해 한 것처럼 SQL Server는 2 일차에 이루어진 전체 백업 (하나가 만들어진 경우)과 다른 옵션을 비교하지 않아도됩니다 (다른 차등 백업을 수행 할 때).

답변:


14

차등 백업은 차등 변경 맵 이라는 것을 사용 하여 마지막 전체 백업 이후 수정 된 페이지 목록을 작성 합니다. 이 목록은 "차등"목록이므로 백업 유형의 이름과 백업이 관련 전체 백업 위에 만 복원 될 수있는 이유입니다.

전체 백업을 수행하면 차등 변경 맵이 재설정됩니다. 그 시점부터 수정 된 모든 페이지가 맵에 기록됩니다. 차등을 취하는 경우 해당 백업에는 마지막 전체 백업 이후 수정되어 맵에 기록 된 페이지 만 포함됩니다.

전체 복원 프로세스의 기반이되는 두 개의 전체 백업은 내용이 다르므로 차등 맵이 다를 수 있습니다. 두 번째 백업을 통한 첫 번째 백업을 기반으로 diff를 복원하면 데이터베이스가 손상되었을 수 있습니다. 실제로 SQL Server는 기반이되는 원래 전체 백업을 제외한 모든 항목에 대한 diff 백업의 복원을 방지합니다.

SQL Server에 차등 백업을 요청하면 차등 백업에 대한 유일한 "기본"은 차등 백업이 시작될 때 데이터베이스에 존재하는 단일 차등 변경 맵입니다. 이것이 차등 백업의 기본을 지정할 수없는 이유입니다.


@MartinSmith의 의견에 대한 응답으로 COPY_ONLY백업 을 사용 하여 여러 전체 백업에서 차등 백업 을 복원 할 수 있습니다. 다음 시나리오를 고려하십시오.

  1. BACKUP DATABASE xyz TO DISK = 'path_to_backup.bak';
  2. BACKUP DATABASE xyz TO DISK = 'path_to_backup_2.bak' WITH COPY_ONLY;
  3. BACKUP DATABASE xyz TO DISK = 'path_to_backup_3.bak' WITH COPY_ONLY;
  4. BACKUP DATABASE xyz TO DISK = 'path_to_backup_4.bak' WITH COPY_ONLY;
  5. BACKUP DATABASE xyz TO DISK = 'path_to_backup_diff.bak' WITH DIFFERENTIAL;

1 단계에서 전체 백업이 수행 될 때만 차등 변경 맵이 지워 지므로 5 단계의 차등 백업은 1-4 단계에서 수행 된 모든 백업에 대해 복원 할 수 있어야합니다. COPY_ONLY2, 3 및 4 단계 의 백업 은 변경 맵을 재설정 하지 않습니다 . 차등 변경 맵 에는 전체 백업 이후의 변경 사항이 누적 되므로 각 연속 COPY_ONLY백업에는 차등 백업 이 이전 4 개 백업 하나 에 대해 작동하기에 충분한 정보가 포함 됩니다.

작동해야하는 것처럼 보이지만 실제로는 copy_only 백업을 통해 차등을 복원하면 다음 오류가 발생합니다.

메시지 3136, 수준 16, 상태 1, 줄 1
데이터베이스가 올바른 이전 상태로 복원되지 않았으므로이 차등 백업을 복원 할 수 없습니다.
메시지 3013, 수준 16, 상태 1, 줄 1
RESTORE DATABASE가 비정상적으로 종료됩니다.

나는 SQL 서버 2012 플랫폼은 차동 및 COPY_ONLY 복원을 테스트하기 위해 repro 수와의 파일 저장 만든 gist.github.com를 라는 이름의 데이터베이스 떨어질 것이다 스크립트 경고 - RestoreTest첫 번째 단계로합니다.


전체 백업을 수행하면 차등 변경 맵이 재설정되지 않은 경우에만 재설정됩니다 COPY_ONLY. OP가 1 일에 정식 전체 백업을 COPY_ONLY수행하고 2 일에 전체 백업을 수행하는 경우 나중에 동일한 기본과의 차이를 적용하여 어떤 문제가 발생합니까 2 일차 백업까지?
Martin Smith

방금 테스트 한 결과 "데이터베이스가 올바른 이전 상태로 복원되지 않았기 때문에이 차등 백업을 복원 할 수 없지만"차후 차등을 copy_only로 복원 할 수 없습니다. -이것이 작동하지 않거나 구현되지 않은 이유가 있는지 확실하지 않습니다.
Martin Smith

1
@MartinSmith-ooo. 나는 지금도 그것을 확인했다.
Max Vernon

5

원하는 기능이 원칙적으로 존재할 있습니다. 현재 데이터베이스 구조에서는 효율적이지 않습니다 (Max Vernon의 답변 참조). SQL Server는 diff 맵 집합을 유지 관리하거나 현재 DB 내용을 기본으로 지정한 전체 백업과 비교해야합니다.

큰 파일을 중복 제거하는 응용 프로그램이 있습니다. 두 개의 전체 백업을 수행 할 수 있으며 변경된 데이터 만 실제로 저장됩니다. 이것은 커스텀베이스가있는 diff와 같습니다. exdupe예를 들어 그렇게 할 수 있습니다.

이것에 대한 좋은 점은 모든 백업 파일 세트와 함께 작동한다는 것입니다. 실제로 세 번째 전체 백업 파일로 시작하면 증분 (차동 아님) 공간 사용량 만 지불 합니다. 공간 사용량은 이전 백업 파일 (첫 번째가 아닌)과의 차이입니다. 중복 제거 스토리지의 동작은 비슷합니다.

설명하는 기능이 존재하지 않는 이유는 무엇입니까? 각 기능은 예산을 소비하여 다른 기능이 없습니다. 이것은 분명히 우선 순위 목록에서 충분히 충분하지 않았습니다. 그것이 무엇이 좋을지 잘 모르겠습니다. 커스텀베이스를 사용하는 것은 상당히 난해한 것 같습니다.


3

트랜잭션 로그 백업과 차등 백업을 혼동하지 마십시오. 목적이 다릅니다! "차등 백업"이라고 부르는 것은 실제로 "셀에 대한 모든 변경 사항을 기록하는 것"은 실제로 트랜잭션 로그 입니다.

차등 백업의 목적은 마지막 전체 백업 이후 변경된 정보 만 기록하여 결과 백업 파일의 크기를 작게 유지하고 RTO (복구 시간 목표) 내에 복원 시간을 유지하는 것입니다.

하지만 확실히 반드시 "가장 최근에 자주 - 트랜잭션 로그 백업의 목적은 시간에 임의의 지점으로 트랜잭션을 재생할 수 있도록하는 것입니다 무엇이든 일어날".

당신이 말하는 것은 실제로 가능하지만 전체 백업을 복원 한 다음 트랜잭션 로그를 복원해야합니다.

1 일째 전체 백업과 1 일과 5 일 사이에 모든 트랜잭션 로그 백업이있는 경우, 4 일째와 같이 데이터가있을 때까지 1 일째 백업을 복원하고 트랜잭션 로그를 재생하는 것을 막을 수있는 것은 없습니다. 더 적은 트랜잭션을 재생함에 따라 2 일 백업부터 시작할 수 있습니다. 1 일째 전체 백업, 3 일차 차등 백업을 복원 한 다음 트랜잭션 로그를 4 일째에 복원 할 수도 있습니다.

편집 : 좋아, 편집 한 비유가 조금 더 합리적입니다. 그러면 "트랜잭션 로그 백업으로 원하는 것을 이미 달성 할 수 있기"때문입니다. 차등 백업은 전체 트랜잭션 로그 활동을 기록하는 저렴하고 편리한 방법 일뿐입니다. 트랜잭션 로그 백업이 제공하지 않는 데이터 복구 세분성을 제공하지 않습니다. "단순한 편의"를 제공하여 제품으로 만드는 기능은 너무 많습니다.


나는 미안 ... 편집에 대한 제대로 비유, 대기를 표현한했다고 생각
elmer007

새로운 비유를 위해 편집되었습니다.
dpw 2016 년

1

Excel과 비유하면 사과와 오렌지를 비교하는 것입니다. 왜 ? Excel은 데이터 무결성이 없기 때문에 데이터베이스가 아닙니다. Excel은 매우 유용한 스프레드 시트 응용 프로그램이며 데이터베이스를 보완 할 수 있습니다.

SQL Server는 모든 데이터를 저장하고 쿼리하는 메커니즘을 제공하는 관계형 데이터베이스 시스템입니다. 데이터 무결성과 함께 데이터 관계가 중요하기 때문에 중요한 부분은 "관계형"입니다 (ACID 속성).

기본 사항 :

데이터베이스의 데이터는 사용자가 볼 수있는 논리적 구성 요소 (테이블, 뷰, 프로세서, 트리거 등)로 구성됩니다. 최소한 데이터베이스는 물리적으로 디스크에 2 개 (데이터 및 로그 파일) 이상 (2 차 데이터 파일) 파일로 구현됩니다.

  • 데이터베이스는 레코드 를 저장하는 데 사용되는 기본 데이터 저장 단위 인 페이지 를 포함 합니다 .
  • 데이터베이스 페이지는 데이터베이스 데이터 파일의 8192 바이트 (8KB) ​​청크입니다.
  • 데이터베이스 파일에서 8 개의 물리적으로 연속 된 페이지 (8 * 8KB = 64KB)가 extent를 형성합니다 .
  • IAM (Index Allocation Map) 페이지는 4GB 경계에 맞춰 단일 파일에서 약 4GB의 공간을 추적합니다. 이 4GB 청크를 GAM 간격 이라고 합니다 .

차등 백업이 가장 최근의 전체 백업만을 기반으로 할 수있는 이유. -또는-차등 백업이 마지막 전체 백업 이후 변경된 모든 것이라면 왜 차등을 선택한 백업을 기반으로 할 수 없습니까?

엑셀에 대한 귀하의 비유에 따르면, 당신이하고있는 일은 전자에 변경된 것을 적용하는 것입니다. 트랜잭션 로그에서 커밋 된 모든 트랜잭션이 적용됩니다 with STOP AT(참고 : 5 일에 파일이 엉망이되고 4 일에 중지됩니다)

모든 데이터 파일의 모든 4GB 섹션 (GAM 간격 이라고 함)에는 마지막 전체 백업 이후에 해당 4GB 섹션의 어느 부분 (범위)이 변경되었는지 추적 하는 차등 비트 맵이라는 특수 데이터베이스 페이지 가 있습니다. 데이터베이스에 추가되었습니다.

차등 백업은 이러한 비트 맵을 검색하여 변경된 것으로 표시된 데이터 파일 범위 만 백업합니다. 비트 맵은 다음 전체 백업으로 재설정 되므로 차등 백업은 가장 최근의 전체 백업 만 기반으로 할 수 있습니다. 따라서 점점 더 많은 데이터베이스가 변경 될수록 더 많은 비트가 차등 비트 맵에 표시됩니다. 연속 차등 백업은 점점 커질 것입니다.

이 스크립트를 사용 하여 마지막 전체 백업 이후 얼마나 많은 데이터베이스가 변경되었는지 확인할 수 있습니다 . .

차등 기반 정보는 master데이터베이스에 저장됩니다 sys.database_file(또는 sys.master_files-데이터베이스가 읽기 전용 또는 오프라인 일 때 유용합니다).

차등 기반 과 관련된 정보를 저장하는 3 개의 중요한 열이 있습니다 .

  • differential_base_lsn차동 백업베이스이다. 이후에 변경된 데이터 범위 differential_base_lsn는 차등 백업에 포함됩니다.
  • differential_base_guid의 고유 식별자 인 베이스 백업 , 차동 백업 기반이되는.
  • differential_base_time해당하는 시간입니다differential_base_lsn

차등 백업은 더 큰 전체 백업에 비해 RTO (복구 시간 목표 = 데이터베이스를 복구하는 데 걸리는 시간)의 속도를 높이는 데 유용합니다. 시간이 지남에 따라.

참고 : COPY_ONLY 전체 백업은 차등 기준을 재설정하지 않으므로 COPY_ONLY 백업은 차등 기준으로 사용할 수 없습니다.

참고 문헌 :



2
@PaulSRandal은 페이지를 기록하여 레코드를 저장했습니다. 그의 블로그에 그래서 나는 그것을 그대로 참조했습니다. 당신이 말한 것을 (참조에 근거하여) 논리적 참조를 취하는 것도 사실입니다!
Kin Shah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.