如何找出修改配置表中值的应用程序或SP?我以为我已经隔离了负责任的应用程序,但是当我继续将它们修改为假时,这些特殊值继续变回真实。
答案 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的新功能,可以“开箱即用”支持这种确切的场景,而无需自己编写触发器和更新表。非常方便!
马克