sp_addsubscription(Transact-SQL)

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

항목 링크 아이콘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 이외 구독자의 경우 destination_db에 (기본 대상) 값을 지정합니다.

  • [ @sync_type=\] 'sync_type'
    구독 동기화 유형입니다. sync_type은 nvarchar(255)이며 다음 값 중 하나일 수 있습니다.

    설명

    none

    게시된 테이블에 대한 스키마 및 초기 데이터가 구독자에 이미 있습니다.

    참고참고
    이 옵션은 더 이상 사용되지 않습니다. 대신 replication support only를 사용하십시오.

    automatic(기본값)

    게시된 테이블의 스키마 및 초기 데이터가 구독자에 먼저 전송됩니다.

    replication support only

    필요한 경우 구독자에서 구독 업데이트를 지원하는 아티클 사용자 지정 저장 프로시저 및 트리거의 자동 생성을 제공합니다. 게시된 테이블에 대한 스키마 및 초기 데이터가 구독자에 이미 있다고 가정합니다. 피어 투 피어 트랜잭션 복제 토폴로지를 구성하는 경우 토폴로지의 모든 노드에 있는 데이터가 동일해야 합니다. 자세한 내용은 방법: 피어 투 피어 트랜잭션 복제 구성(복제 Transact-SQL 프로그래밍)을 참조하십시오.

    SQL Server 이외 게시에 대한 구독에 대해서는 지원되지 않습니다.

    initialize with backup

    게시된 테이블의 스키마 및 초기 데이터는 게시 데이터베이스의 백업에서 가져옵니다. 구독자에 게시 데이터베이스 백업에 대한 액세스 권한이 있다고 가정합니다. 백업의 위치와 백업 미디어 유형은 backupdevicename 및 backupdevicetype으로 지정합니다. 이 옵션을 사용하는 경우 피어 투 피어 트랜잭션 복제 토폴로지를 구성 중에 중지할 필요가 없습니다.

    SQL Server 이외 게시에 대한 구독에 대해서는 지원되지 않습니다.

    initialize from lsn

    피어 투 피어 트랜잭션 복제 토폴로지에 노드를 추가할 때 사용합니다. 모든 관련 트랜잭션이 새 노드에 복제되도록 하려면 @subscriptionlsn을 함께 사용합니다. 게시된 테이블에 대한 스키마 및 초기 데이터가 구독자에 이미 있다고 가정합니다. 자세한 내용은 방법: 피어 투 피어 트랜잭션 복제 구성(복제 Transact-SQL 프로그래밍)을 참조하십시오.

    [!참고]

    시스템 테이블 및 데이터는 항상 전송됩니다.

  • [ @status=\] 'status'
    구독 상태입니다. status는 sysname이며 기본값은 NULL입니다. 이 매개 변수를 명시적으로 설정하지 않으면 복제 시 자동으로 다음 값 중 하나로 설정됩니다.

    설명

    active

    구독이 초기화되고 변경 내용을 받아들일 준비가 되었습니다. 이 옵션은 sync_type 값이 none, initialize with backup 또는 replication support only인 경우에 설정됩니다.

    subscribed

    구독을 초기화해야 합니다. 이 옵션은 sync_type 값이 automatic인 경우에 설정됩니다.

  • [ @subscription_type=\] 'subscription_type'
    구독의 유형입니다. 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를 허용하는 경우 sync tran 및 queued tran 값은 허용되지 않습니다.

  • [ @loopback_detection=\] '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는 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입니다.

    [!참고]

    Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

  • [ @password= ] 'password'
    백업을 만들 때 암호를 설정한 경우 백업의 암호를 지정합니다. password는 sysname이며 기본값은 NULL입니다.

  • [ @fileidhint= ] fileidhint
    복원할 백업 세트의 서수 값을 식별합니다. fileidhint는 int이며 기본값은 NULL입니다.

  • [ @unload= ] unload
    백업으로 초기화를 완료한 후 테이프 백업 장치를 언로드할지 여부를 지정합니다. unload는 bit이며 기본값은 1입니다. 1은 테이프를 언로드하도록 지정합니다. unload는 backupdevicetype이 tape인 경우에만 사용됩니다.

  • [ @subscriptionlsn= ] subscriptionlsn
    구독에서 피어 투 피어 트랜잭션 복제 토폴로지에 노드 변경 내용을 배달하기 시작할 LSN(로그 시퀀스 번호)을 지정합니다. 모든 관련 트랜잭션이 새 노드에 복제되도록 하려면 initialize from lsn의 @sync_type 값을 함께 사용합니다. 자세한 내용은 방법: 피어 투 피어 트랜잭션 복제 구성(복제 Transact-SQL 프로그래밍)을 참조하십시오.

  • [ @subscriptionstreams = ] subscriptionstreams
    단일 스레드를 사용할 때 나타나는 여러 가지 트랜잭션 특징을 유지하면서 변경 내용의 일괄 처리를 구독자에 대해 병렬로 적용하기 위해 배포 에이전트당 허용된 연결 수입니다. subscriptionstreams는 tinyint이며 기본값은 NULL입니다. 1에서 64 사이의 값 범위가 지원됩니다. 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가 아닌 구독 양쪽 모두에 복제해야 할 경우 각 구독 유형당 하나씩 두 개의 게시를 만들어야 합니다.

-- 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'AdventureWorks2008R2Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
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

사용 권한

sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버만 sp_addsubscription을 실행할 수 있습니다. 끌어오기 구독의 경우 게시 액세스 목록의 로그인이 있는 사용자는 sp_addsubscription을 실행할 수 있습니다.