观察数据库列以确定正在修改的内容

时间:2009-06-11 04:07:49

标签: sql-server-2005

如何找出修改配置表中值的应用程序或SP?我以为我已经隔离了负责任的应用程序,但是当我继续将它们修改为假时,这些特殊值继续变回真实。

3 个答案:

答案 0 :(得分: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 Profiler中设置跟踪,过滤掉它的内容,使其只返回该表的更新,并保持打开直到发生某些事情。

如果 您的应用程序在其连接字符串中包含 ApplicationName 参数,则可以使用 App_Name()代替 SYSTEM_USER ,它将记录应用程序名称,删除额外的侦探工作。了解用户可能仍然有用,这样您就可以弄清楚他们在做什么来触发更新。

答案 1 :(得分:1)

创建一个触发器以回滚更新。等待应用程序出错。它可以是一个非常简单的触发器:

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

答案 2 :(得分:0)

到目前为止提供的答案绝对是现场 - 这是在SQL Server 2005中实现的方法。

就像一个简短的预告片:在SQL Server 2008中,有一个名为Change Data Capture的新功能,可以“开箱即用”支持这种确切的场景,而无需自己编写触发器和更新表。非常方便!

马克