2009-06-11 12 views
1

どのアプリケーションまたはSPが設定テーブルの値を変更しているかを知るにはどうすればよいですか?私は責任があるアプリを隔離していると思ったが、これらの特定の値は、それらを偽に変更したままにしておけば、真に戻ります。変更内容を確認するデータベース列を参照

答えて

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テーブル覗いといつ。あなたは気が利いて、特定のフィールドを更新してログに記録することもできます。

もう1つの方法は、SQL Server Profilerでトレースを設定し、そのテーブルの更新情報のみをフィルタリングし、何かが発生するまで開いたままにしておきます。

もしあなたのアプリケーションは、あなたがAPP_NAMEを()を使用することができ、その接続文字列にのApplicationNameパラメータを含め代わりに余分な探偵の仕事を削除、アプリケーション名を記録しますSYSTEM_USER、の。ユーザーを知ることはまだ有用かもしれないので、更新プログラムを起動するために何をしているのか把握することができます。

+0

ユーザー名を識別しますか? –

+0

@richard、ユーザー名と特定のアプリケーションとを関連付けることができれば、これはうまくいくはずです。 –

+0

はい、更新を実行しているSQL Serverセッションに関連付けられているユーザー名が識別されます。ユーザーと時間を知っていれば、どのアプリが責任を持っているか把握できます。 – richardtallent

1

更新プログラムをロールバックするためのトリガーを作成します。アプリのエラーが出るのを待ちます。それはちょうど簡単なティーザーとしてSQL Serverで2005

それを行うための方法です - これまでの回答をその場で絶対にある

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

0

:それは非常にシンプルなトリガすることができ:SQL Server 2008には、Change Data Captureという新しい機能があり、トリガーを作成してテーブルを自分で更新する必要はなく、そのままの状態でこの正確なシナリオをサポートします。かなり便利です!

マーク

関連する問題