변경 데이터 캡처-누가 변경했는지 확인하는 방법


10

CDC가 식별 한 변경 사항을 추적합니다.

내 날짜 시간 해킹 라인을 따라 suser_sname을 cdc 변경 트랙 테이블의 기본값으로 새 필드로 추가하여 동일한 접근 방식을 시도했습니다. 그러나 기본 테이블에서 변경을 시작한 사용자가 아닌 cdc 프로세스의 소유자를 반환하는 것으로 보입니다. 또한 original_login을 시도했지만 SQL 서비스 계정 로그인을 반환합니다. 다시 말하지만 변경을 시작한 사용자가 아닌 cdc 프로세스와 관련이있을 수 있습니다.

스택 오버플로 에서 비슷한 질문을 찾았 지만 프론트 엔드 또는 트리거를 통해 변경 사항을 추적하는 것 외에는 대답이 없었습니다 .cdc 사용의 목적을 어기는 것 같습니다. 나는 다시 게시하지 않을 것이지만 원본이 stackoverflow에 있었기 때문에 특히 R2 또는 2012가 더 나은 방법을 도입했다면 여기에서 시도해 볼 것이라고 생각했습니다.

간단히 말해 : 누가 변경 데이터 캡처를 변경했는지 어떻게 알 수 있습니까?

답변:


7

이에 대한 버그를 제기했지만 "디자인 상"으로 닫혔습니다.

http://connect.microsoft.com/SQLServer/feedback/details/283707/cdc-options-to-capture-more-data-username-date-time-etc

불행히도이 정보 (및 가능한 한 많은 정보를 CDC 데이터와 상관 시키려면 일부 사용자 정의 코드)를 얻기 위해 다른 기술 (예 : SQL 감사 또는 트리거)을 사용해야합니다. SQL Server MVP Deep Dives (볼륨 1) 책의 "SQL Server 감사, 변경 내용 추적 및 변경 데이터 캡처"장에서도이 결함에 대해 썼습니다 .

더 나은 해결 방법이 없어 죄송하지만 CDC의 기본 제공 기능은 요구 사항을 충족하지 못합니다. :-(


@RThomas 항목이 닫혀 있어도 여전히 항목에 투표 할 수 있습니다. 때때로 다시 방문합니다. 투표보다 더 유용한 것은 누락 된 기능을 해결하기 위해 사물을 리팩토링하는 비용을 포함하여이 정보를 유용하게 만드는 비즈니스 요구 사항의 세부 사항을 설명하는 주석을 추가하는 것입니다. 나는 질적 데이터가 어떻게 양적 데이터보다 클 수 있는지에 대해 조금 썼다 .
Aaron Bertrand

알아두면 좋겠다. 폐쇄는 투표에 대한 폐쇄도 의미한다고 생각했다. 나는 오라클이 CDC 구현에서 이것을 제공한다고 내 의견에서 지적했다. 논리적으로 보입니다. docs.oracle.com/cd/A91202_01/901_doc/server.901/a90237/…
RThomas 2013

6

열을 추가하고 테이블에 트리거를 설정하여 삽입 / 업데이트 / 삭제시 사용자를 채우면 cdc가이를 저장합니다. 컨텍스트 정보를 사용하여 사용자 이름을 전달하거나 실제 세션에서 UI를 통해 사용자 이름을 가져올 수 있습니다.

SET @CapturedBy = CAST(REPLACE(CAST(CONTEXT_INFO() AS VARCHAR(10)),CHAR(0),'''''''') AS INT)

IF(@CapturedBy) IS NULL
    BEGIN
       SELECT @CapturedBy = P.[Code]
       FROM sys.dm_exec_sessions AS S
         INNER JOIN [dbo].[Person] AS P
          ON S.[login_name] = P.[User_Name]
       WHERE S.[session_id] = @@spid
    END

0

기본 테이블에 UpdatedBy 필드를 추가하고 기본값을 SUSER_NAME () 또는 ORIGINAL_LOGIN ()으로 설정하고 CDC가 해당 데이터를 채울 수 있습니까? 나는 그것이 당신이 찾고있는 것과 동일한 정보를 줄 것이라고 믿습니다.


그것은 당신에게 cdc의 svc 계정 / 소유자를 얻는 것입니다, 당신은 내가 그런 것들을 시도하고 2 월에 원래 질문 방식으로 결과를 문서화했음을 알 수 있습니다.
RThomas

귀하의 의견에 따르면 ChangeData 테이블에 추가했습니다. ChangeData 테이블이 기반으로하는 원래 테이블에 대해 이야기하고 있습니다. 내가 삽입이 것 만 일 게시 한 후 그러나 나는 깨달았다
요리사

아아, 그것을 잡지 않았다. 나는 당신의 말을 지금 얻습니다.
RThomas 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.