데이터 및 데이터베이스 객체 공개

적용 대상:SQL ServerAzure SQL Managed Instance

게시를 만들 때 게시할 테이블 및 기타 데이터베이스 개체를 선택합니다. 복제를 사용하여 다음 데이터베이스 개체를 게시할 수 있습니다.

데이터베이스 개체 스냅샷 복제 및 트랜잭션 복제 병합 복제
테이블 X X
분할된 테이블 X X
저장 프로시저 – 정의(Transact-SQL 및 CLR) X X
저장 프로시저 – 실행(Transact-SQL 및 CLR) X 아니요
조회수 X X
인덱싱된 뷰 X X
테이블로 인덱싱된 뷰 X 아니요
사용자 정의 형식(CLR) X X
사용자 정의 함수(Transact-SQL 및 CLR) X X
별칭 데이터 형식 X X
전체 텍스트 인덱스 X X
스키마 개체(제약 조건, 인덱스, 사용자 DML 트리거, 확장 속성, 데이터 정렬) X X

출판물 제작

출판물을 작성하려면 다음 정보를 제공하세요:

  • 배포자.
  • 스냅샷 파일의 위치.
  • 출판 데이터베이스.
  • 만들 게시 형식을 선택합니다(스냅샷, 트랜잭션, 업데이트 가능한 구독이 있는 트랜잭션 또는 병합).
  • 게시에 포함할 데이터 및 데이터베이스 개체(문서).
  • 모든 유형의 게시에 대한 정적 행 필터 및 열 필터와 병합 게시에 대한 매개 변수가 있는 행 필터 및 조인 필터.
  • 스냅샷 에이전트 일정.
  • 다음 에이전트들이 실행되는 계정: 모든 출판물에 대한 스냅샷 에이전트; 모든 트랜잭션 출판물에 대한 Log Reader Agent; 구독 업데이트를 허용하는 트랜잭션 출판물에 대한 Queue Reader Agent.
  • 게시물 이름 및 설명

출판물과 함께 일하는 방법에 대한 정보는 다음 기사들을 참고하세요:

참고

기사나 출판물을 삭제한다고 해서 구독자의 객체가 사라지지 않습니다.

출판 표

가장 일반적으로 게시된 개체는 테이블입니다. 다음 링크들은 표 출판에 대한 추가 정보를 제공합니다:

복제용 테이블을 게시할 때, 선언된 참조 무결성(기본 키 제약, 참조 제약, 고유 제약 조건), 인덱스, 사용자 DML 트리거(DDL 트리거는 복제 불가), 확장 속성, 콜레이션 등 어떤 스키마 객체를 Subscriber에 복사할지 지정할 수 있습니다. 확장 속성은 게시자와 구독자 간의 초기 동기화 수행 시에만 복제됩니다. 초기 동기화 후에 확장 속성을 추가하거나 수정하면 변경 내용이 복제되지 않습니다.

스키마 옵션을 지정하는 방법은 스키마 옵션 지정 또는 SchemaOption을 참조하세요.

분할된 테이블 및 인덱스

복제는 분할된 테이블과 인덱스를 게시하는 것을 지원합니다. 지원 수준은 사용하는 복제 유형과 출판물 및 파티션 테이블과 연관된 문서에 지정한 옵션에 따라 달라집니다. 자세한 내용은 분할된 테이블 및 인덱스 복제를 참조하세요.

저장 프로시저 공개

모든 유형의 복제는 저장 프로시저 정의를 복제할 수 있게 해줍니다: 문장은 CREATE PROCEDURE 각 구독자에게 복사됩니다. CLR(공용 언어 런타임) 저장 프로시저의 경우 연결된 어셈블리도 복사됩니다. 절차 변경은 구독자에게 복제되며; 연관된 어셈블리의 변경 사항은 복제되지 않습니다.

트랜잭션 복제를 사용하면 저장 프로시저의 정의를 복제할 수 있을 뿐만 아니라 저장 프로시저 실행도 복제할 수 있습니다. 이 기능은 대량의 데이터에 영향을 미치는 유지보수 중심의 저장 프로시저 결과를 재현하는 데 유용합니다. 자세한 내용은 트랜잭션 복제에서 저장 프로시저 실행 게시를 참조하세요.

게시 보기

