2012-03-29 2 views
4

주어진 SQL Server 2008 R2 db의 모든 업데이트 이벤트에 대한 이벤트를 생성하는 방법에 대한 모범 사례 또는 예제를 찾고 있습니다. 좀 더 설명하기 위해 필자는 본질적으로 업데이트 이벤트를 다양한 소비자가 소비 할 수있는 큐 (내 케이스의 RabbitMq)에 게시 할 POC에 대해 작업하고 있습니다. 이것은 이벤트 소싱을 통해 CQRS 쿼리 전용 데이터 모델을 구현 한 첫 번째 부분입니다. que에 놓음으로써 아무도 쿼리 전용 데이터 모델로의 복제를 위해 이러한 이벤트에 가입 할 수 있습니다. 이 부분은 명확하고 명확하게 정의되어 있습니다. 내가 겪고있는 문제는 SQL 서버에서 이벤트를 생성하는 최선의 방법을 결정하는 것입니다. 트랜잭션 로그 및 SSIS 모니터링과 같은 몇 가지 아이디어를 받았습니다. 그러나, 나는이 옵션들이 조언받을 수 있는지 또는 실현 가능성이 있는지 완전히 확신하지 못합니다.SQL 서버에서 이벤트 생성

누구나 이런 종류의 일에 경험이 있거나 그러한 모험에 대해 어떤 생각을 가지고 있습니까? 어떤 도움이나지도라도 크게 감사 할 것입니다.

+0

SQL Server에 저장하기 위해 무엇을 사용하고 있습니까? –

답변

9

당신은 당신이 그것을 이해할 수있을 것입니다 심지어 경우 때문에 로그를 모니터링 할 수 없습니다, 당신은 로그의 문제는 당신이 그것을 읽을 수있는 기회가 전에 재활용되고 있습니다. 로그가 잘리지 않는 것으로 표시되지 않으면 재사용됩니다. 예를 들어 트랜잭션 복제를 사용하면 복제 에이전트에서 읽을 때까지 로그가 고정되고 , 만 잘립니다.

SSIS는 매우 광범위한 개념으로 'SSIS를 사용하여 변경 사항을 감지'한다는 것은 '내 문제를 해결하기 위해 프로그래밍 언어를 사용할 것'이라고 말하는 것과 유사합니다. 세부 사항은 입니다. SSIS를 사용 하시겠습니까? SSIS의 유무에 관계없이 임의의 스키마에서 데이터 변경 내용을 안정적으로 검색하는 방법은 없습니다. 변경 감지를 위해 특별히 설계된 데이터 모델조차도 특히 삭제를 감지 할 때 문제가 있습니다.

그러나 가능한 대안이 있습니다. Change Data Capture을 배포하고 엔진 자체에 위임하여 변경 내용을 추적 할 수 있습니다. 감지 된 변경 사항을 소비하고이를 소비자에게 게시하는 경우 (RabbitMQ를 통해 해당되는 경우) 입니다. SSIS가 좋은 점이 있습니다. 그러나 SSIS는 연속적인 실시간 작업에 적합하지 않음을 이해해야합니다. 일괄 적으로 실행되도록 설계되었으므로 SSIS 작업이 실행될 때 지연 시간이 길어져 변경 알림 소비자에게 스파이크가 통보됩니다.

실시간 접근 방법의 경우 더 좋은 해결책은 Service Broker입니다. 한 가지 가능성은 SEND 트리거의 Service Broker 메시지이지만 권장하지는 않습니다. 더 나은 디자인은 응용 프로그램 자체가 데이터 수정을 할 때 메시지를 명시 적으로 SEND- 게시하는 것입니다. SQL Server 2012는 다른 SQL Server 소비자 (SQL Server Express 포함)에 multicast Service Broker messages까지 가능합니다. SSB 메시지 전달은 완전히 트랜잭션입니다 (트랜잭션이 롤백되면 메시지가 전송되지 않음). 메시지 저장소 자원 관리자와의 2 단계 커밋이 필요 없습니다. 그러나 RabbitMQ를 통해 방송하려면 통신을 연결해야합니다. RECEIVE SSB 메시지를 수신 한 다음 RabbitMQ 알림으로 변환합니다.

+0

완벽! 정확히 내가 무엇을 찾고 있었는지. 더 많은 실시간 데이터가 필요하므로 SSIS가 나를위한 솔루션이라고 생각하지 않습니다. (100 % 실시간이 아니라 가까운). 응용 프로그램을 변경하여 게시하는 것이 이상적입니다. 그러나 현재 우리는 다양한 언어와 다양한 지원 수준에서 다양한 진입 점을 가지고 있습니다. 이 모든 것을 변경하는 것은 너무 번거로운 것으로 간주 될 수 있습니다. 변경 데이터 캡처를 먼저 조사 할 것입니다. 이는 내가 찾고있는 것과 가장 밀접하게 맞는 것 같습니다. 고맙습니다! – RockyMountainHigh