2013-10-30 1 views
1

CDC (변경 데이터 캡처) 기능을 사용하여 몇 개의 테이블에 대한 감사 데이터를 유지 관리하는 프로덕션 데이터베이스가 있습니다. 그러나 성능상의 영향으로 인해 CDC로 인해 수행 할 수없는 색인을 추가하는 것과 같은 데이터베이스 구조를 변경해야하므로 이제 CDC를 비활성화해야합니다.데이터베이스의 테이블에 대한 감사를 유지하는 더 나은 방법

단일 감사 테이블의 테이블 집합에 대해 웹 응용 프로그램의 모든 삽입, 삭제 및 업데이트 작업을 캡처해야합니다. 예를 들어, [C#에서] 웹 응용 프로그램을 통해 TableA에 추가, 업데이트 및 제거를 수행 할 때마다 TableA의 TableA에 대한 감사 정보를 유지해야합니다.

현재 세트의 각 테이블에 대해 이러한 3 가지 작업 중 하나가 발생할 수있는 각 저장 프로 시저를 업데이트하고 있습니다. 그러나 나는 테이블의 거대한 목록을 가지고 있기 때문에 너무 오류가 발생하기 쉽고 시간이 많이 걸린다.

이 작업을 수행하는 데있어 시간과 성능 측면에서보다 효율적으로 도움이 될 수 있도록 도와주세요.

+1

모든 삽입, 삭제 및 업데이트 작업 캡처는 트리거를 의미합니다. 아이디어를 얻으려면 : http://weblogs.asp.net/jgalloway/archive/2008/01/27/adding-simple-trigger-based-auditing-to-your-sql-server-database.aspx – danihp

+0

나는 그렇지 않습니다. 이 테이블을 업데이트하는 일괄 처리 프로세스가 있기 때문에 트리거를 사용할 수 있다고 생각하며이 테이블을 통해 정보를 감사하고 싶지는 않습니다. 웹 응용 프로그램을 통한 작업 만 감사해야합니다. – Deepshikha

+1

CDC에 대해서는 잘 모르겠지만 감사 테이블에 삽입 할 수있는 테이블의 삽입/업데이트/삭제 이후 저장소 패턴이나 작업 단위를 사용하거나 삽입/삭제 후에 AOP를 사용할 수 있습니다. 업데이트/삭제, 당신은 비동기 (백그라운드 작업) 할 수 있으며 그것은 webapp 요청의 "흐름"을 차단하지 않습니다 ... – jjchiw

답변

0

빠른 답변 : 데이터베이스를 변경할 모든 작업이 기록되어 있는지 확인하십시오. 우리의 프로젝트에서

, 우리는 사용자가 삽입, 업데이트를 실행하거나 명령을 삭제하거나 시스템 또는 로그 아웃 할 때마다 다음과 같은 필드

Date_And_Time  Actions  UserID  Part_of_Program 

, 또는 시스템 실행을 가지고 별도의 테이블을 생성 데이터베이스 내부의 자동 작업으로 프로그램은 자동으로 어떤 작업이 수행되었는지, 누가 작업을 수행했는지, 어떤 프로그램 부분이 영향을 받았는지 등을 기록합니다.

.. 또는 테이블의 현재 크기를 지속적으로 확인하는 코드를 작성할 수 있습니다. 크기가 변경되면 감사 테이블에 기록하십시오. 크기가 커지면 데이터가 삽입됩니다. 그렇지 않으면 데이터가 삭제되었습니다.

+0

OP는 감사 테이블을 디자인하는 방법을 묻지 않고 모든 관련 이벤트 (예 : 자신의 웹 응용 프로그램에서 업데이트, 삽입, 삭제)를 캡처하는 방법을 조언해야합니다. – germi

+0

사용자가 시스템에서 컨트롤을 사용하면 이러한 이벤트가 트리거되지 않습니까? 그런 다음 웹 응용 프로그램에서 관련 이벤트를 실행하는 컨트롤이있을 때마다 감사 테이블에 데이터를 삽입하는 다른 명령을 실행하게합니다. –

+0

그는 감사 테이블에 표시하지 않으려는 일괄 처리 작업을 실행하기 때문에 트리거를 사용할 수 없다는 의견에 썼습니다. – germi