게시된 데이터 필터링Filter Published Data

테이블 아티클을 필터링하여 게시할 데이터 파티션을 만들 수 있습니다.Filtering table articles enables you to create partitions of data to be published. 게시된 데이터를 필터링하여 다음 작업을 수행할 수 있습니다.By filtering published data, you can:

  • 네트워크로 보내지는 데이터 양을 최소화합니다.Minimize the amount of data sent over the network.

  • 구독자에 필요한 저장소 공간을 줄입니다.Reduce the amount of storage space required at the Subscriber.

  • 개별 구독자 요구 사항에 기초하여 게시 및 응용 프로그램을 사용자 지정합니다.Customize publications and applications based on individual Subscriber requirements.

  • 서로 다른 구독자에 서로 다른 데이터 파티션을 보낼 수 있으므로 구독자가 데이터를 업데이트할 때 충돌을 방지하거나 충돌 횟수를 줄일 수 있습니다. 즉, 두 개의 구독자가 같은 데이터 값을 업데이트하지 않게 됩니다.Avoid or reduce conflicts if Subscribers are updating data, because different data partitions can be sent to different Subscribers (no two Subscribers will be updating the same data values).

  • 중요한 데이터를 전송하지 못하게 할 수 있습니다.Avoid transmitting sensitive data. 행 필터와 열 필터를 사용하여 구독자의 데이터 액세스를 제한할 수 있습니다.Row filters and column filters can be used to restrict a Subscriber's access to data. 병합 복제에서 HOST_NAME()을 포함하는 매개 변수가 있는 필터를 사용할 경우 보안 고려 사항이 있습니다.For merge replication, there are security considerations if you use a parameterized filter that includes HOST_NAME(). 자세한 내용은 Parameterized Row Filters의 "HOST_NAME()으로 필터링" 섹션을 참조하십시오.For more information, see the section "Filtering with HOST_NAME()" in Parameterized Row Filters.

    복제는 다음 4가지 형식의 필터를 제공합니다.Replication offers four types of filters:

  • 정적 행 필터 - 모든 복제 유형에 사용할 수 있음Static row filters, which are available with all types of replication.

    정적 행 필터를 사용하여 게시할 행의 하위 집합을 선택할 수 있습니다.Using static row filters, you can choose a subset of rows to be published. 필터링된 게시에 대한 모든 구독자는 필터링된 테이블 행의 동일한 하위 집합을 받습니다.All Subscribers to a filtered publication receive the same subset of rows for the filtered table. 자세한 내용은 이 항목의 "정적 행 필터" 섹션을 참조하십시오.For more information, see the section "Static Row Filters" in this topic.

  • 열 필터 - 모든 복제 유형에 사용할 수 있음Column filters, which are available with all types of replication.

    열 필터를 사용하여 게시할 열의 하위 집합을 선택할 수 있습니다.Using column filters, you can choose a subset of columns to be published. 자세한 내용은 이 항목의 "열 필터" 섹션을 참조하십시오.For more information, see the section "Column Filters" in this topic.

  • 매개 변수가 있는 행 필터 - 병합 복제에만 사용할 수 있음Parameterized row filters, which are available only with merge replication.

    매개 변수가 있는 행 필터를 사용하여 게시할 행의 하위 집합을 선택할 수 있습니다.Using parameterized row filters, you can choose a subset of rows to be published. 모든 구독자에게 행의 동일한 하위 집합을 보내는 정적 필터와 달리 매개 변수가 있는 행 필터는 구독자가 제공한 데이터 값을 사용하여 구독자에게 행의 다른 하위 집합을 보냅니다.Unlike static filters that send the same subset of rows to every Subscriber, parameterized row filters use a data value supplied by the Subscriber to send Subscribers different subsets of rows. 자세한 내용은 Parameterized Row Filters을 참조하세요.For more information, see Parameterized Row Filters.

  • 조인 필터 - 병합 복제에만 사용할 수 있음Join filters, which are available only with merge replication.

    조인 필터를 사용하여 다른 게시된 테이블로 행 필터를 확장할 수 있습니다.Using join filters, you can extend a row filter from one published table to another. 자세한 내용은 Join Filters을 참조하세요.For more information, see Join Filters.

