sp_changemergearticle(Transact-SQL)
적용 대상: SQL Server
병합 아티클의 속성을 변경합니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.
구문
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 |
아티클 true auto_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 true auto_identity_range bigint입니다. 이 ID 범위는 재게시 구독자가 자체 구독자에 할당할 수 있도록 예약되어 있습니다. 테이블 아티클에만 적용됩니다. 자세한 내용은 ID 열 복제의 "병합 복제" 섹션을 참조하세요. |
|
published_in_tran_pub |
true |
아티클은 트랜잭션 게시에도 게시됩니다. |
false |
아티클은 트랜잭션 게시에도 게시되지 않습니다. | |
resolver_info |
사용자 지정 확인자에서 필요한 추가 정보를 지정하는 데 사용됩니다. 일부 Microsoft 해결사에는 확인자에 대한 입력으로 제공된 열이 필요합니다. resolver_info 는 nvarchar(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)에서 도입된 날짜 및 시간 데이터 형식(날짜, 시간, datetimeoffset 및 datetime2)을 이전 버전의 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 |
0x01 및 0x2000 |
indexed view schema only |
0x01 , 0x040 , 0x0100 , 0x2000 , 0x40000 , 0x1000000 및 0x200000 |
proc schema only |
0x01 및 0x2000 |
table |
모든 옵션 |
view schema only |
0x01 , 0x040 , 0x0100 , 0x2000 , 0x40000 , 0x1000000 및 0x200000 |
예제
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
수 있습니다.