UPDATE 문은 DELETE/INSERT 쌍으로 복제될 수 있습니다.

이 문서에서는 Update 문이 DELETE/INSERT 쌍으로 복제될 수 있음을 설명합니다.

원래 제품 버전: SQL Server
원본 KB 번호: 238254

요약

고유한 제약 조건의 일부인 열이 업데이트되는 경우 SQL Server 업데이트를 "지연된 업데이트"로 구현합니다. 즉, 이는 작업 쌍 DELETE/INSERT 을 의미합니다. 이 "지연 업데이트"는 복제가 구독자에게 한 쌍의 DELETE/INSERT 문을 보내도록 합니다. 지연된 업데이트를 유발할 수 있는 다른 상황도 있습니다. 따라서 트리거 또는 구독자의 사용자 지정 저장 프로시저에서 UPDATE 구현하는 모든 비즈니스 논리도 트리거 또는 사용자 지정 저장 프로시저에 DELETE/INSERT 포함되어야 합니다.

추가 정보

트랜잭션 복제의 기본 동작은 , UPDATEDELETE 사용자 지정 저장 프로시저를 사용하여 INSERT구독자에서 변경 내용을 적용하는 것입니다.

INSERT 게시자에서 만든 문은 저장 프로시저 호출을 INSERT 통해 구독자에게 적용됩니다. 마찬가지로 DELETE 문은 저장 프로시저 호출을 DELETE 통해 적용됩니다.

그러나 UPDATE 문이 "지연된 업데이트"로 실행되면 logreader 에이전트는 업데이트 저장 프로시저 호출이 아닌 구독자에 적용할 한 쌍의 DELETE/INSERT 저장 프로시저 호출을 배포 데이터베이스에 배치합니다. 예를 들어 다음과 같은 세 개의 열이 있는 라는 게시 테이블 TABLE1이 있다고 가정합니다.

  • col1 int
  • col2 int
  • col3 varchar(30)

에 대한 TABLE1 유일한 고유 제약 조건은 기본 키 제약 조건을 통해 에 col1 정의됩니다. 하나의 레코드(1,1,'Dallas')가 있다고 가정합니다.

이 코드를 실행하는 경우:

UPDATE TABLE1 set col1 = 3 where col3 = 'Dallas'

문은 UPDATE 고유한 인덱스가 정의된 를 업데이트col1하기 때문에 SQL Server 한 쌍의 DELETE/INSERT 문으로 구현됩니다. 따라서 logreader는 배포 데이터베이스에 한 쌍의 DELETE/INSERT 호출을 배치합니다. 이는 구독자의 트리거 또는 사용자 지정 저장 프로시저에 있는 모든 비즈니스 논리에 영향을 미칠 수 있습니다. 이 상황을 처리하려면 및 트리거 또는 저장 프로시저에 DELETEINSERT 추가 비즈니스 논리를 통합해야 합니다.

단일 논리를 사용하려는 경우 모든 UPDATE 명령을 쌍으로 DELETE/INSERT 복제하려는 경우 추적 플래그를 사용하도록 설정할 수 있습니다.

또한 게시에서 가로 필터를 사용하고 업데이트된 행이 필터 조건을 충족하지 않는 경우 프로시저 호출만 DELETE 구독자에게 전송됩니다. 업데이트된 행이 이전에 필터 조건을 충족하지 않았지만 업데이트 후 조건을 충족하는 경우 복제 프로세스를 통해 프로시저 호출만 INSERT 전송됩니다.

앞의 예제에서 에 정의된 가로 필터도 있다고 가정합니다TABLE1where col3 = 'Dallas'. 이 코드를 실행하는 경우:

UPDATE table1 set col3 = 'New York' where col1 = 3

logreader 에이전트는 업데이트된 행이 가로 필터 조건을 충족하지 않으므로 구독자에 적용할 저장 프로시저 호출만 배치 DELETE 합니다.

이제 이 코드를 실행하는 경우:

UPDATE table1 set col3 = 'Dallas' where col1 = 3

행이 이전에 필터 조건을 충족하지 않았기 때문에 logreader는 저장 프로시저 호출만 INSERT 생성합니다.

게시자 UPDATE 에서 작업이 수행되었지만 적절한 명령만 구독자에 적용됩니다.