정적 행 필터Static Row Filters

다음 그림에서는 2행, 3행, 6행만 게시에 포함되도록 필터링된 게시된 테이블을 보여 줍니다.The following illustration shows a published table that is filtered so that only rows 2, 3, and 6 are included in the publication.

행 필터링Row filtering

정적 행 필터는 WHERE 절을 사용하여 게시에 적합한 데이터를 선택합니다. WHERE 절의 마지막 부분은 사용자가 지정합니다.A static row filter uses a WHERE clause to select the appropriate data to be published; you specify the final part of the WHERE clause. ProductLine 열이 포함된 Adventure Works 예제 데이터베이스의 Product 테이블을 참조하십시오.Consider the Product Table in the Adventure Works sample database, which contains the column ProductLine. 산악 자전거 관련 제품에 대한 데이터가 있는 행만 게시하려면 ProductLine = 'M'을 지정합니다.To publish only the rows with data on products related to mountain bikes, specify ProductLine = 'M'.

정적 행 필터를 사용하면 각 게시에 대해 단일 데이터 집합이 생성됩니다.A static row filter results in a single set of data for each publication. 위의 예에서는 모든 구독자가 산악 자전거 관련 제품에 대한 데이터가 있는 행만 받게 됩니다.In the previous example, all Subscribers would receive only the rows with data on products related to mountain bikes. 일반 자전거 관련 제품에 대한 데이터가 있는 행만을 필요로 하는 다른 구독자가 있는 경우 다음을 수행하십시오.If you have another Subscriber that requires only the rows with data on products related to road bikes:

  • 스냅숏 또는 트랜잭션 복제를 사용하여 다른 게시를 만들고 두 게시에 해당 테이블을 포함시킵니다. 해당 게시에 있는 아티클에 대한 필터 절에는 ProductLine = 'R')을 지정합니다.With snapshot or transactional replication, you can create another publication and include the table in both publications (in the filter clause for the article in that publication, specify ProductLine = 'R').

    참고

    행을 복제해야 하는지 여부를 결정하도록 게시된 테이블에 대해 기록된 각 로그 행에 대해 아티클 필터 절이 평가되기 때문에 행 필터는 트랜잭션 게시에서 중요한 오버헤드를 추가할 수 있습니다.Row filters in transactional publications can add significant overhead because the article filter clause is evaluated for each log row written for a published table, to determine whether the row should be replicated. 각 복제 노드가 전체 데이터 로드를 지원할 수 있고 데이터 집합의 크기가 전체적으로 작은 경우 트랜잭션 게시에 행 필터를 사용하지 않아야 합니다.Row filters in transactional publications should be avoided if each replication node can support the full data load, and the overall data set is reasonably small.

  • 병합 복제의 경우 정적 행 필터가 있는 여러 게시를 만드는 대신 매개 변수가 있는 행 필터를 사용합니다.With merge replication, use parameterized row filters rather than creating multiple publications with static row filters. 자세한 내용은 Parameterized Row Filters을 참조하세요.For more information, see Parameterized Row Filters.

    정적 행 필터를 정의하거나 수정하려면 Define and Modify a Static Row Filter를 참조하십시오.To define or modify a static row filter, see Define and Modify a Static Row Filter.

열 필터Column Filters

다음 그림에서는 C 열을 필터링하여 제외하는 게시를 보여 줍니다.The following illustration shows a publication that filters out column C.

열 필터링Column filtering

다음 그림처럼 행 필터링과 열 필터링을 함께 사용할 수도 있습니다.You can also use row and column filtering together, as illustrated here.

