다음을 통해 공유


복제된 테이블 및 인덱스

적용 대상: SQL Server Azure SQL Managed Instance

분할을 사용하면 데이터 하위 집합을 빠르고 효율적으로 액세스하고 관리하는 동시에 데이터 컬렉션의 무결성을 유지할 수 있으므로 큰 테이블이나 인덱스를 보다 쉽게 관리할 수 있습니다. 자세한 내용은 Partitioned Tables and Indexes을 참조하세요. 복제는 분할된 테이블 및 인덱스를 처리하는 방법을 지정하는 속성 집합을 제공하여 분할을 지원합니다.

트랜잭션과 병합 복제에 대한 아티클 속성

다음 표에서는 데이터를 분할하는 데 사용되는 개체를 나열합니다.

Object 사용하여 생성됨
분할된 테이블 및 인덱스 CREATE TABLE 또는 CREATE INDEX
파티션 함수 CREATE PARTITION FUNCTION
파티션 구성표 CREATE PARTITION SCHEME

분할 속성은 분할 개체를 구독자에 복사해야 하는지 여부를 결정하는 아티클 스키마 옵션입니다. 이러한 스키마 옵션은 다음과 같은 방법으로 설정할 수 있습니다.

  • 새 게시 마법사의 아티클 속성 페이지 또는 게시 속성 대화 상자를 사용합니다. 이전 테이블에 나열된 개체를 복사하려면 테이블 분할 구성표 복사 및 인덱스 분할 스키마 복사 속성에 대해 true값을 지정합니다. 아티클 속성 페이지에 액세스하는 방법은 게시 속성 보기 및 수정을 참조하세요.

  • 다음 저장 프로시저 중 하나의 schema_option 매개 변수를 사용합니다.

    이전 표에 나열된 개체를 복사하려면 적절한 스키마 옵션 값을 지정합니다. 스키마 옵션을 지정하는 방법에 대한 자세한 내용은 스키마 옵션 지정을 참조 하세요.

복제는 초기 동기화 중에 구독자에 개체를 복사합니다. 파티션 구성표에서 PRIMARY 파일 그룹 이외의 파일 그룹을 사용하는 경우 초기 동기화 전에 해당 파일 그룹이 구독자에 있어야 합니다.

구독자가 초기화되면 데이터 변경 내용이 구독자에 전파되어 적절한 파티션에 적용됩니다. 그러나 파티션 구성표 변경은 지원되지 않습니다. 트랜잭션 및 병합 복제는 PARTITION FUNCTION, ALTER PARTITION SCHEME, 또는 ALTER INDEX의 REBUILD WITH PARTITION 문 명령을 복제하는 것을 지원하지 않습니다. 연결된 변경 내용은 구독자에 자동으로 복제되지 않습니다. 구독자에서 수동으로 유사한 변경을 하는 것은 사용자의 책임입니다.

파티션 전환에 대한 복제 지원

테이블 분할의 주요 이점 중 하나는 파티션 간에 데이터의 하위 집합을 빠르고 효율적으로 이동할 수 있다는 것입니다. 데이터는 SWITCH PARTITION 문을 사용하여 이동합니다. 기본적으로 테이블을 복제에 사용하도록 설정하면 다음과 같은 이유로 SWITCH PARTITION 작업이 차단됩니다.

  • 게시자에는 있지만 구독자에는 없는 테이블 안팎으로 데이터를 이동하면 게시자와 구독자 간에 일관성이 유지되지 않을 수 있습니다. 일반적으로 이 문제는 준비 테이블 안팎으로 데이터를 이동하는 경우 발생합니다.

  • 구독자가 분할된 테이블에 대한 정의가 게시자와 다른 경우 구독자에서 변경 내용을 적용하려고 하면 배포 에이전트가 실패합니다.

이러한 잠재적인 문제에도 불구하고 트랜잭션 복제에 파티션 전환을 사용하도록 설정할 수 있습니다. 파티션 전환을 사용하도록 설정하기 전에 파티션 전환에 관련된 모든 테이블이 게시자 및 구독자에 있는지 확인하고 테이블과 파티션 정의가 동일한지 확인합니다.

