소스가 삽입 전용 인 경우 IDENTITY
열을 제공하십시오 . 데이터 전송을 수행하면 가장 높은 값을 기록합니다. 다음 전송 중에는 이전 전송 중에 기록 된 값보다 큰 값만 쿼리하면됩니다. 로그 레코드를 데이터웨어 하우스로 전송하기 위해이 작업을 수행합니다.
업데이트 가능한 행의 경우 "더티"플래그를 추가하십시오. 깨끗하고 더러 우며 삭제 된 세 가지 값이 있습니다. 일상적인 쿼리는 플래그가 "삭제됨"으로 설정된 행을 생략해야합니다. 유지 관리, 테스트 및 런타임에 비용이 많이 듭니다. 큰 쿼리 후에 삭제 표시된 모든 행을 제거하고 다른 모든 플래그는 플래그를 재설정해야합니다. 이것은 잘 확장되지 않습니다.
변경 데이터 캡처에 대한 더 가벼운 대안은 변경 추적 입니다. 어떤 값이 변경 되었는지 알려주지 않고 마지막으로 쿼리 된 이후에 행이 변경되었음을 알려줍니다 . 내장 된 기능으로 변경된 값을 검색하고 추적을 관리 할 수 있습니다. CT를 사용하여 100,000,000 개의 행 테이블에서 하루에 약 100,000 건의 변경 사항을 처리했습니다.
쿼리 알림은 결과 집합 수준에서 여전히 높은 레버리지로 작동합니다. 개념적으로 뷰를 정의하는 것과 같습니다. SQL Server는 해당 뷰를 통해 반환 된 행이 변경되었음을 감지하면 응용 프로그램에 메시지를 보냅니다. 변경된 행 수 또는 열이 표시되지 않습니다. "무언가 발생했습니다"라는 간단한 메시지 만 있습니다. 문의하고 반응하는 것은 응용 프로그램에 달려 있습니다. 실제로는 상상할 수 있듯이 그보다 훨씬 복잡합니다. 쿼리를 정의하는 방법에 대한 제한이 있으며 변경된 데이터 이외의 조건에 대해 알림이 발생할 수 있습니다. 알림이 발생하면 제거됩니다. 이후에 관심있는 활동이 더 발생하면 더 이상 메시지가 전송되지 않습니다.
OP의 질문과 관련하여 QN은 설치 비용이 적고 런타임 비용이 적다는 이점이 있습니다. 엄격한 가입 메시지 반응 체제를 확립하고 유지하는 것이 상당한 노력 일 수 있습니다. 데이터 테이블이 크기 때문에 데이터 테이블이 자주 변경 될 가능성이 높으므로 대부분의 처리주기에서 알림이 실행될 수 있습니다. CT 또는 CDC에서와 같이 델타의 증분 처리가 변경된 사항에 대한 표시가 없으므로 불가능합니다. 잘못된 트리거로 인한 오버 헤드는 번거롭지 만 최악의 경우에도 비싼 쿼리를 현재보다 더 자주 실행할 필요는 없습니다.