다음을 통해 공유


게시된 데이터 필터링

적용 대상: SQL Server Azure SQL Managed Instance

테이블 아티클을 필터링하면 게시할 데이터의 파티션을 만들 수 있습니다. 게시된 데이터를 필터링하여 다음을 수행할 수 있습니다.

  • 네트워크를 통해 전송되는 데이터의 양을 최소화합니다.

  • 구독자에 필요한 저장소 공간의 양을 줄입니다.

  • 개별 구독자 요구 사항에 따라 게시 및 애플리케이션을 사용자 지정합니다.

  • 다른 데이터 파티션을 다른 구독자에게 보낼 수 있으므로 구독자가 데이터를 업데이트하는 경우 충돌을 방지하거나 줄입니다(두 구독자가 동일한 데이터 값을 업데이트하지 않음).

  • 중요한 데이터를 전송하지 않습니다. 행 필터 및 열 필터를 사용하여 구독자의 데이터 액세스를 제한할 수 있습니다. 병합 복제에서 HOST_NAME()을 포함하는 매개 변수가 있는 필터를 사용할 경우 보안 고려 사항이 있습니다. 자세한 내용은 Parameterized Row Filters의 "HOST_NAME()으로 필터링" 섹션을 참조하십시오.

복제는 다음과 같은 네 가지 유형의 필터를 제공합니다.

  • 모든 유형의 복제에서 사용할 수 있는 정적 행 필터입니다.

    정적 행 필터를 사용하여 게시할 행의 하위 집합을 선택할 수 있습니다. 필터링된 게시의 모든 구독자는 필터링된 테이블에 대해 동일한 행의 하위 집합을 받습니다. 자세한 내용은 이 주제의 "정적 행 필터” 섹션을 참조하세요.

  • 모든 유형의 복제에서 사용할 수 있는 열 필터입니다.

    열 필터를 사용하여 게시할 열의 하위 집합을 선택할 수 있습니다. 자세한 내용은 이 항목의 "열 필터" 섹션을 참조하십시오.

  • 병합 복제에서만 사용할 수 있는 매개 변수가 있는 행 필터입니다.

    매개 변수가 있는 행 필터를 사용하여 게시할 행의 하위 집합을 선택할 수 있습니다. 모든 구독자에게 동일한 행 하위 집합을 보내는 정적 필터와 달리 매개 변수가 있는 행 필터는 구독자가 제공한 데이터 값을 사용하여 구독자에게 다른 행 하위 집합을 보냅니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.

  • 병합 복제에서만 사용할 수 있는 조인 필터입니다.

    조인 필터를 사용하여 게시된 테이블에서 다른 테이블로 행 필터를 확장할 수 있습니다. 자세한 내용은 Join Filters를 참조하세요.

정적 행 필터

다음 그림에서는 2행, 3행, 6행만 게시에 포함되도록 필터링된 게시된 테이블을 보여 줍니다.

행 필터링

정적 행 필터는 WHERE 절을 사용하여 게시할 적절한 데이터를 선택하며 WHERE 절의 마지막 부분을 지정합니다. ProductLine 열이 포함된 Adventure Works 샘플 데이터베이스의 제품 테이블을 고려합니다. 산악 자전거와 관련된 제품에 대한 데이터가 있는 행만 게시하려면 ProductLine = 'M'을 지정합니다.

정적 행 필터는 각 게시에 대해 단일 데이터 집합을 생성합니다. 이전 예제에서 모든 구독자는 산악 자전거와 관련된 제품에 대한 데이터가 있는 행만 받습니다. 도로 자전거와 관련된 제품에 대한 데이터가 있는 행만 필요한 다른 구독자가 있는 경우는 다음과 같습니다.

  • 스냅샷 또는 트랜잭션 복제를 사용하면 다른 게시를 만들고 두 게시에 테이블을 모두 포함할 수 있습니다(해당 게시의 아티클에 대한 필터 절에서 ProductLine = 'R') 지정).

    참고 항목

    트랜잭션 게시의 행 필터는 게시된 테이블에 대해 작성된 각 로그 행에 대해 아티클 필터 절을 평가하여 행을 복제해야 하는지 여부를 결정하기 때문에 상당한 오버헤드가 추가될 수 있습니다. 각 복제 노드가 전체 데이터 로드를 지원할 수 있고 전체 데이터 집합이 합리적으로 작은 경우 트랜잭션 게시의 행 필터를 피해야 합니다.

  • 병합 복제를 사용하면 정적 행 필터를 사용하여 여러 게시를 만드는 대신 매개 변수가 있는 행 필터를 사용합니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.

정적 행 필터를 정의하거나 수정하려면 정적 행 필터 정의 및 수정을 참조 하세요.

열 필터

다음 그림에서는 C 열을 필터링하여 제외하는 게시를 보여 줍니다.