행 및 열 필터링Row and column filtering

게시가 생성된 다음에는 열 필터링을 사용하여 열을 기존 게시에서는 삭제하고 게시자에서는 테이블에 유지할 수 있고 게시에 기존 열을 포함시킬 수 있습니다.After a publication is created, you can use column filtering to drop a column from an existing publication, but retain the column in the table at the Publisher, and also to include an existing column in the publication. 테이블에 새 열을 추가한 다음 이 열을 게시된 아티클에 추가하는 것과 같은 다른 변경에 대해서는 스키마 변경 복제를 사용합니다.For other changes, such as adding a new column to a table and then adding it to the published article, use schema change replication. 자세한 내용은 게시 데이터베이스의 스키마 변경 항목의 "열 추가" 및 "열 삭제" 섹션을 참조하세요.For more information, see the "Adding Columns" and "Dropping Columns" sections in the topic Make Schema Changes on Publication Databases.

다음 표에 나열된 특정 게시의 특정 열 유형은 필터링하여 제외시킬 수 없습니다.The types of columns listed in the following table cannot be filtered out of certain types of publications.

열 유형Column type 게시 유형 및 옵션Type of publication and options
기본 키 열Primary key column 기본 키 열은 트랜잭션 게시의 모든 테이블에 필요합니다.Primary key columns are required for all tables in transactional publications. 기본 키는 병합 게시의 테이블에 필요하지 않지만 기본 키 열이 있는 경우 필터링할 수 없습니다.Primary keys are not required for tables in merge publications, but if a primary key column is present, it cannot be filtered.
외래 키 열Foreign key column 새 게시 마법사를 사용하여 생성된 모든 게시입니다.All publications created using the New Publication wizard. Transact-SQL 저장 프로시저를 사용하여 외래 키 열을 필터링할 수 있습니다.You can filter foreign key columns using Transact-SQL stored procedures. 자세한 내용은 Define and Modify a Column Filter을 참조하십시오.For more information, Define and Modify a Column Filter.
rowguidThe rowguid column 병합 게시Merge publications
msrepl_tran_versionThe msrepl_tran_version column 업데이트할 수 있는 구독을 허용하는 스냅숏 게시나 트랜잭션 게시Snapshot or transactional publications that allow updatable subscriptions
NULL을 허용하지 않고 기본값 또는 IDENTITY 속성 설정이 없는 열Columns that do not allow NULL and do not have default values or the IDENTITY property set. 업데이트할 수 있는 구독을 허용하는 스냅숏 게시나 트랜잭션 게시Snapshot or transactional publications that allow updatable subscriptions
UNIQUE 제약 조건 또는 인덱스가 있는 열Columns with unique constraints or indexes 업데이트할 수 있는 구독을 허용하는 스냅숏 게시나 트랜잭션 게시Snapshot or transactional publications that allow updatable subscriptions
SQL Server 7.0 병합 게시의 모든 열All columns in a SQL Server 7.0 merge publication SQL Server 7.0 병합 게시에서는 열을 필터링할 수 없습니다.Columns cannot be filtered in SQL Server 7.0 merge publications.
타임스탬프Timestamp 업데이트할 수 있는 구독을 허용하는 SQL Server 7.0 스냅숏 또는 트랜잭션 게시SQL Server 7.0 snapshot or transactional publications that allow updatable subscriptions

*병합 게시에서 테이블을 게시하고 이 테이블에 이미 ROWGUIDCOL 속성이 설정된 uniqueidentifier 데이터 형식의 열이 있는 경우 복제는 rowguid라는 추가 열을 만들지 않고 복제에 이 열을 사용할 수 있습니다.*If you are publishing a table in a merge publication and that table already contains a column of data type uniqueidentifier with the ROWGUIDCOL property set, replication can use this column instead of creating an additional column named rowguid. 이 경우 기존 열을 게시해야 합니다.In this case, the existing column must be published.

