sp_changearticle(Transact-SQL)

트랜잭션 또는 스냅숏 게시에 있는 아티클의 속성을 변경합니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.

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

구문

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

인수

  • [ @publication= ] 'publication'
    아티클을 포함한 게시의 이름입니다. publication은 sysname이며 기본값은 NULL입니다.

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

  • [ @property=] 'property'
    변경할 아티클 속성입니다. property는 nvarchar(100)입니다.

  • [ @value=] 'value'
    아티클 속성의 새 값입니다. value는 nvarchar(255)입니다.

    다음 표에서는 아티클의 유효한 속성 및 해당 속성의 값을 보여 줍니다.

    속성

    설명

    creation_script

     

    대상 테이블을 만드는 데 사용하는 아티클 스키마 스크립트의 경로 및 이름입니다. 기본값은 NULL입니다.

    del_cmd

     

    실행할 DELETE 문입니다. 그렇지 않은 경우에는 로그에서 만들어집니다.

    description

     

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

    dest_object

     

    이전 버전과의 호환성을 위해 제공됩니다. dest_table을 사용하십시오.

    dest_table

     

    새 대상 테이블입니다.

    destination_owner

     

    대상 개체의 소유자 이름입니다.

    filter

     

    테이블을 필터링(행 필터링)하는 데 사용할 새 저장 프로시저입니다. 기본값은 NULL입니다. 피어 투 피어 복제 내의 게시에 대해서는 변경할 수 없습니다.

    fire_triggers_on_snapshot

    true

    초기 스냅숏을 적용할 때 복제된 사용자 트리거를 실행합니다.

    참고참고
    트리거를 복제하려면 schema_option의 비트 마스크 값에 0x100이 포함되어야 합니다.

     

    false

    초기 스냅숏을 적용할 때 복제된 사용자 트리거를 실행하지 않습니다.

    identity_range

     

    구독자에 할당된 ID 범위의 크기를 제어합니다. 피어 투 피어 복제의 경우에는 지원되지 않습니다.

    ins_cmd

     

    실행할 INSERT 문입니다. 그렇지 않은 경우에는 로그에서 만들어집니다.

    pre_creation_cmd

    동기화를 적용하기 전에 대상 테이블을 제거, 삭제 또는 자를 수 있는 사전 작성 명령입니다.

     

    none

    명령을 사용하지 않습니다.

     

    drop

    대상 테이블을 삭제합니다.

     

    delete

    대상 테이블을 삭제합니다.

     

    truncate

    대상 테이블을 자릅니다.

    pub_identity_range

     

    구독자에 할당된 ID 범위의 크기를 제어합니다. 피어 투 피어 복제의 경우에는 지원되지 않습니다.

    schema_option

    지정한 아티클에 대한 스키마 생성 옵션의 비트맵을 지정합니다. schema_option은 binary(8)입니다. 자세한 내용은 이 항목의 뒷부분에 나오는 주의 섹션을 참조하십시오.

     

    0x00

    스냅숏 에이전트가 스크립팅을 사용하지 않습니다.

     

    0x01

    개체를 만듭니다(CREATE TABLE, CREATE PROCEDURE 등).

     

    0x02

    정의된 경우 아티클에 대한 변경 내용을 전파하는 저장 프로시저를 생성합니다.

     

    0x04

    IDENTITY 속성을 사용하여 ID 열이 스크립팅됩니다.

     

    0x08

    timestamp 열을 복제합니다. 이 값을 설정하지 않은 경우 timestamp 열은 binary로 복제됩니다.

     

    0x10

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

     

    0x20

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

     

    0x40

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

     

    0x80

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

     

    0x100

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

     

    0x200

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

     

    0x400

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

     

    0x800

    기본값을 복제합니다.

     

    0x1000

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

     

    0x2000

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

     

    0x4000

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

     

    0x8000

    ALTER TABLE 문을 사용하여 테이블 아티클의 기본 키 및 고유 키를 제약 조건으로 복제합니다.

    참고참고
    이 옵션은 더 이상 사용되지 않습니다. 대신 0x800x4000을 사용하십시오.

     

    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(사용자 정의 형식) 형식의 열을 복제할 수 있도록 8000바이트보다 큰 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 형식의 열에 대한 인덱스를 복제합니다.

    0x20000000000

    열에 대한 SPARSE 특성을 복제합니다. 이 특성에 대한 자세한 내용은 스파스 열 사용을 참조하십시오.

    status

    속성의 새 상태를 지정합니다.

     

    dts horizontal partitions

    정보를 제공하기 위해서만 확인됩니다. 지원되지 않습니다. 향후 호환성은 보장되지 않습니다.

     

    include column names

    복제된 INSERT 문에 열 이름이 포함됩니다.

     

    no column names

    복제된 INSERT 문에 열 이름이 포함되지 않습니다.

     

    no dts horizontal partitions

    아티클에 대한 수평 분할이 변환 가능한 구독에 의해 정의되지 않습니다.

     

    none

    sysarticles 테이블에 있는 모든 상태 옵션을 지우고 해당 아티클을 비활성으로 표시합니다.

     

    parameters

    매개 변수가 있는 명령을 사용하여 변경 내용을 구독자에게 전파합니다. 이것은 새 아티클에 대한 기본 설정입니다.

     

    string literals

    문자열 리터럴 값을 사용하여 변경 내용을 구독자에게 전파합니다.

    sync_object

     

    동기화 출력 파일 생성에 사용하는 테이블 또는 뷰의 이름입니다. 기본값은 NULL입니다. Oracle 게시자에 대해서는 지원되지 않습니다.

    tablespace

    Oracle 데이터베이스에서 게시된 아티클에 대한 로깅 테이블에서 사용되는 테이블스페이스를 식별합니다. 자세한 내용은 Oracle 테이블스페이스 관리를 참조하십시오.

    threshold

     

    배포 에이전트가 새 ID 범위를 할당하는 시점을 제어하는 비율 값입니다. 피어 투 피어 복제의 경우에는 지원되지 않습니다.

    type

     

    Oracle 게시자에 대해서는 지원되지 않습니다.

     

    logbased

    로그 기반 아티클입니다.

     

    logbased manualboth

    수동 필터 및 수동 뷰가 있는 로그 기반 아티클입니다. 이 옵션을 사용하려면 sync_object 및 filter 속성도 설정해야 합니다. Oracle 게시자에 대해서는 지원되지 않습니다.

     

    logbased manualfilter

    수동 필터가 있는 로그 기반 아티클입니다. 이 옵션을 사용하려면 sync_object 및 filter 속성도 설정해야 합니다. Oracle 게시자에 대해서는 지원되지 않습니다.

     

    logbased manualview

    수동 뷰가 있는 로그 기반 아티클입니다. 이 옵션을 사용하려면 sync_object 속성도 설정해야 합니다. Oracle 게시자에 대해서는 지원되지 않습니다.

     

    indexed viewlogbased

    로그 기반의 인덱싱된 뷰 아티클입니다. Oracle 게시자에 대해서는 지원되지 않습니다. 이 유형의 아티클은 기본 테이블을 별도로 게시할 필요가 없습니다.

     

    indexed viewlogbased manualboth

    수동 필터 및 수동 뷰가 있는 로그 기반의 인덱싱된 뷰 아티클입니다. 이 옵션을 사용하려면 sync_object 및 filter 속성도 설정해야 합니다. 이 유형의 아티클은 기본 테이블을 별도로 게시할 필요가 없습니다. Oracle 게시자에 대해서는 지원되지 않습니다.

     

    indexed viewlogbased manualfilter

    수동 필터가 있는 로그 기반의 인덱싱된 뷰 아티클입니다. 이 옵션을 사용하려면 sync_object 및 filter 속성도 설정해야 합니다. 이 유형의 아티클은 기본 테이블을 별도로 게시할 필요가 없습니다. Oracle 게시자에 대해서는 지원되지 않습니다.

     

    indexed viewlogbased manualview

    수동 뷰가 있는 로그 기반의 인덱싱된 뷰 아티클입니다. 이 옵션을 사용하려면 sync_object 속성도 설정해야 합니다. 이 유형의 아티클은 기본 테이블을 별도로 게시할 필요가 없습니다. Oracle 게시자에 대해서는 지원되지 않습니다.

    upd_cmd

     

    실행할 UPDATE 문입니다. 그렇지 않은 경우에는 로그에서 만들어집니다.

    NULL

    NULL

    변경될 수 있는 아티클 속성의 목록을 반환합니다.

  • [ @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은 아티클에 대한 변경이 있으면 기존 구독을 다시 초기화하도록 지정하며 구독을 다시 초기화할 수 있는 권한을 부여합니다.

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

  • [ @publisher = ] 'publisher'
    SQL Server 이외 게시자를 지정합니다. publisher는 sysname이며 기본값은 NULL입니다.

    [!참고]

    SQL Server 게시자에 대한 아티클 속성을 변경할 때는 publisher를 사용하면 안 됩니다.

반환 코드 값

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

주의

sp_changearticle은 스냅숏 복제 및 트랜잭션 복제에 사용됩니다.

아티클이 피어 투 피어 복제를 지원하는 게시에 속하는 경우에는 description, ins_cmd, upd_cmddel_cmd 속성만 변경할 수 있습니다.

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

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

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

  • del_cmd

  • dest_table

  • destination_owner

  • filter

  • ins_cmd

  • status

  • upd_cmd

전체 게시를 삭제하고 다시 만들 필요 없이 기존 게시 내에서 sp_changearticle을 사용하여 아티클을 변경할 수 있습니다.

[!참고]

schema_option 값을 변경할 때 비트 단위 업데이트를 시스템에서 수행하지는 않습니다. 이는 sp_changearticle을 사용하여 schema_option을 설정할 때 기존의 비트 설정이 해제될 수 있음을 의미합니다. 기존 설정을 유지하려면 설정하려는 값과 sp_helparticle을 실행하여 얻는 schema_option의 현재 값 간에 &(비트 AND)를 수행해야 합니다.

유효한 스키마 옵션

다음 표에서는 복제 유형(오른쪽 두 행에 표시됨)과 아티클 유형(첫 번째 열에 표시됨)에 기반하여 schema_option의 사용 가능한 값을 설명합니다.

아티클 유형

복제 유형

 

 

트랜잭션

스냅숏

logbased

모든 옵션

0x02를 제외한 모든 옵션

logbased manualfilter

모든 옵션

0x02를 제외한 모든 옵션

logbased manualview

모든 옵션

0x02를 제외한 모든 옵션

indexed view logbased

모든 옵션

0x02를 제외한 모든 옵션

indexed view logbased manualfilter

모든 옵션

0x02를 제외한 모든 옵션

indexed view logbased manualview

모든 옵션

0x02를 제외한 모든 옵션

indexed view logbase manualboth

모든 옵션

0x02를 제외한 모든 옵션

proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

serializable proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

proc schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x400000000x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x400000000x80000000

func schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x400000000x80000000

indexed view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x400000000x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x400000000x80000000

[!참고]

지연 업데이트 게시의 경우 반드시 0x80의 schema_option 값을 사용해야 합니다. SQL Server 이외 게시에 대해 지원되는 schema_option 값은 0x01, 0x02, 0x10, 0x40, 0x80, 0x10000x4000입니다.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

사용 권한

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