다음을 통해 공유


트랜잭션 게시에 업데이트할 수 있는 구독 만들기

적용 대상: SQL Server

참고 항목

이 기능은 2012부터 2016까지의 SQL Server 버전에서 계속 지원됩니다. SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.

트랜잭션 복제에서는 즉시 업데이트 구독 또는 지연 업데이트 구독을 사용하여 구독자에서 변경된 내용을 게시자에 다시 전파할 수 있습니다. 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 업데이트 구독을 만들 수 있습니다.

새 구독 마법사업데이트 할 수 있는 구독 페이지에서 업데이트할 수 있는 구독을 구성합니다. 이 페이지는 업데이트할 수 있는 구독에 대해 트랜잭션 게시를 사용하도록 설정한 경우에만 사용할 수 있습니다. 업데이트할 수 있는 구독을 사용하도록 설정하는 방법에 대한 자세한 내용은 트랜잭션 게시에 대해 업데이트할 수 있는 구독 설정을 참조하세요.

게시자에서 업데이트할 수 있는 구독 구성

  1. Microsft SQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.

  3. 업데이트 구독에 사용할 수 있는 트랜잭션 게시를 마우스 오른쪽 단추로 클릭한 다음 새 구독을 클릭합니다.

  4. 마법사 페이지에 따라 배포 에이전트에서 실행해야 하는 위치와 같은 구독에 대한 옵션을 지정합니다.

  5. 새 구독 마법사업데이트할 수 있는 구독 페이지에서 복제가 선택되었는지 확인합니다.

  6. 게시자에서 커밋 드롭다운 목록에서 옵션을 선택합니다.

    • 즉시 업데이트 구독을 사용하려면 변경 내용을 동시에 커밋을 선택합니다. 이 옵션을 선택하고 게시에서 지연 업데이트 구독을 허용한 경우(새 게시 마법사로 만든 게시의 기본 설정), 구독 속성 update_modefailover로 설정됩니다. 이 모드를 사용하면 필요한 경우 나중에 지연 업데이트로 전환할 수 있습니다.

    • 지연 업데이트 구독을 사용하려면 큐 변경 내용 및 가능하면 커밋을 선택합니다. 이 옵션을 선택하고 게시에서 즉시 업데이트 구독을 허용하며(새 게시 마법사로 만든 게시의 기본 설정) 구독자에서 SQL Server 2005 이상 버전이 실행될 경우 구독 속성 update_mode가 queued failover로 설정됩니다. 이 모드를 사용하면 필요한 경우 나중에 즉시 업데이트로 전환할 수 있습니다.

    업데이트 모드 전환에 대한 자세한 내용은 업데이트할 수 있는 트랜잭션 구독에 대한 업데이트 모드 간 전환을 참조하세요.

  7. 즉시 업데이트를 사용하거나 update_modequeued failover로 설정된 구독에 대해 업데이트할 수 있는 구독에 대한 로그인 페이지가 표시됩니다. 업데이트할 수 있는 구독에 로그인 페이지에서 즉시 업데이트 구독을 위해 만든 게시자에 연결하는 연결된 서버를 지정합니다. 연결은 구독자에서 실행되고 변경 내용을 게시자에 전파하는 트리거에서 사용됩니다. 다음 옵션 중 하나를 선택합니다.

    • SQL Server 인증을 사용하여 연결하는 연결된 서버를 만듭니다. 구독자와 게시자 간에 원격 서버 또는 연결된 서버를 정의하지 않은 경우 이 옵션을 선택하세요. 복제는 연결된 서버를 만듭니다. 지정한 계정이 게시자에 이미 있어야 합니다.

    • 이미 정의한 연결된 서버 또는 원격 서버를 사용합니다. sp_addserver(Transact-SQL), sp_addlinkedserver(Transact-SQL), SQL Server Management Studio 또는 다른 방법을 사용하여 구독자와 게시자 간에 원격 서버 또는 연결된 서버를 정의한 경우 이 옵션을 선택합니다.

    연결된 서버 계정에 필요한 사용 권한에 대한 자세한 내용은 여기에 링크 설명 입력지연 업데이트 구독을 참조하세요.

  8. 마법사를 완료합니다.

