다음을 통해 공유


sp_changemergearticle(Transact-SQL)

적용 대상: SQL Server

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

Transact-SQL 구문 표기 규칙

구문

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

인수

[ @publication = ] N'publication'

아티클이 있는 게시의 이름입니다. @publication 기본값이 없는 sysname입니다.

[ @article = ] N'article'

변경할 아티클의 이름입니다. @article 기본값이 없는 sysname입니다.

[ @property = ] N'property'

지정된 아티클 및 게시에 대해 변경할 속성입니다. @property sysname이며 다음 표에 나열된 값 중 하나일 수 있습니다.

[ @value = ] N'value'

지정된 속성의 새 값입니다. @value nvarchar(2000)이며 다음 표에 나열된 값 중 하나일 수 있습니다.

이 표에서는 아티클의 속성과 해당 속성에 대한 값을 설명합니다.

속성 설명
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_tracking false 하면 삭제된 행을 수동으로 제거해야 합니다.
description 아티클에 대한 설명 항목입니다.
destination_owner dbo가 아닌 경우 구독 데이터베이스에 있는 개체의 소유자 이름입니다.
identity_range 아티클 trueauto_identity_range auto identityrangemanagementoption 이 설정된 경우 새 ID 값을 할당할 때 사용할 범위 크기를 지정하는 bigint입니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하세요.
identityrangemanagementoption manual 자동 ID 범위 관리를 사용하지 않습니다. 수동 ID 범위 처리를 사용하려면 NOT FOR REPLICATION을 사용하여 ID 열을 표시합니다. 자세한 내용은 ID 열 복제를 참조하세요.
none 모든 ID 범위 관리를 사용하지 않도록 설정합니다.
logical_record_level_conflict_detection true 논리적 레코드의 아무 곳에서나 변경이 이루어지면 충돌이 감지됩니다. 으로 설정해야 logical_record_level_conflict_resolution 합니다 true.
false 기본 충돌 검색은 .에서 지정한 column_tracking대로 사용됩니다.
logical_record_level_conflict_resolution true 전체 승리 논리 레코드는 손실된 논리 레코드를 덮어씁니다.
false 성공한 행은 논리 레코드로 제한되지 않습니다.
partition_options 0 아티클에 대한 필터링은 정적이거나 각 파티션, 즉 "겹치는" 파티션에 대한 고유한 데이터 하위 집합을 생성하지 않습니다.
1 파티션이 겹치며 구독자에서 수행한 DML 업데이트는 행이 속한 파티션을 변경할 수 없습니다.
2 아티클에 대한 필터링은 겹치지 않는 파티션을 생성하지만 여러 구독자는 동일한 파티션을 받을 수 있습니다.
3 아티클에 대한 필터링은 각 구독에 대해 고유한 겹치지 않는 파티션을 생성합니다.

참고: 값을 3 partition_options지정하는 경우 해당 문서의 각 데이터 파티션에 대해 단일 구독만 있을 수 있습니다. 새 구독의 필터링 기준이 기존 구독과 동일한 파티션으로 확인되는 두 번째 구독이 만들어지면 기존 구독이 삭제됩니다.
pre_creation_command none 구독자에 테이블이 이미 있는 경우 아무 작업도 수행되지 않습니다.
delete 하위 집합 필터의 WHERE 절에 따라 삭제를 실행합니다.
drop 테이블을 다시 만들기 전에 삭제합니다.
truncate 대상 테이블을 자립니다.
processing_order 병합 게시의 아티클 처리 순서를 나타내는 int 입니다.
pub_identity_range 아티클 identityrangemanagementoption 이 설정된 경우 서버 구독을 사용하여 구독자에 할당된 범위 크기를 지정하는 auto trueauto_identity_range bigint입니다. 이 ID 범위는 재게시 구독자가 자체 구독자에 할당할 수 있도록 예약되어 있습니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하세요.
published_in_tran_pub true 아티클은 트랜잭션 게시에도 게시됩니다.
false 아티클은 트랜잭션 게시에도 게시되지 않습니다.
resolver_info 사용자 지정 확인자에서 필요한 추가 정보를 지정하는 데 사용됩니다. 일부 Microsoft 해결사에는 확인자에 대한 입력으로 제공된 열이 필요합니다. resolver_infonvarchar(255)이며 기본값은 .입니다 NULL. 자세한 내용은 고급 병합 복제 충돌 - 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(9.x)에서 도입된 큰 개체 데이터 형식(nvarchar(max), varchar(max) 및 varbinary(max))을 SQL Server 2000(8.x)에서 지원되는 데이터 형식으로 변환합니다.
0x40000000 사용 권한을 복제합니다.
0x80000000 게시에 속하지 않는 개체에 대한 종속성을 삭제하려고 시도합니다.
0x100000000 varbinary(max) 열에 지정된 경우 FILESTREAM 특성을 복제하려면 이 옵션을 사용합니다. SQL Server 2005(9.x) 구독자에 테이블을 복제하는 경우 이 옵션을 지정하지 마세요. FILESTREAM 열이 있는 테이블을 SQL Server 2000(8.x) 구독자에 복제하는 것은 이 스키마 옵션을 설정하는 방법에 관계없이 지원되지 않습니다. 관련 옵션을 참조하세요 0x800000000.
0x200000000 SQL Server 2008(10.0.x)에서 도입된 날짜 및 시간 데이터 형식(날짜, 시간, datetimeoffsetdatetime2)을 이전 버전의 SQL Server에서 지원되는 데이터 형식으로 변환합니다.
0x400000000 데이터 및 인덱스에 대한 압축 옵션을 복제합니다. 자세한 내용은 Data Compression을 참조하세요.
0x800000000 FILESTREAM 데이터를 구독자의 자체 파일 그룹에 저장하려면 이 옵션을 설정합니다. 이 옵션을 설정하지 않으면 FILESTREAM 데이터가 기본 파일 그룹에 저장됩니다. 복제는 파일 그룹을 만들지 않습니다. 따라서 이 옵션을 설정하는 경우 구독자에서 스냅샷을 적용하기 전에 파일 그룹을 만들어야 합니다. 스냅샷을 적용하기 전에 개체를 만드는 방법에 대한 자세한 내용은 스냅샷이 적용되기 전과 후에 스크립트 실행을 참조하세요.