열 필터링

다음 그림처럼 행 필터링과 열 필터링을 함께 사용할 수도 있습니다.

행 및 열 필터링

게시를 만든 후에는 열 필터링을 사용하여 기존 게시에서 열을 삭제할 수 있을 뿐만 아니라 게시자의 테이블에 열을 유지하고 게시에 기존 열을 포함할 수도 있습니다. 테이블에 새 열을 추가한 다음 게시된 아티클에 추가하는 등의 다른 변경 내용은 스키마 변경 복제를 사용합니다. 자세한 내용은 게시 데이터베이스의 스키마 변경 항목에서 "열 추가" 및 "열 삭제" 섹션을 참조하세요.

다음 표에 나열된 열 형식은 특정 유형의 게시에서 필터링할 수 없습니다.

열 유형 게시 및 옵션의 유형
기본 키 열 기본 키 열은 트랜잭션 게시의 모든 테이블에 필요합니다. 병합 게시의 테이블에는 기본 키가 필요하지 않지만 기본 키 열이 있는 경우 필터링할 수 없습니다.
외래 키 열 새 게시 마법사를 사용하여 생성된 모든 게시입니다. Transact-SQL 저장 프로시저를 사용하여 외래 키 열을 필터링할 수 있습니다. 자세한 내용은 Define and Modify a Column Filter을 참조하십시오.
rowguid 병합 게시*
msrepl_tran_version 업데이트할 수 있는 구독을 허용하는 스냅샷 게시나 트랜잭션 게시
NULL을 허용하지 않고 기본값 또는 IDENTITY 속성 집합이 없는 열입니다. 업데이트할 수 있는 구독을 허용하는 스냅샷 게시나 트랜잭션 게시
고유한 제약 조건 또는 인덱스가 있는 열 업데이트할 수 있는 구독을 허용하는 스냅샷 게시나 트랜잭션 게시
SQL Server 7.0 병합 게시의 모든 열 SQL Server 7.0 병합 게시에서는 열을 필터링할 수 없습니다.
타임스탬프 업데이트할 수 있는 구독을 허용하는 SQL Server 7.0 스냅샷 게시나 트랜잭션 게시

*병합 게시에서 테이블을 게시하고 이 테이블에 이미 ROWGUIDCOL 속성 집합이 있는 uniqueidentifier 데이터 형식의 열이 있는 경우 복제는 rowguid라는 추가 열을 만드는 대신 이 열을 사용할 수 있습니다. 이 경우 기존 열을 게시해야 합니다.

열 필터를 정의하거나 수정하려면 열 필터 정의 및 수정을 참조하세요.

필터링 고려 사항

데이터를 필터링할 때는 다음 사항을 고려해야 합니다.

  • 행 필터에서 참조되는 모든 열은 게시에 포함되어야 합니다. 즉, 열 필터를 사용하여 행 필터에 사용되는 열을 제외할 수 없습니다.

  • 구독을 초기화한 후 필터가 추가되거나 변경되면 구독을 다시 초기화해야 합니다.

  • 필터에 사용되는 열에 허용되는 최대 바이트 수는 병합 게시의 아티클의 경우 1,024이고 트랜잭션 게시의 아티클의 경우 8,000입니다.

  • 다음과 같은 데이터 형식이 있는 열은 행 필터나 조인 필터에 참조될 수 없습니다.

    • varchar(max) 및 nvarchar(max)

    • varbinary(max)

    • text 및 ntext

    • image

    • XML

    • UDT

  • 트랜잭션 복제를 사용하면 인덱싱된 뷰를 보기 또는 테이블로 복제할 수 있습니다. 뷰를 테이블로 복제하면 테이블의 열을 필터링할 수 없습니다.

행 필터는 데이터베이스에서 작동하도록 설계되지 않았습니다. SQL Server는 sp_replcmds 실행(필터 실행 대상)을 의도적으로 데이터베이스 소유자(dbo)로 제한합니다. dbo에는 데이터베이스 간 권한이 없습니다. sp_replcmds 논리는 SQL Server 2008(10.0.x)에 CDC(변경 데이터 캡처)를 추가하여 변경 내용 추적 테이블을 사용자가 반환하고 쿼리할 수 있는 정보로 채웁니다. 보안상의 이유로 SQL Server는 악성 dbo가 이 실행 경로를 가로채지 못하도록 이 논리의 실행을 제한합니다. 예를 들어, 악성 dbosp_replcmds를 호출하는 사용자의 컨텍스트에서 실행될 수 있는 트리거를 CDC 테이블에 추가할 수 있으며, 이 경우 logreader 에이전트입니다. 에이전트가 실행 중인 계정이 더 높은 권한을 가지면 악의적인 dbo가 그 권한을 에스컬레이션할 수 있습니다.

참고 항목

데이터 및 데이터베이스 개체 게시