구독자에서 업데이트할 수 있는 구독 구성

  1. SQL Server Management Studio에서 구독자에 연결한 다음 해당 서버 노드를 확장합니다.

  2. 복제 폴더를 확장합니다.

  3. 로컬 구독 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 구독을 클릭합니다.

  4. 새 구독 마법사게시 페이지에서 게시자 드롭다운 목록에서 SQL Server 게시자 찾기를 선택합니다.

  5. 서버에 연결 대화 상자에서 게시자에 연결합니다.

  6. 게시 페이지에서 업데이트 구독을 사용할 수 있도록 설정된 트랜잭션 게시를 선택합니다.

  7. 마법사 페이지에 따라 배포 에이전트에서 실행해야 하는 위치와 같은 구독에 대한 옵션을 지정합니다.

  8. 새 구독 마법사의 업데이트할 수 있는 구독 페이지에서 복제가 선택되었는지 확인합니다.

  9. 게시자에서 커밋 드롭다운 목록에서 옵션을 선택합니다.

    • 즉시 업데이트 구독을 사용하려면 변경 내용을 동시에 커밋을 선택합니다. 이 옵션을 선택하고 게시에서 지연 업데이트 구독을 허용한 경우(새 게시 마법사로 만든 게시의 기본 설정), 구독 속성 update_modefailover로 설정됩니다. 이 모드를 사용하면 필요한 경우 나중에 지연 업데이트로 전환할 수 있습니다.

    • 지연 업데이트 구독을 사용하려면 큐 변경 내용 및 가능하면 커밋을 선택합니다. 이 옵션을 선택하고 게시에서 즉시 업데이트 구독을 허용하며(새 게시 마법사로 만든 게시의 기본 설정) 구독자에서 SQL Server 2005 이상 버전이 실행될 경우 구독 속성 update_mode가 queued failover로 설정됩니다. 이 모드를 사용하면 필요한 경우 나중에 즉시 업데이트로 전환할 수 있습니다.

    업데이트 모드 전환에 대한 자세한 내용은 업데이트할 수 있는 트랜잭션 구독에 대한 업데이트 모드 간 전환을 참조하세요.

  10. 즉시 업데이트를 사용하거나 update_modequeued failover로 설정된 구독에 대해 업데이트할 수 있는 구독에 대한 로그인 페이지가 표시됩니다. 업데이트할 수 있는 구독에 로그인 페이지에서 즉시 업데이트 구독을 위해 만든 게시자에 연결하는 연결된 서버를 지정합니다. 연결은 구독자에서 실행되고 변경 내용을 게시자에 전파하는 트리거에서 사용됩니다. 다음 옵션 중 하나를 선택합니다.

    • SQL Server 인증을 사용하여 연결하는 연결된 서버를 만듭니다. 구독자와 게시자 간에 원격 서버 또는 연결된 서버를 정의하지 않은 경우 이 옵션을 선택하세요. 복제는 연결된 서버를 만듭니다. 지정한 계정이 게시자에 이미 있어야 합니다.

    • 이미 정의한 연결된 서버 또는 원격 서버를 사용합니다. sp_addserver(Transact-SQL), sp_addlinkedserver(Transact-SQL), SQL Server Management Studio 또는 다른 방법을 사용하여 구독자와 게시자 간에 원격 서버 또는 연결된 서버를 정의한 경우 이 옵션을 선택합니다.

    연결된 서버 계정에 필요한 사용 권한에 대한 자세한 내용은 여기에 링크 설명 입력지연 업데이트 구독을 참조하세요.

  11. 마법사를 완료합니다.