관련 옵션을 참조하세요 0x100000000.
0x1000000000 UDT(공용 언어 런타임) UDT(사용자 정의 형식) 를 varbinary(max) 로 변환하여 UDT 형식의 열을 SQL Server 2005(9.x)를 실행하는 구독자에 복제할 수 있도록 합니다.
0x2000000000 hierarchyid 형식의 열을 SQL Server 2005(9.x)를 실행하는 구독자에 복제할 수 있도록 hierarchyid 데이터 형식을 varbinary(max)로 변환합니다. 복제된 테이블에서 hierarchyid 열을 사용하는 방법에 대한 자세한 내용은 hierarchyid 데이터 형식 메서드 참조를 참조하세요.
0x4000000000 테이블에서 필터링된 인덱스를 복제합니다. 필터링된 인덱스에 대한 자세한 내용은 필터링된 인덱스 만들기를 참조하세요.
0x8000000000 이러한 형식의 열을 SQL Server 2005(9.x)를 실행하는 구독자에 복제할 수 있도록 지리기하 도형 데이터 형식을 varbinary(max)로 변환합니다.
0x10000000000 지리 및 기하 도형 형식의 열에 대한 인덱스를 복제합니다.
NULL 시스템은 아티클에 대한 유효한 스키마 옵션을 자동으로 생성합니다.
status active 테이블을 게시하는 초기 처리 스크립트가 실행됩니다.
unsynced 스냅샷 에이전트가 다음에 실행될 때 테이블 게시를 위한 초기 처리 스크립트가 실행됩니다.
stream_blob_columns true BLOB(Binary Large Object) 열을 복제할 때 데이터 스트림 최적화를 사용합니다. 그러나 논리 레코드와 같은 특정 병합 복제 기능은 여전히 스트림 최적화가 사용되지 않도록 방지할 수 있습니다. stream_blob_columns 는 FILESTREAM을 사용할 때 true로 설정됩니다. 그러면 FILESTREAM 데이터 복제가 최적의 방식으로 수행되고 메모리 활용률이 낮아집니다. FILESTREAM 테이블 아티클이 Blob 스트리밍을 사용하지 않도록 하려면 false로 설정합니다 stream_blob_columns .

중요: 이 메모리 최적화를 사용하도록 설정하면 동기화 중에 병합 에이전트 성능이 저하될 수 있습니다. 이 옵션은 MB의 데이터가 포함된 열을 복제할 때만 사용해야 합니다.
false 이진 큰 개체 열을 복제할 때는 최적화가 사용되지 않습니다.
subscriber_upload_options 0 클라이언트 구독이 있는 구독자에서 수행되는 업데이트에 제한이 없으며 변경 내용이 게시자로 업로드됩니다. 이 속성을 변경하려면 기존 구독자를 다시 초기화해야 할 수 있습니다.
1 변경 내용은 클라이언트 구독을 사용하는 구독자에서 허용되지만 게시자에 업로드되지는 않습니다.
2 클라이언트 구독을 사용하는 구독자에서는 변경이 허용되지 않습니다.
subset_filterclause 가로 필터링을 지정하는 WHERE 절입니다. 테이블 아티클에만 적용됩니다.

