게시된 데이터 필터링

적용 대상:SQL ServerAzure SQL Managed Instance

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

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

  • 구독자에 필요한 스토리지 공간의 양을 줄입니다.

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

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

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

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

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

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

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

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

  • 병합 복제본(replica)만 사용할 수 있는 매개 변수가 있는 행 필터입니다.

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

  • 병합 복제본(replica)만 사용할 수 있는 조인 필터입니다.

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

정적 행 필터

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

Row filtering

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

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

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

    참고 항목

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

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

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

열 필터

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

Column filtering

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

Row and column filtering

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

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

열 유형 게시 및 옵션의 유형
기본 키 열 기본 키 열은 트랜잭션 게시의 모든 테이블에 필요합니다. 병합 게시의 테이블에는 기본 키가 필요하지 않지만 기본 키 열이 있는 경우 필터링할 수 없습니다.
외래 키 열 새 게시 마법사를 사용하여 만든 모든 게시입니다. 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 열이 이미 포함되어 있는 경우 복제본(replica)tion은 rowguid라는 추가 열을 만드는 대신 이 열을 사용할 수 있습니다. 이 경우 기존 열을 게시해야 합니다.

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

필터링 고려 사항

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

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

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

  • 필터에 사용되는 열에 허용되는 최대 바이트 수는 병합 게시의 아티클에 대해 1024이고 트랜잭션 게시의 아티클에는 8000입니다.

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

    • varchar(max) 및 nvarchar(max)

    • varbinary(max)

    • text 및 ntext

    • image

    • XML

    • UDT

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

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

참고 항목

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