CDC를 사용하여 기록을 추적하는시기


26

SQL Server 변경 데이터 캡처는 SQL Server 트랜잭션 로그에서 기록 데이터를 읽고 특수 테이블에 저장하는 기능입니다.

TVF (특수 테이블 값 함수)를 사용하면 사용자가이 데이터를 쿼리 할 수 ​​있으므로 특정 테이블의 모든 변경 사항을 가져 오거나 특정 시간 내에 변경으로 인해 발생한 순 변경 사항 만 가져올 수 있습니다.

CDC에는 특정 장점이 있습니다

  • 특정 테이블이나 열만 추적하도록 구성 할 수 있습니다.
  • 모델 변경을 어느 정도 처리 할 수 ​​있습니다.
  • 트랜잭션 로그와 작동하므로 트리거만큼 성능에 영향을 미치지 않습니다.
  • 쉽게 활성화 / 비활성화되며 추적해야 할 테이블에 추가 열이 필요하지 않습니다.

또한 몇 가지 단점이 있습니다.

나는 CDC에 대해 꽤 많이 읽었으며 지금 그것을 사용하는 방법을 알고 있지만 그것이 그것이 나에게 적합한 도구인지 확실하지 않습니다.

  1. CDC가 어떤 작업 / 시나리오에 적합한 도구입니까? (예 : 사용자가 특정 시점으로 데이터 오브젝트를 복원하도록 허용? 감사? 전체 데이터 히스토리 표시?)
  2. 언제 CDC를 사용하지 말고 맞춤형 트리거 기반 솔루션을 사용해야합니까?
  3. 운영 데이터베이스에서 CDC를 사용하고 운영 응용 프로그램 내에서 CDC 데이터를 사용해도됩니까? (예 : 최종 사용자에게 표시) 아니면이 기능을 잘못 사용 했습니까?

CDC가 감사 도구라고 들었지만 SQL Server Audit의 용도는 아닙니다 . 그들은 같은 작업을 위해 서로 다른 도구입니까? 아니면 다른 것들에 CDC를 사용할 수 있습니까?

현재 시나리오는 여러 미래의 응용 프로그램의 기초가 될 신뢰할 수있는 데이터 프레임 워크를 작성하라는 요청입니다. 정확한 요구 사항은 모호하지만 데이터 히스토리를 추적하고 다른 테이블의 모든 관련 데이터와 함께 이전 항목을 복원 할 수 있어야합니다. 현재 CDC를 옵션으로 평가하고 있지만 권장되는 사용 사례를 찾을 수 없기 때문에 이것이 올바른 방법인지 확실하지 않습니다.

특정 시나리오에 대한 조언을 고맙게 생각하지만 Change Data Capture를 언제 또는 사용하지 않을 것인지에 대한 일반적인 조언을 제공해야합니다.


1
이상적으로 "프레임 워크"는 이런 종류의 결정을 내리지 않습니다. 개별 프로젝트에 맡겨 질 것입니다. 그러나이 작업을 수행하라는 요청을 받으므로 최소한 요구 사항을 제공하는 사람에게이 점을 알려야합니다.이를 수행하는 방법에는 여러 가지가 있으며 최선의 선택은 정확한 사용법과 요구에 크게 좌우됩니다. 결정에 도움이 될만한 설명을 제공 할 수 있는지 물어보십시오 (성능 또는 유연성이 더 중요한지 여부). 고려해야 할 또 다른 옵션은 "프레임 워크"의 일부로 두 옵션을 모두 개발하고 실제 프로젝트에서 사용할 옵션을 선택하도록하는 것입니다.
jpmc26

@ jpmc26에서 프레임 워크는 이러한 종류의 질문을 결정하는 데 각 프로젝트 지출 시간을 중지하는 데 필요할 수 있습니다.
Ian Ringrose

@IanRingrose 필자의 요점은 프로젝트의 특정 요구를 고려하지 않고 결정을 내리는 것이 장기적으로 해결하는 것보다 더 많은 문제를 야기 할 것이므로 실제로 그 시간을 소비하는 것보다 비용이 많이 든다는 것입니다. 일반적인 경우에는 효과적으로 결정할 수없는 결정입니다 . 프로젝트의 구체적인 내용이 있어야합니다 고려. 포괄적 인 결정을 사용하면 선택한 솔루션을 사용하고 적절한 솔루션이 아니라는 사실을 발견했을 때만 가정에 대한 가정을하는 데 시간이 소요됩니다. 그런 다음 시스템을 재 설계해야합니다.
jpmc26