중요: 성능상의 이유로 다음과 같이 LEFT([MyColumn]) = SUSER_SNAME()매개 변수가 있는 행 필터 절의 열 이름에 함수를 적용하지 않는 것이 좋습니다. 필터 절에서 HOST_NAME 사용하고 HOST_NAME 값을 재정의하는 경우 CONVERT를 사용하여 데이터 형식을 변환해야 할 수 있습니다. 이 사례에 대한 모범 사례에 대한 자세한 내용은 매개 변수가 있는 필터 - 매개 변수가 있는 행 필터의 "HOST_NAME() 값 재정의" 섹션을 참조하세요.
threshold SQL Server Compact 또는 이전 버전의 SQL Server를 실행하는 구독자에 사용되는 백분율 값입니다. threshold는 병합 에이전트 새 ID 범위를 할당할 때를 제어합니다. 임계값에 지정된 값의 백분율을 사용하면 병합 에이전트 새 ID 범위를 만듭니다. 로 설정되거나 auto_identity_range 로 설정된 auto true경우 identityrangemanagementoption 사용됩니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하세요.
verify_resolver_signature 1 사용자 지정 확인자의 디지털 서명은 신뢰할 수 있는 원본에서 온 것인지 확인하기 위해 확인됩니다.
0 사용자 지정 확인자의 디지털 서명은 신뢰할 수 있는 원본에서 온 것인지 확인하기 위해 확인되지 않습니다.
NULL(기본값) @property 지원되는 값 목록을 반환합니다.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

이 저장 프로시저에서 수행한 작업이 기존 스냅샷을 무효화할 수 있음을 인정합니다. @force_invalidate_snapshot 비트이며 기본값은 .입니다0.

  • 0 는 병합 아티클을 변경해도 스냅샷이 잘못되지 않도록 지정합니다. 저장 프로시저에서 변경에 새 스냅샷이 필요하다는 것을 감지하면 오류가 발생하고 변경되지 않습니다.

  • 1 는 병합 아티클을 변경하면 스냅샷이 유효하지 않을 수 있으며, 새 스냅샷이 필요한 기존 구독이 있는 경우 기존 스냅샷을 사용되지 않는 것으로 표시하고 생성된 새 스냅샷에 대한 권한을 부여합니다.

변경될 때 새 스냅샷을 생성해야 하는 속성은 설명 섹션을 참조하세요.

[ @force_reinit_subscription = ] force_reinit_subscription

이 저장 프로시저에서 수행한 작업에 기존 구독을 다시 초기화해야 할 수 있음을 인정합니다. @force_reinit_subscription 비트이며 기본값은 .입니다0.

  • 0 는 병합 아티클을 변경해도 구독이 다시 초기화되지 않도록 지정합니다. 저장 프로시저가 변경 시 기존 구독을 다시 초기화해야 한다는 것을 감지하면 오류가 발생하고 변경되지 않습니다.

  • 1 는 병합 아티클을 변경하면 기존 구독이 다시 초기화되고 구독 다시 초기화가 발생할 수 있는 권한을 부여합니다.

변경될 때 모든 기존 구독을 다시 초기화해야 하는 속성은 설명 섹션을 참조하세요.

반환 코드 값

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

설명

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

sp_changemergearticle sp_addmergearticle 사용하여 처음에 지정한 아티클 속성을 변경하는 데 사용되므로 이러한 속성에 대한 자세한 내용은 sp_addmergearticle 참조하세요.

다음 속성을 변경하려면 새 스냅샷이 생성되어야 하며 @force_invalidate_snapshot 매개 변수의 1 값을 지정해야 합니다.

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

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

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

값을 3 partition_options지정하면 병합 에이전트 실행되고 분할된 스냅샷이 더 빨리 만료될 때마다 메타데이터가 정리됩니다. 이 옵션을 사용하는 경우 구독자가 요청한 분할된 스냅샷을 사용하도록 설정하는 것이 좋습니다. 자세한 내용은 매개 변수가 있는 필터로 병합 게시에 대한 스냅샷 만들기를 참조하세요.

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

여러 게시가 동일한 기본 테이블을 기반으로 아티클을 게시하는 경우 한 아티클의 속성 또는 compensate_for_errors 속성을 변경 delete_tracking 하면 동일한 테이블을 기반으로 하는 다른 아티클에 대해 동일한 변경이 수행됩니다.

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

값을 schema_option변경하면 시스템에서 비트 업데이트를 수행하지 않습니다. 즉, 사용 하 여 sp_changemergearticle설정 schema_option 하는 경우 기존 비트 설정이 해제 될 수 있습니다. 기존 설정을 유지하려면 설정 중인 값과 현재 값 간에 &(비트 AND)를 수행해야 하며, 이 값schema_option은 sp_helpmergearticle 실행하여 확인할 수 있습니다.

주의

발행물에 아티클이 많고 문서 중 하나에 대해 실행하는 sp_changemergearticle 경우 실행을 완료하는 데 시간이 오래 걸릴 수 있습니다.

유효한 스키마 옵션 테이블

다음 표에서는 아티클 유형에 따라 허용되는 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 [AdventureWorks2022]
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수 있습니다.