2009-06-11 3 views

답변

5

첫째, 로깅 테이블 생성 :

CREATE TABLE modlog(
    datestamp smalldatetime, 
    username varchar(255) NOT NULL DEFAULT SYSTEM_USER 
    ); 

이 그런 다음 테이블에 UPDATE 트리거를 만듭니다

CREATE TRIGGER mytable_mods ON mytable FOR UPDATE AS 
    INSERT INTO modlog(smalldatetime) VALUES (GETDATE()); 

그냥 어떤 사용자하는 테이블을 업데이트하고 파악하기 위해 modlog 테이블에 엿을, 그리고 언제. 당신은 공상을 얻을 수 있고 특정 필드가 업데이트되는 것을 기록 할 수 있습니다.

또 다른 접근법은 SQL Server 프로파일 러에서 추적을 설정하고, 그 테이블에서 업데이트 만 반환하도록 무언가를 필터링하고, 무언가가 발생할 때까지 열린 상태로 유지하는 것입니다.

경우 응용 프로그램은 APP_NAME()를 사용할 수 있습니다, 자신의 연결 문자열에 ApplicationName을 매개 변수를 포함 대신 별도의 탐정 일을 제거, 응용 프로그램 이름을 기록합니다 SYSTEM_USER, 의. 사용자를 알면 여전히 유용 할 수 있으므로 업데이트를 실행하기 위해 수행중인 작업을 파악할 수 있습니다.

+0

사용자 이름을 식별 할 수 있습니까? –

+0

@ richard, 사용자 이름을 특정 응용 프로그램과 연관시킬 수 있으면이 방법이 효과적입니다. –

+0

예, 업데이트를 수행하는 SQL Server 세션과 관련된 사용자 이름을 식별합니다. 사용자와 시간을 알고 있으면 어떤 앱이 책임이 있는지 알 수있을 것입니다. – richardtallent

1

업데이트를 롤백 할 트리거를 만듭니다. 앱이 오류가 발생할 때까지 기다립니다. 그것은 아주 간단한 트리거가 될 수 있습니다 제공

CREATE TRIGGER BugOffRogueProgram 
ON MyConfigTable 
FOR UPDATE 
AS 
BEGIN 
ROLLBACK TRAN 
END 

0

대답은 지금까지 그 자리에서 절대적이다 - 그 간단한 맛보기로 2005 년

그냥 SQL 서버에서 그것을 할 수있는 방법이있다 : SQL Server 2008에는 Change Data Capture이라는 새로운 기능이있어 트리거를 직접 작성하고 테이블을 직접 업데이트 할 필요없이 이처럼 정확한 시나리오를 지원합니다. 아주 편리!

마크

관련 문제