sp_changemergearticle(Transact-SQL)

병합 아티클의 속성을 변경합니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_changemergearticle [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @property = ] 'property' ]
    [ , [ @value = ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

인수

  • [ @publication=] 'publication'
    아티클이 있는 게시의 이름입니다. publication은 sysname이며 기본값은 없습니다.

  • [ @article=] 'article'
    변경할 아티클의 이름입니다. article은 sysname이며 기본값은 없습니다.

  • [ @property=] 'property'
    지정된 아티클 및 게시에 대해 변경할 속성입니다. property는 nvarchar(30)이며 표에 나열된 값 중 하나일 수 있습니다.

  • [ @value=] 'value'
    지정한 속성에 대한 새 값입니다. value는 nvarchar(1000)이며 표에 나열된 값 중 하나일 수 있습니다.

    다음 표에서는 아티클의 속성 및 해당 속성의 값을 설명합니다.

    속성

    설명

    allow_interactive_resolver

    true

    아티클에 대해 대화형 해결 프로그램을 사용합니다.

     

    false

    아티클에 대해 대화형 해결 프로그램을 사용하지 않습니다.

    article_resolver

     

    아티클에 대한 사용자 지정 해결 프로그램입니다. 테이블 아티클에만 적용됩니다.

    check_permissions(비트맵)

    0x00

    테이블 수준 권한을 확인하지 않습니다.

     

    0x10

    구독자에서 작성된 INSERT 문이 게시자에 적용되기 전에 게시자에서 테이블 수준 권한을 확인합니다.

     

    0x20

    구독자에서 작성된 UPDATE 문이 게시자에 적용되기 전에 게시자에서 테이블 수준 권한을 확인합니다.

     

    0x40

    구독자에서 작성된 DELETE 문이 게시자에 적용되기 전에 게시자에서 테이블 수준 권한을 확인합니다.

    column_tracking

    true

    열 수준 추적을 설정합니다. 테이블 아티클에만 적용됩니다.

    참고참고
    246개가 넘는 열이 포함된 테이블을 게시할 때는 열 수준 추적을 사용할 수 없습니다.

     

    false

    열 수준 추적을 해제하고 행 수준에서 충돌 감지를 유지합니다. 테이블 아티클에만 적용됩니다.

    compensate_for_errors

    true

    동기화 중 오류가 발생하면 보정 동작을 수행합니다. 자세한 내용은 sp_addmergearticle을 참조하십시오.

     

    false

    보정 동작을 수행하지 않습니다(기본 동작). 자세한 내용은 sp_addmergearticle을 참조하십시오.

    중요 정보중요
    영향을 받는 행의 데이터가 일치하지 않은 것으로 나타날 수 있지만 오류를 처리하면 바로 변경 내용을 적용할 수 있어서 데이터가 일치하게 됩니다. 아티클의 원본 테이블이 이미 다른 게시에 게시된 경우 compensate_for_errors의 값은 두 아티클에 대해 동일해야 합니다.

    creation_script

     

    구독 데이터베이스에서 아티클을 만드는 데 사용된 선택적 아티클 스키마 스크립트의 경로 및 이름입니다.

    delete_tracking

    true

    DELETE 문을 복제합니다(기본 동작).

     

    false

    DELETE 문을 복제하지 않습니다.

    중요 정보중요
    delete_trackingfalse로 설정하면 불일치가 발생하며 삭제된 행을 수동으로 제거해야 합니다.

    description

     

    아티클에 대한 설명 항목입니다.

    destination_owner

     

    dbo가 아닌 경우 구독 데이터베이스의 개체 소유자 이름입니다.

    identity_range

     

    아티클의 identityrangemanagementoptionauto로 설정되어 있거나 auto_identity_rangetrue로 설정된 경우 새 ID 값을 할당할 때 사용할 범위 크기를 지정하는 bigint입니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하십시오.

    identityrangemanagementoption

    manual

    자동 ID 범위 관리를 사용하지 않습니다. 수동 ID 범위 처리를 사용하려면 NOT FOR REPLICATION을 사용하여 ID 열을 표시합니다. 자세한 내용은 ID 열 복제를 참조하십시오.

     

    none

    모든 ID 범위 관리를 사용하지 않습니다.

    logical_record_level_conflict_detection

    true

    논리적 레코드에 변경 사항이 발생하면 충돌이 감지됩니다. logical_record_level_conflict_resolutiontrue로 설정해야 합니다.

     

    false

    column_tracking에 지정된 대로 기본 충돌 감지를 사용합니다.

    logical_record_level_conflict_resolution

    true

    전체 적용되는 논리적 레코드가 무시되는 논리적 레코드를 덮어씁니다.

     

    false

    적용되는 행은 논리적 레코드로 제한되지 않습니다.

    partition_options

    0

    아티클에 대한 필터링이 정적이거나 각 파티션에 대한 고유한 데이터 하위 집합을 생성하지 않습니다. 즉, "겹치는" 파티션입니다.

     

    1

    파티션이 겹치며 구독자에서 DML 업데이트를 수행해도 행이 속한 파티션이 변경되지 않습니다.

     

    2

    아티클을 필터링하면 겹치지 않는 파티션이 생성되지만 여러 구독자가 동일한 파티션을 받을 수 있습니다.

     

    3

    아티클을 필터링하면 각 구독에 고유한 겹치지 않는 파티션이 생성됩니다.

    참고참고
    partition_options 값으로 3을 지정하면 해당 아티클에 있는 각 데이터 파티션에 대해 구독이 하나만 있을 수 있습니다. 새 구독의 필터링 조건이 기존 구독과 동일한 파티션을 사용하도록 하여 두 번째 구독이 생성될 경우 기존 구독이 삭제됩니다.

    pre_creation_command

    none

    구독자에 이미 테이블이 존재하는 경우 아무런 동작이 발생하지 않습니다.

     

    delete

    하위 집합 필터의 WHERE 절을 기반으로 하여 삭제를 실행합니다.

     

    drop

    테이블을 다시 만들기 전에 삭제합니다.

     

    truncate

    대상 테이블을 자릅니다.

    processing_order

     

    병합 게시에서 아티클의 처리 순서를 나타내는 int입니다.

    pub_identity_range

     

    아티클의 identityrangemanagementoptionauto로 설정되어 있거나 auto_identity_rangetrue로 설정된 경우 서버 구독이 있는 구독자에 할당되는 범위 크기를 지정하는 bigint입니다. 이 ID 범위는 재게시 구독자가 해당 구독자에게 할당하도록 예약됩니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하십시오.

    published_in_tran_pub

    true

    아티클을 트랜잭션 게시에도 게시합니다.

     

    false

    아티클을 트랜잭션 게시에 게시하지 않습니다.

    resolver_info

     

    사용자 지정 해결 프로그램에 필요한 추가 정보를 지정하는 데 사용합니다. 일부 Microsoft 해결 프로그램에는 입력으로 제공되는 열이 필요합니다. resolver_info는 nvarchar(255)이며 기본값은 NULL입니다. 자세한 내용은 Microsoft COM 기반 해결 프로그램을 참조하십시오.

    schema_option(비트맵)

    자세한 내용은 이 항목의 뒷부분에 나오는 주의 섹션을 참조하십시오.

     

    0x00

    스냅숏 에이전트의 스크립팅을 사용할 수 없으므로 creation_script에 제공된 스크립트를 사용합니다.

     

    0x01

    개체 만들기 스크립트(CREATE TABLE, CREATE PROCEDURE 등)를 생성합니다.

     

    0x10

    해당 클러스터형 인덱스를 생성합니다.

     

    0x20

    사용자 정의 데이터 형식을 구독자에서의 기본 데이터 형식으로 변환합니다. UDT 열에 CHECK 또는 DEFAULT 제약 조건이 있거나 UDT(사용자 정의 형식) 열이 기본 키의 일부이거나 계산 열이 UDT 열을 참조하는 경우 이 옵션을 사용할 수 없습니다.

     

    0x40

    해당 비클러스터형 인덱스를 생성합니다.

     

    0x80

    기본 키에 대해 선언된 참조 무결성을 포함합니다.

     

    0x100

    정의된 경우 테이블 아티클에 사용자 트리거를 복제합니다.

     

    0x200

    FOREIGN KEY 제약 조건을 복제합니다. 참조되는 테이블이 게시의 일부가 아닌 경우 게시된 테이블의 모든 FOREIGN KEY 제약 조건은 복제되지 않습니다.

     

    0x400

    CHECK 제약 조건을 복제합니다.

     

    0x800

    기본값을 복제합니다.

     

    0x1000

    열 수준 데이터 정렬을 복제합니다.

     

    0x2000

    게시된 아티클 원본 개체와 연관된 확장 속성을 복제합니다.

     

    0x4000

    테이블 아티클에 정의된 경우 고유 키를 복제합니다.

     

    0x8000

    제약 조건을 스크립팅할 때 ALTER TABLE 문을 생성합니다.

     

    0x10000

    동기화하는 동안 CHECK 제약 조건이 강제 적용되지 않도록 해당 제약 조건을 NOT FOR REPLICATION으로 복제합니다.

     

    0x20000

    동기화하는 동안 FOREIGN KEY 제약 조건이 강제 적용되지 않도록 해당 제약 조건을 NOT FOR REPLICATION으로 복제합니다.

     

    0x40000

    분할된 테이블이나 인덱스와 연결된 파일 그룹을 복제합니다.

     

    0x80000

    분할된 테이블에 대한 파티션 구성표를 복제합니다.

     

    0x100000

    분할된 인덱스에 대한 파티션 구성표를 복제합니다.

     

    0x200000

    테이블 통계를 복제합니다.

     

    0x400000

    기본 바인딩을 복제합니다.

     

    0x800000

    규칙 바인딩을 복제합니다.

     

    0x1000000

    전체 텍스트 인덱스를 복제합니다.

     

    0x2000000

    xml 열에 바인딩된 XML 스키마 컬렉션을 복제하지 않습니다.

     

    0x4000000

    xml 열의 인덱스를 복제합니다.

     

    0x8000000

    구독자에 없는 스키마를 만듭니다.

     

    0x10000000

    구독자에서 xml 열을 ntext로 변환합니다.

     

    0x20000000

    SQL Server 2005에서 도입된 큰 개체 데이터 형식(nvarchar(max), varchar(max) 및 varbinary(max))을 SQL Server 2000에서 지원되는 데이터 형식으로 변환합니다. 이러한 형식을 매핑하는 방법은 복제 토폴로지에 SQL Server의 여러 버전 사용의 "이전 버전에 대한 새 데이터 형식 매핑" 섹션을 참조하십시오.

     

    0x40000000

    사용 권한을 복제합니다.

     

    0x80000000

    게시의 일부가 아닌 개체에 대한 종속성을 삭제합니다.

    0x100000000

    varbinary(max) 열에 FILESTREAM 특성이 지정된 경우 해당 특성을 복제하려면 이 옵션을 사용합니다. 테이블을 SQL Server 2005 구독자에 복제할 경우에는 이 옵션을 지정하지 마십시오. FILESTREAM 열이 있는 테이블은 이 스키마 옵션의 설정 방식에 관계없이 SQL Server 2000 구독자에 복제할 수 없습니다. 관련 옵션 0x800000000을 참조하십시오.

    0x200000000

    SQL Server 2008에서 도입된 날짜 및 시간 데이터 형식(date, time, datetimeoffset 및 datetime2)을 이전 버전의 SQL Server에서 지원되는 데이터 형식으로 변환합니다. 이러한 형식을 매핑하는 방법은 복제 토폴로지에 SQL Server의 여러 버전 사용의 "이전 버전에 대한 새 데이터 형식 매핑" 섹션을 참조하십시오.

    0x400000000

    데이터 및 인덱스에 대한 압축 옵션을 복제합니다. 자세한 내용은 압축된 테이블 및 인덱스 만들기를 참조하십시오.

    0x800000000

    FILESTREAM 데이터를 구독자에서 고유한 파일 그룹에 저장하려면 이 옵션을 설정합니다. 이 옵션을 설정하지 않으면 FILESTREAM 데이터는 기본 파일 그룹에 저장됩니다. 복제 기능에서는 파일 그룹을 만들지 않으므로 이 옵션을 설정할 경우 구독자에서 스냅숏을 적용하기 전에 파일 그룹을 만들어야 합니다. 스냅숏을 적용하기 전에 개체를 만드는 방법은 스냅숏 적용 전후에 스크립트 실행을 참조하십시오.

    관련 옵션 0x100000000을 참조하십시오.

    0x1000000000

    SQL Server 2005를 실행하고 있는 구독자에 UDT(사용자 정의 형식) 형식의 열을 복제할 수 있도록 CLR(공용 언어 런타임) UDT를 varbinary(max)로 변환합니다.

    0x2000000000

    SQL Server 2005를 실행하고 있는 구독자에 hierarchyid 형식의 열을 복제할 수 있도록 hierarchyid 데이터 형식을 varbinary(max)로 변환합니다. 복제된 테이블의 hierarchyid 열을 사용하는 방법은 hierarchyid(Transact-SQL)를 참조하십시오.

    0x4000000000

    테이블의 필터링된 인덱스를 복제합니다. 필터링된 인덱스에 대한 자세한 내용은 필터링된 인덱스 디자인 지침을 참조하십시오.

     

    0x8000000000

    geography 및 geometry 데이터 형식을 varbinary(max)로 변환하여 SQL Server 2005를 실행하고 있는 구독자에 이러한 형식의 열을 복제할 수 있도록 합니다.

     

    0x10000000000

    geography 및 geometry 형식의 열에 대한 인덱스를 복제합니다.

     

    NULL

    시스템에서 아티클에 대해 유효한 스키마 옵션을 자동으로 생성합니다.

    status

    active

    테이블 게시를 위한 초기 처리 스크립트가 실행됩니다.

     

    unsynced

    스냅숏 에이전트가 다음에 실행될 때 테이블 게시를 위한 초기 처리 스크립트가 실행됩니다.

    stream_blob_columns

    true

    BLOB(Binary Large Object) 열을 복제할 때 데이터 스트림 최적화를 사용합니다. 그러나 논리적 레코드와 같은 특정 병합 복제 기능은 스트림 최적화를 사용할 수 없도록 합니다. FILESTREAM을 사용하는 경우 stream_blob_columns는 true로 설정됩니다. 그러면 FILESTREAM 데이터 복제가 최적의 방식으로 수행되고 메모리 활용률이 낮아집니다 FILESTREAM 테이블 아티클에서 blob 스트리밍을 사용하지 않도록 하려면 stream_blob_columns를 false로 설정합니다.

    중요 정보중요
    이 메모리 최적화를 설정하면 동기화 중에 병합 에이전트의 성능이 느려질 수 있습니다. MB 단위의 데이터가 포함된 열을 복제할 때만 이 옵션을 사용해야 합니다.

     

    false

    BLOB 열을 복제할 때 최적화를 사용하지 않습니다.

    subscriber_upload_options

    0

    클라이언트 구독이 있는 구독자에서 수행되는 업데이트에 제한이 없으며 변경 내용이 게시자로 업로드됩니다. 이 속성을 변경하려면 기존 구독자를 다시 초기화해야 합니다.

     

    1

    클라이언트 구독이 있는 구독자에서 변경이 허용되지만 변경 내용이 게시자로 업로드되지 않습니다.

     

    2

    클라이언트 구독이 있는 구독자에서 변경이 허용되지 않습니다.

    subset_filterclause

     

    행 필터링을 지정하는 WHERE 절입니다. 테이블 아티클에만 적용됩니다.

    중요 정보중요
    성능상의 이유로 LEFT([MyColumn]) = SUSER_SNAME()과 같은 매개 변수가 있는 행 필터 절의 열 이름에는 함수를 적용하지 않는 것이 좋습니다. 필터 절에 HOST_NAME을 사용하여 HOST_NAME 값을 다시 정의할 경우 CONVERT를 사용하여 데이터 형식을 변환해야 할 수도 있습니다. 이를 위한 최선의 구현 방법은 매개 변수가 있는 행 필터의 "HOST_NAME() 값 재지정" 섹션을 참조하십시오.

    threshold

     

    SQL Server Compact 3.5 SP2 또는 이전 버전의 SQL Server를 실행하는 구독자에 사용되는 백분율 값입니다. threshold는 병합 에이전트가 새 ID 범위를 할당하는 시점을 제어합니다. 임계값에 지정된 백분율 값을 사용하는 경우 해당 병합 에이전트가 새 ID 범위를 만듭니다. identityrangemanagementoptionauto로 설정되어 있거나 auto_identity_rangetrue로 설정되어 있는 경우 사용됩니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하십시오.

    verify_resolver_signature

    1

    트러스트된 원본에서 제공된 것인지 판단하기 위해 사용자 지정 해결 프로그램의 디지털 서명을 확인합니다

     

    0

    트러스트된 원본에서 제공된 것인지 판단하기 위해 사용자 지정 해결 프로그램의 디지털 서명을 확인을 하지 않습니다.

    NULL(기본값)

     

    property에 대해 지원되는 값 목록을 반환합니다.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    이 저장 프로시저가 수행한 동작으로 인해 기존 스냅숏이 무효화될 수도 있습니다. force_invalidate_snapshot은 bit이며 기본값은 0입니다.

    0은 병합 아티클에 대한 변경으로 인해 스냅숏이 무효화되지 않도록 지정합니다. 저장 프로시저가 새 스냅숏을 필요로 하는 변경을 감지하면 오류가 발생하며 변경이 수행되지 않습니다.

    1은 병합 아티클의 변경이 스냅숏을 무효화함을 의미하며 새 스냅숏을 필요로 하는 기존 구독이 있는 경우 기존 스냅숏을 오래되어 사용되지 않음으로 표시하고 새 스냅숏을 생성할 권한을 부여합니다.

    변경 시 새 스냅숏의 생성을 필요로 하는 속성에 대해서는 주의 섹션을 참조하십시오.

  • [ @force_reinit_subscription = ] force_reinit_subscription
    이 저장 프로시저가 수행한 동작으로 인해 기존 구독을 다시 초기화해야 할 수도 있습니다. force_reinit_subscription은 bit이며 기본값은 0입니다.

    0은 병합 아티클에 대한 변경으로 인해 구독이 다시 초기화되지 않도록 지정합니다. 저장 프로시저가 기존 구독의 다시 초기화를 필요로 하는 변경을 감지하면 오류가 발생하며 변경이 수행되지 않습니다.

    1은 병합 아티클에 대한 변경으로 인해 기존 구독이 다시 초기화됨을 의미하며 구독을 다시 초기화할 수 있는 권한을 부여합니다.

    변경 시 기존의 모든 구독을 다시 초기화해야 하는 속성에 대해서는 주의 섹션을 참조하십시오.

반환 코드 값

0(성공) 또는 1(실패)

주의

sp_changemergearticle은 병합 복제에 사용됩니다.

sp_changemergearticlesp_addmergearticle을 사용하여 초기에 지정된 아티클 속성을 변경하는 데 사용되므로 이러한 속성에 대한 추가 정보는 sp_addmergearticle을 참조하십시오.

다음 속성을 변경하려면 새 스냅숏을 생성해야 하며 force_invalidate_snapshot 매개 변수 값으로 1을 지정해야 합니다.

  • check_permissions

  • column_tracking

  • destination_owner

  • pre_creation_cmd

  • schema_options

  • subset_filterclause

다음 속성을 변경하려면 기존 구독을 다시 초기화해야 하며 force_reinit_subscription 매개 변수 값으로 1을 지정해야 합니다.

  • check_permissions

  • column_tracking

  • destination_owner

  • subscriber_upload_options

  • subset_filterclause

partition_options 값으로 3을 지정하면 병합 에이전트가 실행될 때마다 메타데이터가 정리되어 분할된 스냅숏은 더 빨리 만료됩니다. 이 옵션을 사용할 때는 구독자가 요청한 분할된 스냅숏을 활성화해야 합니다. 자세한 내용은 매개 변수가 있는 필터를 사용하는 병합 게시의 스냅숏을 참조하십시오.

column_tracking 속성을 설정할 때 테이블이 이미 다른 병합 게시에 게시된 경우 열 추적은 이 테이블을 기반으로 하는 기존 아티클이 사용하는 값과 같아야 합니다. 이 매개 변수는 테이블 아티클에만 해당합니다.

여러 게시에서 같은 기본 테이블에 기반을 둔 아티클을 게시하는 경우 한 아티클에 대한 delete_tracking 속성 또는 compensate_for_errors 속성을 변경하면 같은 테이블에 기반을 둔 다른 아티클에도 동일한 변경이 적용됩니다.

병합 프로세스가 사용하는 게시자 로그인/사용자 계정에 올바른 테이블 사용 권한이 없는 경우 잘못된 변경은 충돌로 기록됩니다.

schema_option 값을 변경하면 시스템은 비트 단위 업데이트를 수행하지 않습니다. 즉, 이는 sp_changemergearticle을 사용하여 schema_option을 설정하는 경우 기존 비트 설정이 해제됨을 의미합니다. 기존 설정을 유지하려면 설정하려는 값과 sp_helpmergearticle을 실행하여 얻는 schema_option의 현재 값 간에 &(비트 AND)를 수행해야 합니다.

유효한 스키마 옵션 표

다음 표에서는 아티클 유형에 따라 허용되는 schema_option 값에 대해 설명합니다.

아티클 유형

스키마 옵션 값

func schema only

0x010x2000

indexed view schema only

0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x10000000x200000

proc schema only

0x010x2000

table

모든 옵션

view schema only

0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x10000000x200000

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2008R2]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

사용 권한

sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버만 sp_changemergearticle을 실행할 수 있습니다.