업데이트할 수 있는 구독 작업 방법

트랜잭션 복제에 대해 업데이트할 수 있는 구독을 사용하면 구독자에서 변경 내용을 게시자로 복제할 수 있습니다. 구독 데이터베이스의 게시된 테이블에 트리거가 추가되고 구독자에서 변경 작업이 수행되면 트리거가 발생됩니다.

  • 즉시 업데이트 구독의 경우 MSDTC(Microsoft Distributed Transaction Coordinator)를 사용하여 변경 내용을 게시자에 바로 전파하고 적용합니다.

  • 지연 업데이트 구독의 경우 변경 내용을 우선 큐에 전파한 다음 큐 판독기 에이전트를 사용하여 게시자에 적용합니다.

게시자에서 변경된 내용은 읽기 전용 구독자가 있는 트랜잭션 게시와 같은 방식으로 구독자에 복제됩니다. 자세한 내용은 트랜잭션 복제 작동 방법을 참조하십시오.

즉시 업데이트

즉시 업데이트 구독에서는 다음 구성 요소를 사용합니다.

  • 게시된 각 테이블에 대한 추적 열

    업데이트할 수 있는 구독을 허용하는 게시에 테이블을 게시하면 해당 테이블에 msrepl_tran_version 열이 추가됩니다. 이 열은 변경 추적 및 충돌 감지에 사용됩니다. 구독자에서 데이터의 오래된 복사본을 업데이트하면 즉시 업데이트에 충돌이 발생합니다.

  • MSDTC

    MSDTC에서는 구독자에서 변경된 각각의 변경 내용에 대해 변경 내용을 커밋하는 게시자와 구독자 사이의 2단계 커밋 작업을 관리합니다. 이 방법은 게시자만 사용할 수 있으면 사용 가능하므로 참가하는 모든 사이트에 2단계 커밋을 사용할 수 있습니다. 게시자에서 2단계 커밋을 사용하여 변경 작업을 수행하면 배포 에이전트에서는 이 변경 내용을 다른 구독자로 복제합니다.

  • 구독 데이터베이스의 테이블에 대한 트리거

    구독 데이터베이스의 게시된 각 테이블에 삽입, 업데이트 및 삭제 트리거가 추가됩니다. 이러한 트리거는 배포 에이전트에서 적용한 변경으로 인해 트리거가 발생되지 않도록 하기 위해 CREATE TRIGGER 문의 NOT FOR REPLICATION 한정자를 사용하여 생성됩니다. 자세한 내용은 NOT FOR REPLICATION으로 제약 조건, ID 및 트리거 제어를 참조하십시오.

    즉시 업데이트 구독의 경우 구독자의 identitytimestamp 열 값도 트리거에서 관리합니다. 이러한 유형의 열에 대한 값이 게시자에 생성되고 생성된 값은 2단계 커밋 작업의 일부로 구독자에 전파됩니다.

  • 저장 프로시저

    게시를 만들어 즉시 업데이트 구독에 사용하도록 설정하면 게시 데이터베이스의 게시된 각 테이블에 대해 삽입, 업데이트 및 삭제 프로시저가 생성됩니다. 구독자에서 변경이 발생하면 복제 트리거에서는 MSDTC를 통해 게시자의 해당 저장 프로시저에 원격 프로시저 호출을 실행하여 변경 내용을 적용합니다.

    게시자의 저장 프로시저에서는 변경 내용이 구독자가 변경된 행의 복사본을 마지막으로 받은 후 게시자에서 변경된 내용과 충돌하지 않는 경우에만 해당 변경 내용을 적용합니다. 충돌이 감지되면 트랜잭션은 거부되어 게시자와 구독자에서 롤백됩니다.

다음 그림에서는 즉시 업데이트 구독이 포함된 토폴로지에서 사용되는 주요 구성 요소를 보여 줍니다.

