sp_addsubscription(Transact-SQL)
적용 대상: SQL Server
Azure SQL Database
게시에 구독을 추가하고 구독자 상태를 설정합니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.
구문
sp_addsubscription
[ @publication = ] N'publication'
[ , [ @article = ] N'article' ]
[ , [ @subscriber = ] N'subscriber' ]
[ , [ @destination_db = ] N'destination_db' ]
[ , [ @sync_type = ] N'sync_type' ]
[ , [ @status = ] N'status' ]
[ , [ @subscription_type = ] N'subscription_type' ]
[ , [ @update_mode = ] N'update_mode' ]
[ , [ @loopback_detection = ] N'loopback_detection' ]
[ , [ @frequency_type = ] frequency_type ]
[ , [ @frequency_interval = ] frequency_interval ]
[ , [ @frequency_relative_interval = ] frequency_relative_interval ]
[ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
[ , [ @frequency_subday = ] frequency_subday ]
[ , [ @frequency_subday_interval = ] frequency_subday_interval ]
[ , [ @active_start_time_of_day = ] active_start_time_of_day ]
[ , [ @active_end_time_of_day = ] active_end_time_of_day ]
[ , [ @active_start_date = ] active_start_date ]
[ , [ @active_end_date = ] active_end_date ]
[ , [ @optional_command_line = ] N'optional_command_line' ]
[ , [ @reserved = ] N'reserved' ]
[ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
[ , [ @offloadagent = ] offloadagent ]
[ , [ @offloadserver = ] N'offloadserver' ]
[ , [ @dts_package_name = ] N'dts_package_name' ]
[ , [ @dts_package_password = ] N'dts_package_password' ]
[ , [ @dts_package_location = ] N'dts_package_location' ]
[ , [ @distribution_job_name = ] N'distribution_job_name' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @backupdevicetype = ] N'backupdevicetype' ]
[ , [ @backupdevicename = ] N'backupdevicename' ]
[ , [ @mediapassword = ] N'mediapassword' ]
[ , [ @password = ] N'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
[ , [ @memory_optimized = ] memory_optimized ]
[ ; ]
인수
[ @publication = ] N'publication'
게시의 이름입니다. @publication 기본값이 없는 sysname입니다.
[ @article = ] N'article'
발행물을 구독할 아티클입니다. @article sysname이며 기본값은 .입니다all
. 이 경우 all
구독이 해당 게시의 모든 아티클에 추가됩니다. Oracle 게시자의 값 all
만 지원 NULL
됩니다.
[ @subscriber = ] N'subscriber'
구독자의 이름입니다. @subscriber sysname이며 기본값은 .입니다NULL
.
참고 항목
서버 이름은 .로 <Hostname>,<PortNumber>
지정할 수 있습니다. SQL Server가 사용자 지정 포트를 사용하여 Linux 또는 Windows에 배포되고 브라우저 서비스를 사용할 수 없는 경우 연결의 포트 번호를 지정합니다. 원격 배포자에 대한 사용자 지정 포트 번호의 사용은 SQL Server 2019(15.x) 이상 버전에 적용됩니다.
[ @destination_db = ] N'destination_db'
복제된 데이터를 배치할 대상 데이터베이스의 이름입니다. @destination_db sysname이며 기본값은 .입니다NULL
. 경우 NULL
@destination_db 게시 데이터베이스의 이름으로 설정됩니다. Oracle 게시자의 경우 @destination_db 지정해야 합니다. SQL Server 이외 구독자의 경우 @destination_db 값(기본 대상)을 지정합니다.
[ @sync_type = ] N'sync_type'
구독 동기화 유형입니다. @sync_type nvarchar(255)이며 다음 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
none 1 |
구독자에는 게시된 테이블에 대한 스키마 및 초기 데이터가 이미 있습니다. |
automatic (기본값) |
게시된 테이블에 대한 스키마 및 초기 데이터는 먼저 구독자에게 전송됩니다. |
replication support only 2 |
적절한 경우 구독 업데이트를 지원하는 아티클 사용자 지정 저장 프로시저 및 트리거의 구독자에서 자동 생성을 제공합니다. 구독자에 게시된 테이블에 대한 스키마 및 초기 데이터가 이미 있다고 가정합니다. 피어 투 피어 트랜잭션 복제 토폴로지를 구성하는 경우 토폴로지의 모든 노드에 있는 데이터가 동일해야 합니다. 자세한 내용은 피어 투 피어 - 트랜잭션 복제를 참조 하세요. |
initialize with backup 2 |
게시된 테이블에 대한 스키마 및 초기 데이터는 게시 데이터베이스의 백업에서 가져옵니다. 구독자에 게시 데이터베이스 백업에 대한 액세스 권한이 있다고 가정합니다. 백업에 대한 백업 및 미디어 유형의 위치는 @backupdevicename 및 @backupdevicetype 의해 지정됩니다. 이 옵션을 사용하는 경우 구성 중에 피어 투 피어 트랜잭션 복제 토폴로지의 정지를 수행할 필요가 없습니다. |
initialize from lsn |
피어 투 피어 트랜잭션 복제 토폴로지에 노드를 추가할 때 사용됩니다. 관련된 모든 트랜잭션이 새 노드에 복제되도록 하려면 @subscriptionlsn을 함께 사용합니다. 구독자에 게시된 테이블에 대한 스키마 및 초기 데이터가 이미 있다고 가정합니다. 자세한 내용은 피어 투 피어 - 트랜잭션 복제를 참조 하세요. |
1 이 옵션은 더 이상 사용되지 않습니다. 대신 복제 지원만 사용합니다.
2 SQL Server가 아닌 게시에 대한 구독은 지원되지 않습니다.
참고 항목
시스템 테이블 및 데이터는 항상 전송됩니다.
[ @status = ] N'status'
구독 상태입니다. @status 기본값NULL
인 sysname입니다. 이 매개 변수를 명시적으로 설정하지 않으면 복제에서 자동으로 이러한 값 중 하나로 설정합니다.
값 | 설명 |
---|---|
active |
구독이 초기화되고 변경 내용을 수락할 준비가 된 것입니다. 이 옵션은 @sync_type 값이 없는 경우, 백업을 사용하여 초기화하거나 복제 지원만 할 때 설정됩니다. |
subscribed |
구독을 초기화해야 합니다. 이 옵션은 @sync_type 값이 자동으로 설정됩니다. |
[ @subscription_type = ] N'subscription_type'
구독 유형입니다. @subscription_type 기본값push
인 nvarchar(4)입니다. push
또는 pull
일 수 있습니다. 밀어넣기 구독의 배포 에이전트 배포자에 상주하며 끌어오기 구독의 배포 에이전트 구독자에 상주합니다. pull
@subscription_type 게시자에 알려진 명명된 끌어오기 구독을 만드는 것입니다. 자세한 내용은 게시 구독을 참조 하세요.
참고 항목
익명 구독은 이 저장 프로시저를 사용할 필요가 없습니다.
[ @update_mode = ] N'update_mode'
업데이트 유형. @update_mode nvarchar(30)이며 이러한 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
read only (기본값) |
구독이 읽기 전용입니다. 구독자의 변경 내용은 게시자에게 전송되지 않습니다. |
sync tran |
즉시 업데이트 구독에 대한 지원을 설정합니다. Oracle 게시자에 대해서는 지원되지 않습니다. |
queued tran |
지연 업데이트에 대한 구독을 사용하도록 설정합니다. 구독자에서 데이터를 수정하고 큐에 저장한 다음 게시자에 전파할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다. |
failover |
지연 업데이트를 장애 조치(failover)로 즉시 업데이트하기 위해 구독을 사용하도록 설정합니다. 구독자에서 데이터를 수정하고 게시자에 즉시 전파할 수 있습니다. 게시자와 구독자가 연결되지 않은 경우 구독자와 게시자가 다시 연결될 때까지 구독자에서 수정한 데이터가 큐에 저장되도록 업데이트 모드를 변경할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다. |
queued failover |
구독을 지연 업데이트 구독으로 설정하며 즉시 업데이트 모드로 변경할 수 있는 기능을 포함합니다. 구독자와 게시자 간에 연결이 설정될 때까지 구독자에서 데이터를 수정하고 큐에 저장할 수 있습니다. 연속 연결이 설정되면 업데이트 모드를 즉시 업데이트로 변경할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다. |
구독 중인 게시가 DTS를 허용하는 경우 값 sync tran
이며 queued tran
허용되지 않습니다.
[ @loopback_detection = ] N'loopback_detection'
배포 에이전트 구독자에서 시작된 트랜잭션을 구독자에게 다시 보낼지 지정합니다. @loopback_detection nvarchar(5)이며 이러한 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
true |
배포 에이전트 구독자에서 시작된 트랜잭션을 구독자에게 다시 보내지 않습니다. 양방향 트랜잭션 복제에 사용됩니다. 자세한 내용은 양방향 트랜잭션 복제를 참조 하세요. |
false |
배포 에이전트 구독자에서 시작된 트랜잭션을 다시 구독자에게 보냅니다. |
NULL (기본값) |
SQL Server 구독자에 대해 true로 자동 설정되고 SQL Server 이외 구독자에 대해서는 false로 설정됩니다. |
[ @frequency_type = ] frequency_type
배포 작업을 예약할 빈도입니다. @frequency_type int이며 이러한 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
1 |
한 번 |
2 |
주문형 |
4 |
매일 |
8 |
매주 |
16 |
매월 |
32 |
월별 상대 |
64 (기본값) |
자동 시작 |
128 |
되풀이 |
[ @frequency_interval = ] frequency_interval
@frequency_type 설정된 빈도에 적용할 값입니다. @frequency_interval 기본값NULL
인 int입니다.
[ @frequency_relative_interval = ] frequency_relative_interval
배포 에이전트 날짜입니다. 이 매개 변수는 @frequency_type (월별 상대)로 설정 될 32
때 사용 됩니다. @frequency_relative_interval int이며 이러한 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
1 |
첫째 |
2 |
두 번째 |
4 |
세 번째 |
8 |
네 번째 |
16 |
마지막 |
NULL (기본값) |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
@frequency_type 사용되는 되풀이 요소입니다. @frequency_recurrence_factor 기본값NULL
인 int입니다.
[ @frequency_subday = ] frequency_subday
정의된 기간 동안 일정이 변경되는 빈도(분)입니다. @frequency_subday int이며 이러한 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
1 |
한 번 |
2 |
둘째 |
4 |
Minute |
8 |
Hour |
NULL |
[ @frequency_subday_interval = ] frequency_subday_interval
@frequency_subday 간격입니다. @frequency_subday_interval 기본값NULL
인 int입니다.
[ @active_start_time_of_day = ] active_start_time_of_day
배포 에이전트 처음 예약되고 형식HHmmss
이 지정된 하루 중 시간입니다. @active_start_time_of_day 기본값NULL
인 int입니다.
[ @active_end_time_of_day = ] active_end_time_of_day
배포 에이전트 예약이 중지되고 형식이 HHmmss
지정된 하루 중 시간입니다. @active_end_time_of_day 기본값NULL
인 int입니다.
[ @active_start_date = ] active_start_date
배포 에이전트 처음 예약된 날짜로 형식이 지정됩니다yyyyMMdd
. @active_start_date 기본값NULL
인 int입니다.
[ @active_end_date = ] active_end_date
배포 에이전트 예약이 중지되는 날짜로 yyyyMMdd
형식이 지정됩니다. @active_end_date 기본값NULL
인 int입니다.
[ @optional_command_line = ] N'optional_command_line'
실행할 선택적 명령 프롬프트입니다. @optional_command_line 기본값NULL
인 nvarchar(4000)입니다.
[ @reserved = ] N'reserved'
정보를 제공하기 위해서만 확인됩니다. 지원 안 됨 향후 호환성은 보장되지 않습니다.
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
Windows 동기화 관리자를 통해 구독을 동기화할 수 있는지 여부입니다. @enabled_for_syncmgr nvarchar(5)이며 기본값NULL
은 .와 동일합니다false
. 이 경우 false
구독이 Windows 동기화 관리자에 등록되지 않습니다. 이 경우 true
구독이 Windows 동기화 관리자에 등록되고 SQL Server Management Studio를 시작하지 않고 동기화할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다.
[ @offloadagent = ] offloadagent
에이전트를 원격으로 활성화할 수 있도록 지정합니다. @offloadagent 비트이며 기본값은 .입니다0
.
참고 항목
이 매개 변수는 사용되지 않으며 스크립트의 이전 버전과의 호환성을 위해서만 유지 관리됩니다.
[ @offloadserver = ] N'offloadserver'
원격 활성화에 사용할 서버의 네트워크 이름을 지정합니다. @offloadserver sysname이며 기본값은 .입니다NULL
.
[ @dts_package_name = ] N'dts_package_name'
DTS(데이터 변환 서비스) 패키지의 이름을 지정합니다. @dts_package_name sysname이며 기본값은 .입니다NULL
. 예를 들어 DTSPub_Package
의 패키지를 지정하려면 매개 변수가 @dts_package_name = N'DTSPub_Package'
여야 합니다. 이 매개 변수는 밀어넣기 구독에 사용할 수 있습니다. 끌어오기 구독 sp_addpullsubscription_agent
에 DTS 패키지 정보를 추가하려면 .
[ @dts_package_password = ] N'dts_package_password'
패키지에 암호가 있는 경우 암호를 지정합니다. @dts_package_password sysname이며 기본값은 .입니다NULL
.
참고 항목
@dts_package_name 지정한 경우 암호를 지정해야 합니다.
[ @dts_package_location = ] N'dts_package_location'
패키지 위치를 지정합니다. @dts_package_location nvarchar(12)이며 기본값NULL
은 .와 같습니다distributor
. 패키지의 위치는 일 수 있습니다distributor
.subscriber
[ @distribution_job_name = ] N'distribution_job_name'
정보를 제공하기 위해서만 확인됩니다. 지원 안 됨 향후 호환성은 보장되지 않습니다.
[ @publisher = ] N'publisher'
SQL Server 이외 게시자를 지정합니다. @publisher sysname이며 기본값은 .입니다NULL
.
참고 항목
@PUBLISHER SQL Server 게시자에 대해 지정해서는 안 됩니다.
[ @backupdevicetype = ] N'backupdevicetype'
백업에서 구독자를 초기화할 때 사용되는 백업 디바이스의 유형을 지정합니다. @backupdevicetype nvarchar(20)이며 다음 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
logical (기본값) |
백업 디바이스가 논리 디바이스입니다. |
disk |
백업 디바이스가 디스크 드라이브입니다. |
tape |
백업 디바이스가 테이프 드라이브입니다. |
@backupdevicetype @sync_method initialize_with_backup 설정된 경우에만 사용됩니다.
[ @backupdevicename = ] N'backupdevicename'
백업에서 구독자를 초기화할 때 사용되는 디바이스의 이름을 지정합니다. @backupdevicename 기본값NULL
인 nvarchar(1000)입니다.
[ @mediapassword = ] N'mediapassword'
미디어를 포맷할 때 암호를 설정한 경우 미디어 세트의 암호를 지정합니다. @mediapassword sysname이며 기본값은 .입니다NULL
.
참고 항목
SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.
[ @password = ] N'password'
백업을 만들 때 암호가 설정된 경우 백업의 암호를 지정합니다. @password sysname이며 기본값은 .입니다NULL
.
[ @fileidhint = ] fileidhint
복원할 백업 세트의 서수 값을 식별합니다. @fileidhint 기본값NULL
인 int입니다.
[ @unload = ] 언로드
백업으로 초기화를 완료한 후 테이프 백업 디바이스를 언로드할지 여부를 지정합니다. @unload 비트이며, 기본값1
은 테이프를 언로드해야 하므로 지정합니다. @unload @backupdevicetype 경우에만 tape
사용됩니다.
[ @subscriptionlsn = ] subscriptionlsn
구독에서 피어 투 피어 트랜잭션 복제 토폴로지에 노드 변경 내용을 배달하기 시작할 LSN(로그 시퀀스 번호)을 지정합니다. @subscriptionlsn 기본값NULL
인 binary(10)입니다. 모든 관련 트랜잭션이 새 노드에 복제되는지 확인하기 위해 @sync_type 값 initialize from lsn
과 함께 사용됩니다. 자세한 내용은 피어 투 피어 - 트랜잭션 복제를 참조 하세요.
[ @subscriptionstreams = ] subscriptionstreams
배포 에이전트 단일 스레드를 사용할 때 존재하는 많은 트랜잭션 특성을 유지하면서 구독자에 병렬로 변경 내용을 일괄 적용하는 데 허용되는 연결 수입니다. @subscriptionstreams 기본값NULL
인 tinyint입니다. 값 범위가 1
64
지원됩니다. 이 매개 변수는 SQL Server 이외 구독자, Oracle 게시자 또는 피어 투 피어 구독에 대해 지원되지 않습니다. @subscriptionstreams 사용할 때마다 테이블에 추가 행이 추가 msreplication_subscriptions
됩니다(스트림당 한 행)agent_id
NULL
.
참고 항목
Transact-SQL을 제공하도록 구성된 아티클에는 구독 스트림이 작동하지 않습니다. 구독 스트림을 사용하려면 저장 프로시저 호출을 대신 배달하도록 문서를 구성합니다.
[ @subscriber_type = ] subscriber_type
구독자의 유형입니다. @subscriber_type tinyint이며 이러한 값 중 하나일 수 있습니다.
값 | 설명 |
---|---|
0 (기본값) |
SQL Server 구독자 |
1 |
ODBC 데이터 원본 서버 |
2 |
Microsoft Jet 데이터베이스 |
3 |
OLE DB 공급자 |
[ @memory_optimized = ] memory_optimized
구독이 메모리 최적화 테이블을 지원한다는 것을 나타냅니다. @memory_optimized 비트이며 기본값 0
은 false입니다. 1
(true)는 구독이 메모리 최적화 테이블을 지원한다는 것을 의미합니다.
반환 코드 값
0
(성공) 또는 1
(실패).
설명
sp_addsubscription
는 스냅샷 복제 및 트랜잭션 복제에 사용됩니다.
밀어넣기 구독을 만들기 위해 sysadmin 고정 서버 역할의 멤버가 실행하는 경우 sp_addsubscription
배포 에이전트 작업이 암시적으로 만들어지고 SQL Server 에이전트 서비스 계정에서 실행됩니다. sp_addpushsubscription_agent 실행하고 에이전트별 다른 Windows 계정 @job_login 의 자격 증명을 지정하는 @job_password것이 좋습니다. 자세한 내용은 Replication Agent Security Model을 참조하세요.
sp_addsubscription
ODBC 및 OLE DB 구독자가 다음과 같은 게시에 액세스할 수 없도록 합니다.
sp_addpublication 호출에서 네이티브 @sync_method 사용하여 만들어졌습니다.
@pre_creation_cmd 매개 변수 값이 3(잘림)인 sp_addarticle 저장 프로시저를 사용하여 게시에 추가된 아티클을 포함합니다.
@update_mode .로 설정하려고 시도합니다
sync tran
.매개 변수가 있는 문을 사용하도록 구성된 아티클이 있는 게시
또한 게시 에 @allow_queued_tran 옵션이 true로 설정된 경우(게시자에서 적용할 수 있을 때까지 구독자에서 변경 내용을 큐에 대기할 수 있음) 아티클의 타임스탬프 열이 타임스탬프로 스크 립팅되고 해당 열의 변경 내용이 구독자로 전송됩니다. 구독자는 타임스탬프 열 값을 생성하고 업데이트합니다. ODBC 또는 OLE DB 구독자의 sp_addsubscription
경우 @allow_queued_tran true로 설정된 게시 및 타임스탬프 열이 있는 아티클을 구독하려고 하면 실패합니다.
구독에서 DTS 패키지를 사용하지 않는 경우 @allow_transformable_subscriptions 설정된 게시를 구독할 수 없습니다. 게시의 테이블을 DTS 구독과 비 DTS 구독 모두에 복제해야 하는 경우 각 구독 유형에 대해 하나씩 두 개의 개별 게시를 만들어야 합니다.
sync_type 옵션을 initialize with backup
선택할 때 또는 initialize from lsn
로그 판독기 에이전트를 실행한 sp_addsubscription
후 실행해야 설정 스크립트가 배포 데이터베이스에 기록됩니다.replication support only
로그 판독기 에이전트는 sysadmin 고정 서버 역할의 멤버인 계정으로 실행되어야 합니다. @sync_type 옵션을 설정Automatic
하면 특별한 로그 판독기 에이전트 작업이 필요하지 않습니다.
사용 권한
sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버만 실행할 sp_addsubscription
수 있습니다. 끌어오기 구독의 경우 게시 액세스 목록에 로그인한 사용자가 실행할 sp_addsubscription
수 있습니다.
예제
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables
-- on the command line and in SQL Server Management Studio, see the
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO