2011-10-18 8 views
0

내 웹 사이트에서 몇몇 테이블을 추가/업데이트/삭제하는 것과 같은 몇 가지 이벤트를 감사/기록 할 계획입니다. 데이터베이스 트리거를 추가 할 계획입니다. 감사 테이블에 많은 양의 데이터가있을 수 있고 그 테이블에 행을 삽입하는 데 시간이 더 걸릴 것이라고 생각합니다. 제 질문은 트리거가 비동기로 실행되거나 프런트 엔드 호출이 반환되기 전에 완료해야하는지 여부입니다.데이터베이스 트리거, 비동기입니까?

감사

+1

가능한 중복 Server 2005/2008] (http://stackoverflow.com/questions/766761/asynchronous-triggers-in-sql-server-2005-2008) –

+0

예, 거의 !!!! – Tippu

+1

_ 거의 한 번 속임수. 다른 질문에서는 트리거를 비동기로 만드는 방법을 묻는 중입니다.이 중 하나가 트리거가 동기화 또는 비동기인지 묻습니다. _answers_에는 많은 교차가 있지만, 다른 질문의 적절한 하위 집합이 아니면 (즉, _question_가 동일해야 함) 질문을 결코 속임수로 간주하지 않습니다. 그냥 내 .02 달러. – paxdiablo

답변

2

은 거의 확실하게, 그렇지 않으면 멀리 자성의 요점을 날려 버렸어 때문에 그들이 동기 것 (변화가 테이블에 만들어 질 수있다 원자 다음 트리거는 감사 추적 즉, 실패 할 수 있습니다 쓸모 없다).

비동기 트리거를 사용할 수 없다고 말하는 것은 아닙니다. 그러나 나는 당신에게 어떤 용도로든 사용되는 것을 볼 수 없습니다.

테이블이 커질 염려가 있으시면 다른 방법으로 처리 할 수 ​​있습니다. 하나는 파티셔닝 (예 : 날짜를 기준으로) 또는 사용할 수없는 경우 주기적으로 감사 행을 날짜 기반 아카이브 테이블로 전송 한 다음 메인 테이블에서 삭제하는 것입니다.

그런 식으로 주 테이블은 마지막으로 N 개월 동안의 데이터 만 보유하고 다른 모든 데이터는 다른 곳에 저장됩니다.

+0

가장 간단한 방법은 SQL Server에서 감사 기능을 켜는 것입니다. – TomTom

+0

@TomTom : 내가 아는 한, CDC 나 트리거를 사용하는 것보다 필터링이 필요하지 않고 로그를 남기지 않습니다. – gbn

+0

또한 통합되어 있고 개발하는 데 드는 노력이 적으며 특정 수준의 테스트가 이미 적용되어 있습니다. . – TomTom

1
  • 내가 적절한 감사 테이블 (들) 구조를
  • 예를 만드는 게 좋을 것 : - 영장류 감사 테이블과
  • 감사 - 로그를 통해 관리 할 수있는 오래된 & 새로운 가치와 보조 테이블을
  • 당신은 장소에 보관 프로세스가 있어야 적절하게 관리하는 경우
  • 그것은 오버 헤드 안 트리거
2

T riggers는 항상 동기입니다. 트랜잭션은 명시 적 (BEGIN TRAN) 또는 암시 (INSERT 등) 여부에 관계없이 트랜잭션의 일부로 실행됩니다.

대부분의 응용 프로그램에서 로깅 및 감사가 필수적입니다. 트리거에서 로그 또는 기록 테이블에 대한 쓰기가 실패하면 상위 INSERT 등도 실패합니다.

트리거 만 루프와 심하게 코딩, 또는 이메일을 보내거나 당신은 또한 사용할 수있는 트리거 대신 MS Word Spell Checker 또는 calling web services

를 호출 시간이 오래 걸릴 Change Data Capture

SQL에서 [비동기 트리거의
관련 문제