1
@ jpmc26 실제로 제안한 솔루션을 사용하는 것이 좋습니다. 트리거 방식과 CDC 기반 기록 추적, 모두 전환 가능 및 공통 인터페이스 뒤에서 개발. 그런 다음 응용 프로그램은 요구 사항에 따라 둘 중 하나를 선택할 수 있지만 구현 자체에 대해 걱정할 필요는 없습니다. 물론 CDC가 이런 종류의 작업을 위해 잘리지 않으면 (예 : 감사에만 도움이되기 때문에) CDC가 잘리지 않으면 문제를 해결하고 항상 트리거를 사용할 수 있기 때문에 위의 질문에 여전히 좋은 대답을 얻고 싶습니다. .
magnattic

"에이전트가 실행 중이 아니거나 충돌하는 경우 기록이 추적되지 않습니다."-에이전트가 다시 시작되면 변경 내용이 손실되지 않습니다.
Andy Joiner

답변:


12

먼저

변경 데이터 캡처는 Enterprise, Developer 및 Evaluation Edition의 SQL Server에서만 사용할 수 있습니다.

따라서 고객 중 하나에 엔터프라이즈 버전이 없거나 엔터프라이즈 버전을 사용할지 여부를 아직 알지 못할 수 있습니다. (사양에 "복수의 미래 응용 프로그램"이 포함되어 있으므로 이는 실제 문제 일 수 있습니다)

트리거와 달리 실시간이 아니기 때문에 장점이자 단점입니다. 트리거를 사용하면 항상 업데이트 속도가 느려집니다.

CodeSmith에서 생성 한 트리거를 사용하고 레코드의 모든 변경 사항을 추적 할 때 하나의 시스템에서 작업했으며 변경 사항을 적용한 응용 프로그램의 모듈이 포함 된 "기록"테이블에 변경 사항을 연결했습니다. 사용자가 변경하는 데 사용한 UI 항목

그러나 응용 프로그램 수준에서이 문제를 해결하는 것이 가장 좋습니다. 메시지 큐에 모든 업데이트를 작성한 다음 특정 시점에 데이터베이스를 만들기 위해 재생됩니다 . 옵션에 대한 개요는 Martin Flowler 블로그의 임시 패턴을 참조하십시오 .


이 링크는 매우 흥미로운 읽기입니다. 여전히 응용 프로그램 수준 에서이 문제를 해결하는 것은 옵션이 아닙니다. 내가 만들고있는 프레임 워크는 기록 추적을 포함하여 응용 프로그램에 대한 대부분의 작업을 수행해야합니다. 그런 다음 애플리케이션은 공통 인터페이스를 사용하여 데이터를 저장 / 검색하므로 데이터 저장 방법에 신경 쓸 필요가 없습니다. 이 작업이 사소한 것이 아니라는 것을 알고 있습니다.
magnattic

또한 현재 Enterprise Edition을 고려하지 않거나 우리의 경우 결정적인 요소가 아닙니다. 내가 이야기하고있는 미래의 응용 프로그램은 모두 우리가 구축하고 호스팅 할 가능성이 높습니다.
magnattic

@atticae, 프레임 워크는 데이터베이스로 제한 될 필요는 없으며 데이터베이스 외부에서 실행되는 코드를 포함 할 수 있습니다.
Ian Ringrose

물론 데이터베이스에만 국한되지는 않습니다. (이 경우에는 이것을 프레임 워크라고 부르지 않을 것입니다.) "응용 프로그램 수준"이 의미하는 바를보고 있으며 현재 링크에서 말하는 임시 속성 패턴의 변형을 사용하고 있습니다. 내가 구축 한 프레임 워크는이 인터페이스를 사용하는 애플리케이션에이 인터페이스를 제공합니다. 아직도, 그것은 인터페이스 측면의 일부이며, 이것의 아무것도 위에서 설명한 내 질문에 실제로 대답하지 않습니다.
magnattic