즉시 업데이트 끌어오기 구독 만들기

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_sync_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
    • 결과 집합의 allow_sync_tran 값이 0이면 즉시 업데이트 구독을 사용하도록 설정한 게시를 다시 만들어야 합니다.
  2. 게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.
    • allow_pull 값이 0이면 sp_changepublication을 실행하여 allow_pull 에 대해 @property 을, true 에 대해 @value를 지정합니다.
  3. 구독자에서 sp_addpullsubscription을 실행합니다. @publisher@publication를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.

    • sync tran - 구독에서 즉시 업데이트를 사용하도록 설정합니다.
    • failover - 즉시 업데이트 구독을 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다.

    참고 항목

    failover를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.

  4. 구독자에서 sp_addpullsubscription_agent을 실행합니다. 다음 사항을 지정합니다.

    • 구독자에서 배포 에이전트가 실행되는 @publisher또는 RMO(복제 관리 개체)를 사용하여 @publisher_db@publication 매개 변수
    • @job_login@job_password에 대해 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명입니다.

    참고 항목

    Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정된 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.

    • (선택 사항) 0 에 대한 @distributor_security_mode 값과, @distributor_login@distributor_password에 대한 Microsoft SQL Server 로그인 정보(배포자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).
    • 이 구독의 배포 에이전트 작업 일정입니다.
  5. 구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다. @publisher, @publication, @publisher_db에 대한 게시 데이터베이스 이름을 지정하고 @security_mode에 다음 값 중 하나를 지정합니다.

    • 0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다. 이 옵션을 사용하려면 @login@password에 게시자에서 유효한 로그인을 지정해야 합니다.
    • 1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다. 이 보안 모드와 관련된 제한 사항은 sp_link_publication을 참조하세요.
    • 2sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.
  6. 게시자에서 sp_addsubscription을 실행하여 당겨받기 값 @publication. @subscriber, @destination_db@subscription_type에 지정하고 3단계에서 지정한 값과 동일한 값을 @update_mode에 지정합니다. 이를 통해 게시자에서 끌어오기 구독을 등록합니다.

즉시 업데이트 밀어넣기 구독 만들기

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_sync_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
    • 결과 집합의 allow_sync_tran 값이 0이면 즉시 업데이트 구독을 사용하도록 설정한 게시를 다시 만들어야 합니다.
  2. 게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.
    • allow_push 값이 0이면 sp_changepublication을 실행하여 allow_push 에 대해 @property 을, true 에 대해 @value를 지정합니다.
  3. 게시자에서 sp_addsubscription을 실행합니다. @publication, @subscriber, @destination_db 및 다음 값 중 하나를 @update_mode에 지정합니다.

    • sync tran - 즉시 업데이트 지원을 설정합니다.
    • failover - 즉시 업데이트 지원을 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다.

    참고 항목

    failover를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.

  4. 게시자에서 sp_addpushsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.

    • @subscriber, @subscriber_db@publication.

    • @job_login@job_password에 대해 배포자에서 배포 에이전트가 실행되는 Windows 자격 증명

    참고 항목

    Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정된 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.

    • (선택 사항) 0 에 대한 @subscriber_security_mode 값과, @subscriber_login@subscriber_password에 대한 SQL Server 로그인 정보(구독자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).
    • 이 구독의 배포 에이전트 작업 일정입니다.
  5. 구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다. @publisher, @publication, @publisher_db에 대한 게시 데이터베이스 이름을 지정하고 @security_mode에 다음 값 중 하나를 지정합니다.

    • 0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다. 이 옵션을 사용하려면 @login@password에 게시자에서 유효한 로그인을 지정해야 합니다.
    • 1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다. 이 보안 모드와 관련된 제한 사항은 sp_link_publication을 참조하세요.
    • 2sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.

지연 업데이트 끌어오기 구독 만들기

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_queued_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
    • 결과 집합의 allow_queued_tran 값이 0이면 지연 업데이트 구독을 사용하도록 설정한 게시를 다시 만들어야 합니다.
  2. 게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.
    • allow_pull 값이 0이면 sp_changepublication을 실행하여 allow_pull 에 대해 @property 을, true 에 대해 @value를 지정합니다.
  3. 구독자에서 sp_addpullsubscription을 실행합니다. @publisher@publication를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.

    • queued tran - 지연 업데이트 구독을 설정합니다.
    • queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.

    참고 항목

    queued failover를 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다. 즉시 업데이트로 장애 조치하려면 sp_link_publication을 사용하여 구독자의 변경 내용이 게시자에 복제되는 자격 증명을 정의해야 합니다.

  4. 구독자에서 sp_addpullsubscription_agent을 실행합니다. 다음 매개 변수를 지정합니다.

    • @publisher, @publisher_db@publication.
    • @job_login@job_password에 대해 구독자에서 배포 에이전트가 실행되는 Windows 자격 증명입니다.

    참고 항목

    Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정된 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.

    • (선택 사항) 0 에 대한 @distributor_security_mode 값과, @distributor_login@distributor_password에 대한 SQL Server 로그인 정보(배포자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).
    • 이 구독의 배포 에이전트 작업 일정입니다.
  5. 게시자에서 , , @publication를 지정하고 @subscriber에 대한 가져오기 값, @destination_db에 대해 3단계에서 지정한 동일한 값을 지정하여 @subscription_typesp_addsubscription @update_mode을 실행하고 게시자에서 구독자를 등록합니다. 이를 통해 게시자에서 끌어오기 구독을 등록합니다.