파티션이 게시자와 구독자가 정확히 동일한 파티션 구성표를 갖는 경우 replication_partition_switch 함께 allow_partition_switch를 켤 수 있습니다. 이렇게 하면 파티션 스위치 문만 구독자에 복제됩니다. DDL을 복제하지 않고도 allow_partition_switch 켤 수도 있습니다. 이는 이전 월을 파티션에서 롤아웃하고 구독자에서 백업을 위해 복제된 파티션을 1년 동안 유지하려는 경우에 유용합니다.

현재 버전을 통해 SQL Server 2008 R2에서 파티션 전환을 사용하도록 설정하는 경우 가까운 미래에 분할 및 병합 작업이 필요할 수도 있습니다. 복제 또는 CDC 사용 테이블에서 분할 또는 병합 작업을 실행하기 전에 해당 파티션에 보류 중인 복제 명령이 없는지 확인합니다. 또한 분할 및 병합 작업 중에는 파티션에서 DML 작업이 실행되고 있지 않아야 합니다. 로그 판독기 또는 CDC 캡처 작업이 처리되지 않은 트랜잭션이 있거나 분할 또는 병합 작업이 실행되는 동안 복제 또는 CDC 사용 테이블의 파티션에서 DML 작업이 수행되는 경우(동일한 파티션 포함) 로그 판독기 에이전트 또는 CDC 캡처 작업과 함께 처리 오류(오류 608 - 파티션 ID에 대한 카탈로그 항목을 찾을 수 없음)가 발생할 수 있습니다. 오류를 수정하려면 구독을 다시 초기화하거나 해당 테이블 또는 데이터베이스에서 CDC를 사용하지 않도록 설정해야 할 수도 있습니다.

지원되지 않는 시나리오

파티션 전환에 복제를 사용할 때 다음 시나리오는 지원되지 않습니다.

피어 투 피어 복제
피어 투 피어 복제는 파티션 전환에서 지원되지 않습니다.

파티션 전환과 함께 변수 사용

트랜잭션 복제 또는 CDC(변경 데이터 캡처)로 게시된 테이블에서 변수를 사용한 파티션 전환은 ALTER TABLE ... SWITCH TO ... PARTITION ... 문에서 지원되지 않습니다.

예를 들어 다음 파티션 전환 코드는 데이터베이스에서 활성화된 CDC 또는 트랜잭션 게시에 참여하는 TableA에서 작동하지 않습니다.

DECLARE @SomeVariable INT = $PARTITION.pf_test(10);
ALTER TABLE dbo.TableA
SWITCH TO dbo.TableB 
PARTITION @SomeVariable;

그 대신, 다음 예제와 같이 파티션 함수를 사용하여 파티션을 직접 전환합니다.

ALTER TABLE NonPartitionedTable 
SWITCH TO PartitionedTable PARTITION $PARTITION.pf_test(10);

파티션 전환 사용

다음과 같은 트랜잭션 게시 속성을 사용하면 사용자가 복제된 환경에서 파티션 전환의 동작을 제어할 수 있습니다.

  • @allow_partition_switch. true로 설정하면 게시 데이터베이스에 대해 SWITCH PARTITION을 실행할 수 있습니다.

  • @replicate_partition_switch 는 SWITCH PARTITION DDL 문을 구독자에 복제해야 하는지 여부를 결정합니다. 이 옵션은 @allow_partition_switchtrue로 설정한 경우에만 유효합니다.

게시를 만들 때 sp_addpublication 사용하거나 게시를 만든 후 sp_changepublication 사용하여 이러한 속성을 설정할 수 있습니다. 앞에서 설명한 것처럼 병합 복제는 파티션 전환을 지원하지 않습니다. 병합 복제를 사용하도록 설정된 테이블에서 SWITCH PARTITION을 실행하려면 게시에서 테이블을 제거합니다.