모든 유형의 복제를 사용하면 보기를 복제할 수 있습니다. 뷰와 그에 따른 인덱스(인덱스된 뷰라면)를 구독자에게 복사할 수는 있지만, 기본 테이블도 복제해야 합니다.

인덱싱된 뷰의 경우 트랜잭션 복제를 사용하면 인덱싱된 뷰를 뷰가 아닌 테이블로 복제하므로 기본 테이블을 함께 복제할 필요가 없습니다. 이렇게 하려면 sp_addarticle(Transact-SQL)의 @type 매개 변수에 대해 "인덱싱된 뷰 로그베이스" 옵션 중 하나를 지정합니다. sp_addarticle 사용에 대한 자세한 내용은 아티클 정의를 참조하세요.

사용자 정의 함수 공개

CLR 함수와 Transact-SQL 함수의 CREATE FUNCTION 문은 각 구독자에게 복사됩니다. CLR 함수의 경우 연결된 어셈블리도 복사됩니다. 함수 변경은 구독자에게 복제되고; 관련 어셈블리의 변경은 복제되지 않습니다.

사용자 정의 형식 및 별칭 데이터 형식 게시

복제는 사용자 정의 타입이나 별칭 데이터 타입을 사용하는 컬럼을 다른 컬럼과 동일하게 처리하여 구독자에게 복제합니다. 프로세스는 테이블을 생성하기 전에 Subscriber에서 복제된 각 유형에 대한 문장을 CREATE TYPE 실행합니다. 사용자 정의 타입의 경우, 복제는 연관된 어셈블리를 각 구독자에게 복사합니다. 복제는 사용자 정의 타입과 별칭 데이터 타입의 변경 사항을 Subscribers에게 복제하지 않습니다.

데이터베이스에서 타입을 정의했지만 출판물을 생성할 때 어떤 열에서도 참조하지 않으면, 복제는 그 타입을 Subscribers에게 복사하지 않습니다. 나중에 데이터베이스에서 해당 유형의 열을 만들고 복제하고 싶다면, 먼저 해당 타입(및 사용자 정의 타입에 해당하는 어셈블리)을 각 Subscriber에게 수동으로 복사해야 합니다.

전체 텍스트 색인 게시

CREATE FULLTEXT INDEX 문은 각 구독자로 복사되며, 전체 텍스트 인덱스는 구독자에서 생성됩니다. 전체 텍스트 인덱스를 사용하여 ALTER FULLTEXT INDEX 변경한 내용은 복제되지 않습니다.

게시된 개체의 스키마 변경

복제는 게시된 개체에 대한 광범위한 스키마 변경을 지원합니다. SQL Server Publisher에서 적절한 게시된 객체에 대해 다음 스키마 변경 사항을 하면, 복제가 기본적으로 그 변경 사항을 모든 SQL Server 구독자에게 전파합니다:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

자세한 내용은 게시 데이터베이스의 스키마 변경을 참조하세요.

출판 시 고려사항

데이터베이스 객체를 게시할 때 다음 고려사항을 염두에 두세요:

  • 사용자는 출판물 생성과 초기 스냅샷 시 데이터베이스에 접근할 수 있지만, Publisher에서 활동이 적은 시기에 출판물을 만드는 것이 가장 좋습니다.

  • 데이터베이스에 게시를 만든 후에는 해당 데이터베이스의 이름을 변경할 수 없습니다. 데이터베이스 이름을 바꾸려면 먼저 복제를 제거해야 합니다.

  • 하나 이상의 다른 데이터베이스 객체에 의존하는 데이터베이스 객체를 게시한다면, 참조된 모든 객체를 반드시 공개해야 합니다. 예를 들어 테이블에 종속된 뷰를 게시하는 경우 테이블도 게시해야 합니다.

    참고

    병합 출판물에 문서를 추가하고 기존 문서가 새 문서에 의존한다면, sp_addmergearticle와 sp_changemergearticle @processing_order 매개변수를 사용하여 두 문서 모두 처리 순서를 지정해야 합니다. 다음 상황을 생각해 보세요: 테이블을 공개했지만 그 테이블이 참조하는 함수는 공개하지 않는다. 함수를 게시하지 않으면 구독자에서 테이블을 생성할 수 없습니다. 게시에 함수를 추가할 경우에는 sp_addmergearticle 의 @processing_order 매개 변수에 값 1을 지정하고 sp_changemergearticle 의 @processing_order 매개 변수에 값 2를 지정하며 @article매개 변수에는 테이블 이름을 지정합니다. 이 처리 순서를 사용하면 함수에 종속된 테이블이 생성되기 전에 해당 함수가 구독자에서 생성됩니다. 함수 번호가 테이블 번호보다 낮은 경우 각 아티클에 다른 번호를 사용할 수 있습니다.

  • 출판물명에는 다음 문자를 포함할 수 없습니다: % * [ ] | : " ? \ / <>.

