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

적용 대상:SQL Server

참고 항목

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

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

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

게시자에서 복구할 수 있는 구독 구성

  1. Microsoft SQL Server Management Studio의 게시자에 커넥트 서버 노드를 확장합니다.

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

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

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

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

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

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

    • 지연 업데이트 구독을 사용하려면 큐 변경 내용을 선택하고 가능하면 커밋합니다. 이 옵션을 선택하고 게시에서 즉시 업데이트 구독을 허용하며(새 게시 마법사로 만든 게시의 기본 설정) 구독자에서 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. 새 구독 마법사의 Updatable 구독 페이지에서 복제가 선택되어 있는지 확인합니다.

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

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

    • 지연 업데이트 구독을 사용하려면 큐 변경 내용을 선택하고 가능하면 커밋합니다. 이 옵션을 선택하고 게시에서 즉시 업데이트 구독(새 게시 마법사로 만든 게시의 기본값)을 허용하고 구독자가 SQL Server 2005 이상 버전을 실행하는 경우 구독 속성 update_mode 대기 중인 장애 조치(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) 옵션으로 즉시 업데이트할 수 있도록 합니다.

    참고 항목

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

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

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

    참고 항목

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

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

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

즉시 업데이트 푸시 구독 만들기

  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 실행합니다. 에 대해 , @subscriber@destination_db다음 값 중 하나를 지정@publication합니다@update_mode.

    • sync tran - 즉시 업데이트 지원을 설정합니다.
    • failover - 지연 업데이트를 장애 조치(failover) 옵션으로 즉시 업데이트할 수 있도록 지원합니다.

    참고 항목

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

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

    • @subscriber, @subscriber_db@publication.

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

    참고 항목

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

    • (선택 사항) 구독자에 연결할 때 SQL Server 인증을 사용해야 하는 경우의 값 0@subscriber_security_mode@subscriber_passwordSQL Server 로그인 정보 @subscriber_login 입니다.
    • 이 구독의 배포 에이전트 작업에 대한 일정입니다.
  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 - 즉시 업데이트를 장애 조치(failover) 옵션으로 사용하여 지연 업데이트를 지원할 수 있습니다.

    참고 항목

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

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

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

    참고 항목

    Windows 통합 인증을 사용하여 만든 커넥트 항상 지정된 @job_login Windows 자격 증명을 사용하여 만들어집니다@job_password. 배포 에이전트 항상 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 이면 0sp_changepublication 실행하고 allow_push @propertytrue@value지정합니다.
  3. 게시자에서 sp_addsubscription 실행합니다. 에 대해 , @subscriber@destination_db다음 값 중 하나를 지정@publication합니다@update_mode.

    • queued tran - 지연 업데이트 구독을 설정합니다.
    • queued failover - 즉시 업데이트를 장애 조치(failover) 옵션으로 사용하여 지연 업데이트를 지원할 수 있습니다.

    참고 항목

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

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

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

    참고 항목

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

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

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

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

  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

참고 항목

트랜잭션 복제에 대한 업다이블 구독
게시 만들기
스크립팅 변수와 함께 sqlcmd 사용