즉시 업데이트 구성 요소 및 데이터 흐름

  1. 구독자에서 변경된 내용은 구독 테이블의 트리거에서 캡처합니다.

  2. 트리거에서는 MSDTC를 통해 게시자에서 해당 저장 프로시저를 호출합니다.

  3. 충돌이 발생하지 않으면 저장 프로시저에서는 삽입, 업데이트 또는 삭제를 수행합니다. 충돌이 발생하면 게시자와 구독자에서 변경 내용이 롤백됩니다.

  4. 구독자에서 복제된 변경으로 인해 게시자에서 수행된 변경 내용은 배포 에이전트 일정에 따라 다른 모든 구독자로 전파됩니다.

지연 업데이트

지연 업데이트 구독에서는 다음 구성 요소를 사용합니다.

  • 게시된 각 테이블에 대한 추적 열

    업데이트할 수 있는 구독을 허용하는 게시에 테이블을 게시하면 해당 테이블에 msrepl_tran_version 열이 추가됩니다. 이 열은 변경 추적 및 충돌 감지에 사용됩니다.

  • 구독 데이터베이스의 테이블에 대한 트리거

    구독 데이터베이스의 게시된 각 테이블에 삽입, 업데이트 및 삭제 트리거가 추가됩니다. 이러한 트리거는 배포 에이전트에서 적용한 변경으로 인해 트리거가 발생되지 않도록 하기 위해 CREATE TRIGGER 문의 NOT FOR REPLICATION 한정자를 사용하여 생성됩니다. 자세한 내용은 NOT FOR REPLICATION으로 제약 조건, ID 및 트리거 제어를 참조하십시오.

  • 저장 프로시저

    게시를 만들어서 지연 업데이트 구독에 사용하도록 설정하면 게시 데이터베이스의 게시된 각 테이블에 대해 삽입, 업데이트 및 삭제 프로시저가 생성됩니다.

    큐 판독기 에이전트에서는 저장 프로시저를 호출하여 게시자의 트랜잭션에 적용하고 충돌을 감지하며 필요한 경우 배포 데이터베이스에 게시된 후 구독자에 배달되는 보상 명령을 생성합니다.

    게시자에 충돌 정보를 기록하고 필요한 경우 충돌 정보를 관련 구독자에게 보내는 저장 프로시저가 게시자에도 생성됩니다. 충돌이 감지되면 큐 판독기 에이전트에서 이 프로시저를 호출합니다.

  • Microsoft SQL Server 큐

    각 구독 데이터베이스에는 구독자의 변경 내용을 저장하는 시스템 테이블 MSreplication_queue가 들어 있습니다.

  • SQL Server 큐 판독기 에이전트

    큐 판독기 에이전트에서는 MSreplication_queue의 변경 내용을 읽고 게시자에 적용합니다. 자세한 내용은 복제 큐 판독기 에이전트를 참조하십시오.

다음 그림에서는 지연 업데이트 구독을 포함하는 토폴로지에서 사용되는 주요 구성 요소를 보여 줍니다.

지연 업데이트 구성 요소 및 데이터 흐름

  1. 구독자에서 수행된 업데이트 내용은 구독 테이블의 트리거에서 캡처합니다. 트리거에서는 이러한 업데이트 내용을 MSreplication_queue에 저장합니다.

  2. 큐 판독기 에이전트에서는 MSreplication_queue의 업데이트 내용을 읽은 다음 복제 저장 프로시저를 사용하여 지연된 트랜잭션을 해당 게시에 적용합니다.

  3. 지연된 트랜잭션을 적용하는 동안 충돌이 감지되면 게시 생성 시 설정한 충돌 해결 정책에 따라 충돌을 해결합니다. 그 결과 표준 트랜잭션 복제 배포 프로세스를 사용하여 트랜잭션을 구독자로 롤백하기 위한 보상 명령이 생성될 수 있습니다. 보상 명령은 충돌을 일으킨 구독자만 받습니다. 자세한 내용은 지연 업데이트 충돌 감지 및 해결을 참조하십시오.

  4. 구독자에서 복제된 변경으로 인해 게시자에서 수행된 변경 내용은 배포 에이전트 일정에 따라 다른 모든 구독자로 전파됩니다.