객체 게시의 제한

  • 출판물 유형에 따라 최대 기사와 칼럼 수는 다릅니다. 자세한 내용은 SQL Server의 최대 용량 사양의 "복제 개체" 섹션을 참조하세요.

  • SQL Server 복제의 일부로 암호화된 저장 프로시저, 뷰, 트리거, 사용자 정의 함수를 공개할 수 없습니다.

  • XML 스키마 컬렉션을 복제할 수는 있지만, 초기 스냅샷 이후에는 변경 사항이 복제되지 않습니다.

  • 트랜잭션 복제에 대해 게시된 테이블에는 기본 키가 있어야 합니다. 테이블이 트랜잭션 복제 퍼블리케이션에 속해 있다면, 기본 키 열과 연관된 인덱스를 비활성화할 수 없습니다. 복제는 이러한 인덱스를 필요로 합니다. 인덱스를 해제하려면 먼저 게시에서 테이블을 삭제해야 합니다.

  • sp_bindefault (Transact-SQL)로 만든 바인딩된 기본값은 복제되지 않습니다(바인딩된 기본값은 더 이상 사용되지 않으며, 대신 CREATE TABLE 또는 DEFAULT의 ALTER TABLE 키워드로 만든 기본값을 사용하는 것이 권장됩니다).

  • 인덱싱된 뷰에 대한 NOEXPAND 힌트를 포함하는 함수는 배포 에이전트가 이를 전달하는 순서 때문에, 참조된 테이블 및 인덱싱된 뷰와 동일한 게시에 게시할 수 없습니다. 이 문제를 해결하려면 첫 번째 게시에 테이블 및 인덱싱된 뷰 만들기를 배치하고 인덱싱된 뷰에 NOEXPAND 힌트가 포함된 함수를 첫 번째 게시가 완료된 후 게시하는 두 번째 게시에 추가합니다. 또는 이러한 함수에 대한 스크립트를 만들고 sp_addpublication @post_snapshot_script 매개 변수를 사용하여 스크립트를 제공합니다.

스키마 및 개체 소유권

복제에는 스키마 및 개체 소유권과 관련하여 새 게시 마법사에서 다음과 같은 기본 동작이 있습니다.

  • 호환성 수준이 90 이상인 병합 게시, 스냅샷 게시, 트랜잭션 게시의 아티클에 대해 기본적으로 구독자의 개체 소유자는 게시자에 있는 해당 개체의 소유자와 동일합니다. 개체를 소유한 스키마가 구독자에 없는 경우 자동으로 만들어집니다.

  • 호환성 수준이 90보다 낮은 병합 게시에 포함된 아티클의 경우: 기본적으로 소유자 값은 공란으로 두며, 구독자에서 개체를 만들 때 dbo로 지정됩니다.

  • Oracle 게시의 아티클에 대해 기본적으로 소유자는 dbo로 지정됩니다.

  • 문자 모드 스냅샷(SQL Server 이외 구독자 및 SQL Server Compact 구독자에 사용되는)을 사용하는 게시물의 아티클의 경우 기본적으로 소유자는 빈 상태로 둡니다. 소유자는 기본적으로 구독자에 연결하기 위해 배포 에이전트 또는 병합 에이전트를 사용하는 계정과 연결된 소유자로 설정됩니다.

객체 소유자는 문서 속성 - <문서> 대화상자와 다음 저장 프로시저( sp_addarticle, sp_addmergearticle, sp_changearticle, sp_changemergearticle)를 통해 변경할 수 있습니다. 자세한 내용은 게시 속성 보기 및 수정, 아티클 정의, 아티클 속성 보기 및 수정을 참조하세요.