열 필터를 정의하거나 수정하려면 Define and Modify a Column Filter의 "HOST_NAME()으로 필터링" 섹션을 참조하십시오.To define or modify a column filter, see Define and Modify a Column Filter.

필터링 고려 사항Filtering Considerations

데이터 필터링 시 다음 사항을 고려하십시오.Keep the following considerations in mind when filtering data:

  • 행 필터에 참조되는 모든 열은 게시에 포함되어야 합니다.All columns referenced in row filters must be included in the publication. 즉, 열 필터를 사용하여 행 필터에 사용되는 열을 제외할 수 없습니다.In other words, you cannot use a column filter to exclude a column that is used in a row filter.

  • 구독이 초기화된 후 필터를 추가하거나 변경한 경우에는 구독을 다시 초기화해야 합니다.If a filter is added or changed after subscriptions have been initialized, the subscriptions must be reinitialized.

  • 필터에 사용되는 열에 허용되는 최대 바이트 수는 병합 게시의 아티클의 경우에는1024, 트랜잭션 게시의 아티클의 경우에는 8000입니다.The maximum number of bytes allowed for a column used in a filter is 1024 for an article in a merge publication and 8000 for an article in a transactional publication.

  • 다음과 같은 데이터 형식이 있는 열은 행 필터나 조인 필터에 참조될 수 없습니다.Columns with the following data types cannot be referenced in row filters or join filters:

    • varchar(max) 및 nvarchar(max)varchar(max) and nvarchar(max)

    • varbinary(max)varbinary(max)

    • text 및 ntexttext and ntext

    • imageimage

    • XMLXML

    • UDTUDT

  • 트랜잭션 복제를 사용하면 인덱싱된 뷰를 뷰나 테이블로 복제할 수 있습니다.Transactional replication allows you to replicate an indexed view as a view or as a table. 뷰를 테이블로 복제하면 테이블의 열을 필터링할 수 없습니다.If you replicate the view as a table, you cannot filter columns from the table.

    행 필터는 데이터베이스에서 작동하도록 설계되지 않았습니다.Row filters are not designed to work across databases. SQL ServerSQL Serversp_replcmds 실행(필터 실행 대상)을 의도적으로 데이터베이스 소유자(dbo)로 제한합니다. intentionally restricts the execution of sp_replcmds (which filters execute under) to the database owner (dbo). dbo 에는 데이터베이스 간 권한이 없습니다.The dbo does not have cross database privileges. sp_replcmds 논리는 SQL Server 2008SQL Server 2008에 CDC(변경 데이터 캡처)를 추가하여 변경 내용 추적 테이블을 사용자가 반환하고 쿼리할 수 있는 정보로 채웁니다.With the addition of CDC (Change Data Capture) in SQL Server 2008SQL Server 2008 the sp_replcmds logic populates the change tracking tables with information that the user can return to and query. SQL ServerSQL Server는 보안을 위해 악성 dbo가 이 실행 경로를 가로채지 못하도록 이 논리의 실행을 제한합니다.For security reasons, SQL ServerSQL Server restricts the execution of this logic so that a malicious dbo can’t highjack this execution path. 예를 들어, 악성 dbosp_replcmds를 호출하는 사용자의 컨텍스트에서 실행될 수 있는 트리거를 CDC 테이블에 추가할 수 있으며, 이 경우 logreader 에이전트입니다.For example, a malicious dbo could add triggers on CDC tables which would then get executed under the context of the user calling sp_replcmds, in this case the logreader agent. 에이전트가 실행 중인 계정의 권한이 더 높은 경우 악성 dbo 가 자신의 권한을 에스컬레이션할 수 있습니다.If the account the agent is running under has higher privilege the malicious dbo could escalate his privileges.

참고 항목See Also

데이터 및 데이터베이스 개체 게시Publish Data and Database Objects