sp_addsubscription(Transact-SQL)
게시에 구독을 추가하고 구독자 상태를 설정합니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.
구문
sp_addsubscription [ @publication = ] 'publication'
[ , [ @article = ] 'article']
[ , [ @subscriber = ] 'subscriber' ]
[ , [ @destination_db = ] 'destination_db' ]
[ , [ @sync_type = ] 'sync_type' ]
[ , [ @status = ] 'status'
[ , [ @subscription_type = ] 'subscription_type' ]
[ , [ @update_mode = ] 'update_mode' ]
[ , [ @loopback_detection = ] '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 = ] 'optional_command_line' ]
[ , [ @reserved = ] 'reserved' ]
[ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
[ , [ @offloadagent= ] remote_agent_activation]
[ , [ @offloadserver= ] 'remote_agent_server_name' ]
[ , [ @dts_package_name= ] 'dts_package_name' ]
[ , [ @dts_package_password= ] 'dts_package_password' ]
[ , [ @dts_package_location= ] 'dts_package_location' ]
[ , [ @distribution_job_name= ] 'distribution_job_name' ]
[ , [ @publisher = ] 'publisher' ]
[ , [ @backupdevicetype = ] 'backupdevicetype' ]
[ , [ @backupdevicename = ] 'backupdevicename' ]
[ , [ @mediapassword = ] 'mediapassword' ]
[ , [ @password = ] 'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
인수
- [ @publication=] 'publication'
게시의 이름입니다. publication은 sysname이며 기본값은 없습니다.
- [ @article=] 'article'
게시를 구독하는 아티클입니다. article은 sysname이며 기본값은 all입니다. all인 경우 해당 게시의 모든 아티클에 구독이 추가됩니다. Oracle 게시자의 경우 all 또는 NULL 값만 지원됩니다.
- [ @subscriber=] 'subscriber'
구독자의 이름입니다. subscriber는 sysname이며 기본값은 NULL입니다.
- [ @destination_db=] 'destination_db'
복제된 데이터가 위치할 대상 데이터베이스의 이름입니다. destination_db는 sysname이며 기본값은 NULL입니다. NULL인 경우 destination_db는 게시 데이터베이스의 이름으로 설정됩니다. Oracle 게시자의 경우 destination_db를 반드시 지정해야 합니다. 비-SQL Server(Non-SQL Server) 구독자의 경우 destination_db에 (기본 대상) 값을 지정합니다.
[ @sync_type=] 'sync_type'
구독 동기화 유형입니다. sync_type은 **nvarchar(255)**이며 다음 값 중 하나일 수 있습니다.값
[ @status=] 'status'
구독 상태입니다. status는 sysname이며 기본값은 NULL입니다. 이 매개 변수를 명시적으로 설정하지 않으면 복제 시 자동으로 다음 값 중 하나로 설정됩니다.값 설명 active
구독이 초기화되고 변경 내용을 받아들일 준비가 되었습니다. 이 옵션은 sync_type 값이 none, initialize with backup 또는 replication support only인 경우에 설정됩니다.
subscribed
구독을 초기화해야 합니다. 이 옵션은 sync_type 값이 automatic인 경우에 설정됩니다.
[ @subscription_type=] 'subscription_type'
구독의 유형입니다. subscription_type은 **nvarchar(4)**이며 기본값은 push입니다. push 또는 pull이 될 수 있습니다. push 구독의 배포 에이전트는 배포자에 있고 pull 구독의 배포 에이전트는 구독자에 있습니다. subscription_type이 pull이면 게시자에 알려진 명명된 끌어오기 구독을 만들 수 있습니다. 자세한 내용은 게시 구독을 참조하십시오.[!참고] 익명 구독은 이 저장 프로시저를 사용할 필요가 없습니다.
[ @update_mode=] 'update_mode'
업데이트의 유형입니다*.* update_mode는 **nvarchar(30)**이며 다음 값 중 하나일 수 있습니다.값 설명 read only(기본값)
구독이 읽기 전용입니다. 구독자의 변경 내용이 게시자에 전달되지 않습니다.
sync tran
구독을 즉시 업데이트하도록 설정합니다. Oracle 게시자에 대해서는 지원되지 않습니다.
queued tran
구독을 지연 업데이트하도록 설정합니다. 구독자에서 데이터를 수정하고 큐에 저장한 후 게시자에 전파할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다.
failover
구독을 즉시 업데이트하되 장애 조치(Failover) 시 지연 업데이트하도록 설정합니다. 구독자에서 데이터를 수정하여 게시자에 즉시 전파할 수 있습니다. 게시자와 구독자가 연결되지 않은 경우 구독자와 게시자가 다시 연결될 때까지 구독자의 데이터 수정 내용을 큐에 저장하도록 업데이트 모드를 변경할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다.
queued failover
구독을 지연 업데이트하되 즉시 업데이트 모드로 변경할 수 있도록 설정합니다. 구독자에서 데이터를 수정한 후 구독자와 게시자가 연결될 때까지 수정 내용을 큐에 저장할 수 있습니다. 연결이 지속되는 경우 업데이트 모드를 즉시 업데이트로 변경할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다.
구독되는 게시가 DTS를 허용하는 경우 synctran 및 queued tran 값은 허용되지 않습니다.
[ @loopback_detection=] 'loopback_detection'
배포 에이전트가 구독자에서 발생한 트랜잭션을 다시 구독자에게 보낼지 여부를 지정합니다. loopback_detection은 **nvarchar(5)**이며 다음 값 중 하나일 수 있습니다.값 설명 true
배포 에이전트가 구독자에서 발생한 트랜잭션을 다시 구독자에게 보내지 않습니다. 양방향 트랜잭션 복제에 사용됩니다. 자세한 내용은 양방향 트랜잭션 복제를 참조하십시오.
false
배포 에이전트가 구독자에서 발생한 트랜잭션을 다시 구독자에게 보냅니다.
NULL(기본값)
SQL Server 구독자에 대해서는 자동으로 true로 설정되고 비-SQL Server(Non-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은 int이며 기본값은 NULL입니다.
[ @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는 int이며 기본값은 NULL입니다.
[ @frequency_subday=] frequency_subday
정의된 기간 동안 다시 계획하는 빈도를 분으로 표시한 것입니다. frequency_subday는 int이며 다음 값 중 하나일 수 있습니다.값 설명 1
한 번
2
초
4
분
8
시간
NULL
- [ @frequency_subday_interval=] frequency_subday_interval
frequency_subday에 대한 간격입니다. frequency_subday_interval은 int이며 기본값은 NULL입니다.
- [ @active_start_time_of_day=] active_start_time_of_day
하루 중에서 배포 에이전트가 처음으로 실행되도록 예약된 시간이며 HHMMSS 형식으로 표시됩니다. active_start_time_of_day는 int이며 기본값은 NULL입니다.
- [ @active_end_time_of_day=] active_end_time_of_day
하루 중에서 배포 에이전트가 마지막으로 실행되도록 예약된 시간이며 HHMMSS 형식으로 표시됩니다. active_end_time_of_day는 int이며 기본값은 NULL입니다.
- [ @active_start_date=] active_start_date
배포 에이전트가 처음으로 실행되도록 예약된 날짜이며 YYYYMMDD 형식으로 표시됩니다. active_start_date는 int이며 기본값은 NULL입니다.
- [ @active_end_date=] active_end_date
배포 에이전트 실행이 마지막으로 실행되도록 예약된 날짜이며 YYYYMMDD 형식으로 표시됩니다. active_end_date는 int이며 기본값은 NULL입니다.
- [ @optional_command_line=] 'optional_command_line'
실행할 선택적인 명령 프롬프트입니다. optional_command_line은 **nvarchar(4000)**이며 기본값은 NULL입니다.
- [ @reserved=] 'reserved'
내부적으로만 사용할 수 있습니다.
- [ @enabled_for_syncmgr=] 'enabled_for_syncmgr'
Microsoft Windows 동기화 관리자를 통해 구독을 동기화할 수 있는지 여부입니다. enabled_for_syncmgr는 **nvarchar(5)**이며 기본값은 FALSE입니다. false인 경우 구독이 Windows 동기화 관리자에 등록되지 않습니다. true인 경우에는 구독이 Windows 동기화 관리자에 등록되며 SQL Server Management Studio를 시작하지 않고 구독을 동기화할 수 있습니다. Oracle 게시자에 대해서는 지원되지 않습니다.
[ @offloadagent= ] 'remote_agent_activation'
에이전트를 원격으로 활성화할 수 있도록 지정합니다. remote_agent_activation은 bit이며 기본값은 0입니다.[!참고] 이 매개 변수는 더 이상 사용되지 않으며 이전 버전의 스크립트와의 호환성을 위해서만 유지 관리됩니다.
- [ @offloadserver= ] 'remote_agent_server_name'
원격 활성화에 사용할 서버의 네트워크 이름을 지정합니다. remote_agent_server_name은 sysname이며 기본값은 NULL입니다.
- [ @dts_package_name= ] 'dts_package_name'
DTS(데이터 변환 서비스) 패키지의 이름을 지정합니다. dts_package_name은 sysname이며 기본값은 NULL입니다. 예를 들어 DTSPub_Package의 패키지를 지정하려면 매개 변수가@dts_package_name = N'DTSPub_Package'
가 되어야 합니다. 이 매개 변수는 밀어넣기 구독에 사용할 수 있습니다. DTS 패키지 정보를 끌어오기 구독에 추가하려면 sp_addpullsubscription_agent를 사용하십시오.
[ @dts_package_password= ] 'dts_package_password'
패키지의 암호를 지정합니다(있는 경우). dts_package_password는 sysname이며 기본값은 NULL입니다.[!참고] dts_package_name이 지정된 경우 암호를 지정해야 합니다.
- [ @dts_package_location= ] 'dts_package_location'
패키지 위치를 지정합니다. dts_package_location은 **nvarchar(12)**이며 기본값은 DISTRIBUTOR입니다. 패키지 위치는 distributor 또는 subscriber일 수 있습니다.
- [ @distribution_job_name= ] 'distribution_job_name'
내부적으로만 사용할 수 있습니다.
[ @publisher= ] 'publisher'
비 Microsoft SQL Server 게시자를 지정합니다. publisher는 sysname이며 기본값은 NULL입니다.[!참고] SQL Server 게시자에서는 publisher를 지정하면 안 됩니다.
[ @backupdevicetype= ] 'backupdevicetype'
백업에서 구독자를 초기화할 때 사용되는 백업 장치의 유형을 지정합니다. backupdevicetype은 **nvarchar(20)**이며 다음 값 중 하나일 수 있습니다.값 설명 logical(기본값)
백업 장치가 논리적 장치입니다.
disk
백업 장치가 디스크 드라이브입니다.
tape
백업 장치가 테이프 드라이브입니다.
backupdevicetype은 sync_method가 initialize_with_backup으로 설정된 경우에만 사용됩니다.
- [ @backupdevicename= ] 'backupdevicename'
백업에서 구독자를 초기화할 때 사용되는 장치의 이름을 지정합니다. backupdevicename은 **nvarchar(1000)**이며 기본값은 NULL입니다.
- [ @mediapassword= ] 'mediapassword'
미디어를 포맷할 때 암호를 설정한 경우 미디어 세트의 암호를 지정합니다. mediapassword는 sysname이며 기본값은 NULL입니다.
- [ @password= ] 'password'
백업을 만들 때 암호를 설정한 경우 백업의 암호를 지정합니다. password는 sysname이며 기본값은 NULL입니다.
- [ @fileidhint= ] fileidhint
복원할 백업 세트의 서수 값을 식별합니다. fileidhint는 int이며 기본값은 NULL입니다.
- [ @unload= ] unload
백업으로 초기화를 완료한 후 테이프 백업 장치를 언로드할지 여부를 지정합니다. unload는 bit이며 기본값은 1입니다. 1은 테이프를 언로드하도록 지정합니다. unload는 backupdevicetype이 tape인 경우에만 사용됩니다.
- [ @subscriptionlsn= ] subscriptionlsn
내부적으로만 사용할 수 있습니다.
- [ @subscriptionstreams= ] subscriptionstreams
단일 스레드를 사용할 때 나타나는 여러 가지 트랜잭션 특징을 유지하면서 변경 내용의 일괄 처리를 구독자에 대해 병렬로 적용하기 위해 배포 에이전트당 허용된 연결 수입니다. subscriptionstreams는 tinyint이며 기본값은 NULL입니다. 1에서 64 사이의 값 범위가 지원됩니다. 비-SQL Server(Non-SQL Server) 구독자, Oracle 게시자 또는 피어 투 피어 구독의 경우 이 매개 변수가 지원되지 않습니다.
[ @subscriber_type=] subscriber_type
구독자의 유형입니다. subscriber_type은 tinyint이며 다음 값 중 하나일 수 있습니다.값 설명 0(기본값)
SQL Server 구독자
1
ODBC 데이터 원본 서버
2
Microsoft Jet 데이터베이스
3
OLE DB 공급자
반환 코드 값
0(성공) 또는 1(실패)
주의
sp_addsubscription은 스냅숏 복제 및 트랜잭션 복제에 사용됩니다.
sysadmin 고정 서버 역할의 멤버가 밀어넣기 구독을 만들기 위해 sp_addsubscription을 실행할 경우 배포 에이전트 작업이 암시적으로 생성되어 SQL Server 에이전트 서비스 계정에서 실행됩니다. sp_addpushsubscription_agent를 실행하고 @job_login 및 @job_password에 대해 다른 에이전트 특정 Windows 계정의 자격 증명을 지정하는 것이 좋습니다. 자세한 내용은 복제 에이전트 보안 모델을 참조하십시오.
sp_addsubscription은 ODBC 및 OLE DB 구독자가 다음과 같은 게시에 액세스하는 것을 막습니다.
- sp_addpublication에 대한 호출에서 기본 sync_method로 생성된 게시
- pre_creation_cmd 매개 변수 값이 3(잘라내기)으로 설정된 sp_addarticle 저장 프로시저를 사용하여 게시에 추가한 아티클이 있는 게시
- update_mode를 sync tran으로 설정하려고 시도하는 게시
- 매개 변수가 있는 문을 사용하도록 구성된 아티클이 있는 게시
또한 게시의 allow_queued_tran 옵션이 구독자의 변경 내용을 게시자에 적용할 수 있을 때까지 큐에 저장하도록 하는 true로 설정된 경우 아티클의 타임스탬프 열이 timestamp로 스크립팅되고 해당 열의 변경 내용이 구독자에게 전달됩니다. 구독자는 타임스탬프 열 값을 생성하고 업데이트합니다. ODBC 또는 OLE DB 구독자의 경우 allow_queued_tran 옵션이 true로 설정되고 타임스탬프 열이 있는 아티클이 있는 게시에 대해 구독을 시도하면 sp_addsubscription이 실패합니다.
구독이 DTS 패키지를 사용하지 않을 경우 allow_transformable_subscriptions로 설정된 게시를 구독할 수 없습니다. 게시의 테이블을 DTS 구독과 DTS가 아닌 구독 양쪽 모두에 복제해야할 경우 각 구독 유형당 하나씩 두 개의 게시를 만들어야 합니다.
사용 권한
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'AdventureWorksReplica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks]
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
참고 항목
참조
sp_addpushsubscription_agent(Transact-SQL)
sp_changesubstatus(Transact-SQL)
sp_dropsubscription(Transact-SQL)
sp_helpsubscription(Transact-SQL)
시스템 저장 프로시저(Transact-SQL)
관련 자료
방법: 밀어넣기 구독 만들기(Replication Transact-SQL Programming)
How to: Create a Subscription for a Non-SQL Server Subscriber (Replication Transact-SQL Programming)
게시 구독