귀하의 답변에 다시 한번 감사드립니다. 이것은 아마도 대부분의 사람들에게 결정적인 요인이므로, 이것이 좋은 대답이라고 생각하며 향후 방문자가 CDC를 사용하지 않기로 결정하는 데 도움이 될 것입니다. 그러나 나는 그것이 대부분의 질문에 실제로 답하지는 않는다고 생각하므로, 내가 가진 모든 질문에 대답하려는 유일한 사람인 stacylaray에게 현상금을 제공해야합니다. (나는 좀 더 정교하게 대답하기를
바랐지만

12

다음은 SQL Server 데이터 변경 사항을 감사하는 다양한 방법을 검토하는 잘 작성된 9 부 시리즈입니다. 파트 3, 4 및 5는 CDC에 중점을 둡니다. 기능이 적절하고 오버 헤드가되는 다양한 시나리오와 같은 질문에 대답하기 때문에 모든 기사를 읽으십시오. http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server


1
기사를 감추고 난 후에도 여전히 더 똑똑하지 않습니다. 대부분의 기사에서 CDC 사용 방법과 변경 추적과 비교하는 방법에 대해 자세히 설명합니다. 그래도 위의 질문에 실제로 대답하지는 않습니다.
magnattic

9

CDC가 어떤 작업 / 시나리오에 적합한 도구입니까? (예 : 사용자가 특정 시점으로 데이터 객체를 복원하도록 허용?

아마도, 그것은 달려 있습니다.

감사?

예.

전체 데이터 기록을 보여주고 있습니까?)

예.

언제 CDC를 사용하지 말고 맞춤형 트리거 기반 솔루션을 사용해야합니까?

변경 테이블의 데이터가 요구 사항을 충족하지 않는 경우

운영 데이터베이스에서 CDC를 사용하고 운영 응용 프로그램 내에서 CDC 데이터를 사용해도됩니까? (예 : 최종 사용자에게 표시)

예.

아니면 이것이 분명히이 기능의 오용입니까?

아니요,이 기능을 오용하지 않습니다.

CDC가 감사 도구라고 들었지만 SQL Server Audit의 용도가 아닌가?

예.

그들은 같은 작업을 위해 서로 다른 도구입니까?

아니.

아니면 다른 것들에 CDC를 사용할 수 있습니까?

다른 용도로는 CDC를 사용할 수 있습니다.

변경 내용 추적 및 변경 데이터 캡처가 있습니다. 둘 다 복제에 뿌리를두고 있습니다.

변경 내용 추적은 테이블에 대한 순 변경 사항을 제공하는 방법을 제공합니다. 사용 예는 핸드 헬드 장치 동기화입니다.

반면 CDC는 모든 작은 변화, 역사를 추적합니다. 데이터를 대량 복사하는 대신 해당 기록을 사용하여 데이터웨어 하우스를 업데이트하거나 해당 기록을 데이터 자체로 사용하고 그에 대한 보고서를 생성 할 수 있습니다. 변경 테이블은 숨겨져 있지 않으며 이상한 스키마 또는 무언가가 없습니다. 쿼리하고 원하는 데이터를 사용할 수 있습니다. 이안이 말한 것처럼 실시간은 아닙니다. 데이터는 트랜잭션 로그에서 가져 오므로 복제, 미러링 또는 로그 전달을 사용하는 것처럼 처리하십시오. 대체로 트리거보다 빠릅니다. 오버 헤드가있는 스냅 샷 격리를 사용해야하며 재해 복구에 대해 생각해야합니다.


2

수정 점. 한 번에 변경 데이터 캡처는 위에 나열된 버전에서만 사용 가능했습니다. 그러나 2016 SP1부터 Standard Edition에서 변경 데이터 캡처를 사용할 수있게되었습니다. 따라서 2016 SP1 이전에 작성된 많은 기사는 Standard Edition을 사용하는 사람들이 CDC에 도달하지 못하는 것처럼 들립니다. 이것은 더 이상 사실이 아닙니다. CDC를 사용할 수있는 Microsoft 문서는 아래 링크에 있습니다.

https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.