다음을 통해 공유


sp_addsubscription(Transact-SQL)

적용 대상: SQL Server Azure SQL Database

게시에 구독을 추가하고 구독자 상태를 설정합니다. 이 저장 프로시저는 게시 데이터베이스의 게시자에서 실행됩니다.

Transact-SQL 구문 표기 규칙

구문

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>\<InstanceName>,<PortNumber> 명명된 <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 기본값NULLint입니다.

[ @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 기본값NULLint입니다.

[ @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 기본값NULLint입니다.

[ @active_end_date = ] active_end_date

배포 에이전트 예약이 중지되는 날짜로 yyyyMMdd형식이 지정됩니다. @active_end_date 기본값NULLint입니다.

[ @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 백업 디바이스가 테이프 드라이브입니다.
url 백업 디바이스가 URL입니다.

@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_typeinitialize from lsn 과 함께 사용됩니다. 자세한 내용은 피어 투 피어 - 트랜잭션 복제를 참조 하세요.

[ @subscriptionstreams = ] subscriptionstreams

배포 에이전트 단일 스레드를 사용할 때 존재하는 많은 트랜잭션 특성을 유지하면서 구독자에 병렬로 변경 내용을 일괄 적용하는 데 허용되는 연결 수입니다. @subscriptionstreams 기본값NULL인 tinyint입니다. 값 범위가 1 64 지원됩니다. 이 매개 변수는 SQL Server 이외 구독자, Oracle 게시자 또는 피어 투 피어 구독에 대해 지원되지 않습니다. @subscriptionstreams 사용할 때마다 테이블에 추가 행이 추가 msreplication_subscriptions 됩니다(스트림당 한 행)agent_idNULL.

참고 항목

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