이전 버전의 SQL Server를 실행하는 구독자에게 데이터 게시

  • 이전 버전의 SQL Server를 사용하는 구독자에게 게시하는 경우, 해당 버전의 기능에 제한이 있습니다. 이 제한은 복제 전용 기능과 제품 전체 기능 모두에 적용됩니다.

  • 병합 출판물은 호환성 수준을 사용하여 출판물에서 사용할 수 있는 기능을 결정하고, 이전 버전의 SQL Server를 사용하는 구독자를 지원할 수 있게 합니다.

여러 출판물에 표를 출판하기

복제는 다음과 같은 제한 조건 하에 여러 출판물에 논문을 게재할 수 있도록 지원합니다. 여기에는 데이터 재출판도 포함됩니다:

  • 트랜잭션 출판물과 병합 출판물 모두에 기사를 게재한다면, 병합 기사의 @published_in_tran_pub 속성을 TRUE로 설정하세요. 속성 설정에 대한 자세한 내용은 게시 속성 보기 및 수정, 아티클 속성 보기 및 수정을 참조하세요.

    문서가 거래 구독의 일부이고 병합 출판물에 포함될 경우 @published_in_tran_pub 속성을 설정하세요. 기본적으로 트랜잭션 복제는 구독자의 테이블이 읽기 전용이어야 한다고 기대합니다. 머지(merge) 복제가 트랜잭션 구독 내 테이블에 데이터를 변경하면 데이터의 비수렴이 발생할 수 있습니다. 이 문제를 피하려면 병합 출판물에서 다운로드 전용 테이블을 지정하세요. 이 설정은 병합 구독자가 데이터 변경 사항을 테이블에 업로드하는 것을 방지합니다. 자세한 내용은 다운로드 전용 아티클로 병합 복제 성능 최적화를 참조하세요.

  • 업데이트 구독이 대기열에 있는 병합 출판물과 거래 출판물 모두에 기사를 게재할 수 없습니다.

  • 구독 업데이트를 지원하는 거래형 출판물에 포함된 논문은 재게재할 수 없습니다.

  • 대기열에 저장된 업데이트 구독을 지원하는 여러 트랜잭션 출판물에 기사를 게재한다면, 모든 출판물에서 다음 속성에 대해 동일한 가치를 가져야 합니다:

    속성 sp_addarticle의 매개 변수
    ID 범위 관리 @auto_identity_range(사용되지 않음) 및 @identityrangemangementoption
    게시자 ID 범위 @pub_identity_range
    ID 범위 @identity_range
    ID 범위 임계값 @threshold

    이러한 매개 변수에 대한 자세한 내용은 sp_addarticle(Transact-SQL)을 참조하세요.

  • 여러 개의 합병 출판물에 기사를 게재할 경우, 모든 출판물에서 다음 속성에 대해 동일한 가치를 가져야 합니다:

    속성 sp_addmergearticle의 매개 변수
    열 추적 @column_tracking
    스키마 옵션 @schema_option
    열 필터링 @vertical_partition
    구독자 업로드 옵션 @subscriber_upload_options
    조건부 삭제 추적 @delete_tracking
    오류 보정 @compensate_for_errors
    ID 범위 관리 @auto_identity_range(사용되지 않음) 및 @identityrangemangementoption
    게시자 ID 범위 @pub_identity_range
    ID 범위 @identity_range
    ID 범위 임계값 @threshold
    파티션 옵션 @partition_options
    Blob 열 스트리밍 @stream_blob_columns
    필터 형식 @filter_type(sp_addmergefilter의 매개 변수)

    이러한 매개 변수에 대한 자세한 내용은 sp_addmergearticle(Transact-SQL) 및 sp_addmergefilter(Transact-SQL)를 참조하세요.

  • 트랜잭션 복제와 필터링되지 않은 병합 복제는 여러 게시에 테이블을 게시한 후 구독 데이터베이스의 단일 테이블 내에서 구독하는 것을 지원합니다(일반적으로 롤업 시나리오라고 함). 롤업은 중앙 구독자의 한 테이블에 여러 위치의 데이터 하위 집합을 집계하는 데 자주 사용됩니다. 필터링된 병합 출판물은 중앙 구독자 시나리오를 지원하지 않습니다. 병합 복제의 경우, 롤업은 일반적으로 매개변수화된 행 필터를 가진 단일 출판물을 통해 구현됩니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.