데이터 및 데이터베이스 개체 게시
적용 대상: SQL Server Azure 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 |
게시 만들기
게시를 만들려면 다음 정보를 제공합니다.
- 배포자.
- 스냅샷 파일의 위치.
- 게시 데이터베이스.
- 만들 게시 유형(스냅샷, 트랜잭션, 업데이트 가능 구독을 포함하는 트랜잭션 또는 병합).
- 게시에 포함할 데이터 및 데이터베이스 개체(문서).
- 모든 유형의 게시에 대한 정적 행 필터 및 열 필터와 병합 게시에 대한 매개 변수가 있는 행 필터 및 조인 필터.
- 스냅샷 에이전트 일정.
- 다음 에이전트가 실행될 계정: 모든 게시에 대한 스냅샷 에이전트, 모든 트랜잭션 게시에 대한 로그 판독기 에이전트, 구독 업데이트를 허용하는 트랜잭션 게시에 대한 큐 판독기 에이전트.
- 게시에 대한 이름 및 설명
게시로 작업하는 방법은 다음 항목을 참조하십시오.
참고 항목
문서나 게시를 삭제해도 개체가 구독자에서 제거되지 않습니다.
테이블 게시
가장 일반적으로 게시된 개체는 테이블입니다. 다음 링크는 게시 테이블과 관련된 영역에 대한 추가 정보를 제공합니다.
복제를 위해 테이블을 게시할 때는 구독자로 복사할 선언된 참조 무결성(PRIMARY KEY 제약 조건, 참조 제약 조건, UNIQUE 제약 조건), 인덱스, 사용자 DML 트리거(DDL 트리거는 복제할 수 없음), 확장 속성, 데이터 정렬 등의 스키마 개체를 지정할 수 있습니다. 확장 속성은 게시자와 구독자 간의 초기 동기화 수행 시에만 복제됩니다. 초기 동기화 후에 확장 속성을 추가하거나 수정하면 변경 내용이 복제되지 않습니다.
스키마 옵션을 지정하는 방법은 스키마 옵션 지정 또는 SchemaOption을 참조하세요.
분할된 테이블 및 인덱스
복제는 분할된 테이블 및 인덱스의 게시를 지원합니다. 지원 수준은 사용되는 복제 유형과 게시에 대해 지정하는 옵션 및 분할된 테이블과 연결된 문서에 따라 달라집니다. 자세한 내용은 분할된 테이블 및 인덱스 복제를 참조하세요.
저장 프로시저 게시
모든 유형의 복제를 사용하면 저장 프로시저 정의를 복제할 수 있습니다. CREATE PROCEDURE는 각 구독자에 복사됩니다. CLR(공용 언어 런타임) 저장 프로시저의 경우 연결된 어셈블리도 복사됩니다. 프로시저 변경 내용은 구독자에 복제됩니다. 연결된 어셈블리에 대한 변경 내용은 변경되지 않습니다.
트랜잭션 복제를 사용하면 저장 프로시저의 정의를 복제할 수 있을 뿐만 아니라 저장 프로시저 실행도 복제할 수 있습니다. 이는 많은 양의 데이터에 영향을 주는 유지 관리 지향 저장 프로시저의 결과를 복제하는 데 유용합니다. 자세한 내용은 Publishing Stored Procedure Execution in Transactional Replication를 참조하세요.
게시 뷰
모든 유형의 복제를 사용하면 보기를 복제할 수 있습니다. 뷰(그리고 인덱싱된 뷰인 경우 해당 인덱스)는 구독자에 복사할 수 있지만 기본 테이블도 복제해야 합니다.
인덱싱된 뷰의 경우 트랜잭션 복제를 사용하면 인덱싱된 뷰를 뷰가 아닌 테이블로 복제하므로 기본 테이블을 함께 복제할 필요가 없습니다. 이렇게 하려면 sp_addarticle(Transact-SQL)의 @type 매개 변수에 대해 "인덱싱된 뷰 로그베이스" 옵션 중 하나를 지정합니다. sp_addarticle 사용에 대한 자세한 내용은 아티클 정의를 참조하세요.
사용자 정의 함수 게시
CLR 함수 및 Transact-SQL 함수에 대한 CREATE FUNCTION 문이 각 구독자에 복사됩니다. CLR 함수의 경우 연결된 어셈블리도 복사됩니다. 함수 변경 내용은 구독자에 복제됩니다. 연결된 어셈블리에 대한 변경 내용은 변경되지 않습니다.
사용자 정의 형식 및 별칭 데이터 형식 게시
사용자 정의 형식 또는 별칭 데이터 형식을 사용하는 열은 다른 열처럼 구독자에 복제됩니다. 복제된 각 유형에 대한 CREATE TYPE 문이 테이블 생성 전에 구독자에서 실행됩니다. 사용자 정의 형식의 경우 연결된 어셈블리도 각 구독자에 복사됩니다. 사용자 정의 형식 및 별칭 데이터 형식에 대한 변경 내용은 구독자에 복제되지 않습니다.
형식이 데이터베이스에 정의되어 있지만 게시를 만들 때 열에서 참조되지 않는 경우 해당 형식이 구독자로 복사되지 않습니다. 이후에 데이터베이스에서 해당 형식의 열을 만들고 복제하려는 경우 먼저 형식(및 사용자 정의 형식에 연결된 어셈블리)을 각 구독자에 수동으로 복사해야 합니다.
전체 텍스트 인덱스 게시
CREATE FULLTEXT INDEX 문은 각 구독자에 복사되고 전체 텍스트 인덱스는 구독자에서 만들어집니다. ALTER FULLTEXT INDEX를 사용하여 전체 텍스트 인덱스를 변경한 내용은 복제되지 않습니다.
게시된 개체의 스키마 변경
복제는 게시된 개체에 대한 광범위한 스키마 변경을 지원합니다. SQL Server 게시자에 게시된 개체에 대해 다음 스키마 변경을 수행하면 기본적으로 모든 SQL Server 구독자에 변경 내용이 전파됩니다.
ALTER TABLE
ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
자세한 내용은 게시 데이터베이스의 스키마 변경을 참조하세요.
게시에 대한 고려 사항
데이터베이스 개체를 게시할 때 다음 문제에 유의하세요.
게시 및 초기 스냅샷을 만드는 동안 사용자가 데이터베이스에 액세스할 수 있지만 게시자에서 활동이 낮은 시간에 게시를 만드는 것이 좋습니다.
게시를 만든 후에는 데이터베이스 이름을 바꿀 수 없습니다. 이름을 바꾸려면 먼저 데이터베이스에서 복제를 제거해야 합니다.
하나 이상의 다른 데이터베이스 개체에 의존하는 데이터베이스 개체를 게시하는 경우 참조된 모든 개체를 게시해야 합니다. 예를 들어 테이블에 종속된 뷰를 게시하는 경우 테이블도 게시해야 합니다.
참고 항목
병합 게시에 아티클을 추가하고 기존 아티클이 새 아티클에 종속된 경우 sp_addmergearticle 및 sp_changemergearticle의 @processing_order 매개 변수를 사용하여 두 아티클의 처리 순서를 지정해야 합니다. 다음 시나리오를 고려합니다. 테이블을 게시하지만 테이블에서 참조하는 함수는 게시하지 않습니다. 함수를 게시하지 않으면 구독자에서 테이블을 만들 수 없습니다. 게시에 함수를 추가할 경우에는 sp_addmergearticle 의 @processing_order 매개 변수에 값 1을 지정하고 sp_changemergearticle 의 @processing_order 매개 변수에 값 2를 지정하며 @article매개 변수에는 테이블 이름을 지정합니다. 이 처리 순서를 사용하면 함수에 종속된 테이블이 생성되기 전에 해당 함수가 구독자에서 생성됩니다. 함수 번호가 테이블 번호보다 낮은 경우 각 아티클에 다른 번호를 사용할 수 있습니다.
게시 이름은 다음과 같은 문자를 포함할 수 없습니다. % * [ ] | : " ? \ / <>.
개체 게시 제한 사항|
게시할 수 있는 아티클 및 열의 최대 수는 게시 유형에 따라 다릅니다. 자세한 내용은 SQL Server의 최대 용량 사양의 "복제 개체" 섹션을 참조하세요.
WITH ENCRYPTION으로 정의된 저장 프로시저, 뷰, 트리거 및 사용자 정의 함수는 SQL Server 복제의 일부로 게시할 수 없습니다.
XML 스키마 컬렉션을 복제할 수 있지만 초기 스냅샷 후에는 변경 내용이 복제되지 않습니다.
트랜잭션 복제에 대해 게시된 테이블에는 기본 키가 있어야 합니다. 트랜잭션 복제 게시의 테이블에서는 기본 키 열과 연결된 인덱스를 해제할 수 없습니다. 이러한 인덱스는 복제에 필요합니다. 인덱스를 해제하려면 먼저 게시에서 테이블을 삭제해야 합니다.
sp_bindefault(Transact-SQL)로 생성된 바인딩된 기본값은 복제되지 않습니다. 바인딩된 기본값은 ALTER TABLE 또는 CREATE TABLE의 DEFAULT 키워드로 생성된 기본값으로 대체되었습니다.
인덱싱된 뷰에 대한 NOEXPAND 힌트를 포함하는 함수는 배포 에이전트가 제공하는 순서로 인해 참조된 테이블 및 인덱싱된 뷰와 동일한 게시에 게시할 수 없습니다. 이 문제를 해결하려면 첫 번째 게시에 테이블 및 인덱싱된 뷰 만들기를 배치하고 인덱싱된 뷰에 NOEXPAND 힌트가 포함된 함수를 첫 번째 게시가 완료된 후 게시하는 두 번째 게시에 추가합니다. 또는 이러한 함수에 대한 스크립트를 만들고 sp_addpublication의 @post_snapshot_script 매개 변수를 사용하여 스크립트를 제공합니다.
스키마 및 개체 소유권
복제에는 스키마 및 개체 소유권과 관련하여 새 게시 마법사에서 다음과 같은 기본 동작이 있습니다.
호환성 수준이 90 이상인 병합 게시, 스냅샷 게시, 트랜잭션 게시의 아티클에 대해 기본적으로 구독자의 개체 소유자는 게시자에 있는 해당 개체의 소유자와 동일합니다. 개체를 소유한 스키마가 구독자에 없는 경우 자동으로 만들어집니다.
호환성 수준이 90보다 낮은 병합 게시의 아티클의 경우: 기본적으로 소유자는 비워 두고 구독자에서 개체를 만드는 동안 dbo로 지정됩니다.
Oracle 게시의 아티클에 대해 기본적으로 소유자는 dbo로 지정됩니다.
문자 모드 스냅샷(SQL Server 이외 구독자 및 SQL Server Compact 구독자에 사용됨)을 사용하는 게시의 아티클의 경우 기본적으로 소유자는 비워 둡니다. 소유자는 기본적으로 구독자에 연결하기 위해 배포 에이전트 또는 병합 에이전트를 사용하는 계정과 연결된 소유자로 설정됩니다.
개체 소유자는 아티클 속성 - <Article> 대화 상자와 sp_addarticle, sp_addmergearticle, sp_changearticle 및 sp_changemergearticle 저장 프로시저를 통해 변경할 수 있습니다. 자세한 내용은 게시 속성 보기 및 수정, 아티클 정의, 아티클 속성 보기 및 수정을 참조하세요.
이전 버전의 SQL Server를 실행하는 구독자에게 데이터 게시
이전 버전의 SQL Server를 실행하는 구독자에 게시하는 경우 복제 관련 기능과 전체 제품의 기능 측면에서 해당 버전의 기능으로 제한됩니다.
병합 게시는 호환성 수준을 사용하여 게시에서 사용할 수 있는 기능을 결정하고 이전 버전의 SQL Server를 실행하는 구독자를 지원할 수 있습니다.
둘 이상의 게시에 테이블 게시
복제는 다음과 같은 제한 사항이 있는 여러 게시(데이터 다시 게시 포함)에 아티클 게시를 지원합니다.
아티클이 트랜잭션 게시 및 병합 게시에 게시되는 경우 병합 아티클에 대해 @published_in_tran_pub 속성이 TRUE로 설정되어 있는지 확인합니다. 속성 설정에 대한 자세한 내용은 게시 속성 보기 및 수정, 아티클 속성 보기 및 수정을 참조하세요.
트랜잭션 구독에 속한 아티클을 병합 게시에 포함시킬 경우 @published_in_tran_pub 속성도 설정해야 합니다. 이 경우 기본적으로 트랜잭션 복제에는 구독자의 테이블이 읽기 전용으로 처리되어야 합니다. 병합 복제로 인해 트랜잭션 구독의 테이블에 데이터가 변경되면 데이터가 일치하지 않을 수 있습니다. 이러한 가능성을 방지하려면 병합 게시에서 이러한 테이블을 다운로드 전용으로 지정하는 것이 좋습니다. 이렇게 하면 병합 구독자가 테이블에 데이터 변경 내용을 업로드할 수 없습니다. 자세한 내용은 다운로드 전용 아티클로 병합 복제 성능 최적화를 참조하세요.
큐에 대기 중인 구독 업데이트가 설정된 트랜잭션 게시와 병합 게시에 아티클을 모두 게시할 수는 없습니다.
구독 업데이트를 지원하는 트랜잭션 게시에 포함된 문서는 다시 게시할 수 없습니다.
큐에 대기 중인 구독 업데이를 지원하는 둘 이상의 트랜잭션 게시에 아티클이 게시되는 경우 다음 속성은 모든 게시에서 아티클에 대해 동일한 값을 가져야 합니다.
속성 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)를 참조하세요.
트랜잭션 복제 및 필터링되지 않은 병합 복제는 여러 게시에 테이블을 게시한 다음 구독 데이터베이스의 단일 테이블 내에서 구독(일반적으로 롤업 시나리오라고 함)을 지원합니다. 롤업은 중앙 구독자의 한 테이블에 있는 여러 위치에서 데이터의 하위 집합을 집계하는 데 자주 사용됩니다. 필터링된 병합 게시는 중앙 구독자 시나리오를 지원하지 않습니다. 병합 복제의 경우 롤업은 일반적으로 매개 변수가 있는 행 필터가 있는 단일 게시를 통해 구현됩니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.