지연 업데이트 밀어넣기 구독 만들기

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_queued_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
    • 결과 집합의 allow_queued_tran 값이 0이면 지연 업데이트 구독을 사용하도록 설정한 게시를 다시 만들어야 합니다. 자세한 내용은 트랜잭션 게시에 대해 업데이트 구독을 사용하도록 설정하는 방법을 참조하세요(복제 Transact-SQL 프로그래밍).
  2. 게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.
    • allow_push 값이 0이면 sp_changepublication을 실행하여 @property에 allow_push를 지정하고 true 값을 @value에 지정합니다.
  3. 게시자에서 sp_addsubscription을 실행합니다. @publication, @subscriber, @destination_db 및 다음 값 중 하나를 @update_mode에 지정합니다.

    • queued tran - 지연 업데이트 구독을 설정합니다.
    • queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.

    참고 항목

    queued failover 옵션을 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다. 즉시 업데이트로 장애 조치하려면 sp_link_publication을 사용하여 구독자의 변경 내용이 게시자에 복제되는 자격 증명을 정의해야 합니다.

  4. 게시자에서 sp_addpushsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.

    • @subscriber, @subscriber_db@publication.
    • @job_login@job_password에 대해 배포자에서 배포 에이전트가 실행되는 Windows 자격 증명

    참고 항목

    Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정된 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.

    • (선택 사항) 0 에 대한 @subscriber_security_mode 값과, @subscriber_login@subscriber_password에 대한 SQL Server 로그인 정보(구독자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).
    • 이 구독의 배포 에이전트 작업 일정입니다.

지연 업데이트 충돌 해결 옵션 설정

게시 속성 - <게시> 대화 상자의 구독 옵션 페이지에서 지연 업데이트 구독을 지원하는 게시에 충돌 해결 옵션을 설정합니다. 이 대화 상자에 액세스하는 방법은 게시 속성 보기 및 수정을 참조하세요.

  1. 게시 속성 - <게시> 대화 상자의 구독 옵션 페이지에서 충돌 해결 정책 옵션에 대해 다음 값 중 하나를 선택합니다.

    • 게시자 변경 내용 유지
    • 구독자 변경 내용 유지
    • 구독 다시 초기화

예시

이 예에서는 즉시 업데이트 구독을 지원하는 게시에 대해 즉시 업데이트 끌어오기 구독을 만듭니다. 로그인 및 암호 값은 sqlcmd 스크립팅 변수를 사용하여 런타임에 제공됩니다.

참고 항목

이 스크립트는 sqlcmd 스크립팅 변수를 사용합니다. 이는 $(MyVariable) 형식입니다. 명령줄 및 SQL Server Management Studio에서 스크립팅 변수를 사용하는 방법에 대한 자세한 내용은 복제 시스템 저장 프로시저 개념 항목의 복제 스크립트 실행 섹션을 참조하세요.

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS NVARCHAR(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2022';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription
    @publisher = @publisher,
    @publication = @publication,
    @publisher_db = @publicationDB,
    @update_mode = N'failover',
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent
    @publisher = @publisher,
    @publisher_db = @publicationDB,
    @publication = @publication,
    @job_login = @login,
    @job_password = @password;

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication
    @publisher = @publisher,
    @publication = @publication,
    @publisher_db = @publicationDB,
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2022;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriptionDB = N'AdventureWorks2022Replica';
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE AdventureWorks2022;
EXEC sp_addsubscription
    @publication = @publication,
    @subscriber = @subscriber,
    @destination_db = @subscriptionDB,
    @subscription_type = N'pull',
    @update_mode = N'failover';
GO