问题:
Sql server数据库中一table的一个栏位每天会被update,如何查能查到是哪个程序做的?
SQL Server中可用sql trace去跟踪,但只能跟踪目前的session,所以只能写一Trigger去记录当时的情况(对于 oracle 来说可以用logminer去分析归档日志来实现,当然也可以写Trigger去实现),测试如下:
创建测试表并添加测试数据:
CREATE TABLE TR_TEST
(Id INT,
FullName VARCHAR(20)
)
INSERT INTO TR_TEST
VALUES(1,’BrightWen’)
INSERT INTO TR_TEST
VALUES(2,’HONGSU’)
创建Log表:
CREATE TABLE TR_TESTLOG
(LogDate DATETIME,
AuditType VARCHAR(6),
HostName VARCHAR(128),
AppName VARCHAR(250),
Value VARCHAR(20)
)
现在我要稽核栏位FullName被修改的情况:
CREATE TRIGGER TR_Audit ON TR_TEST
FOR UPDATE
AS
IF UPDATE(FullName) AND @@ROWCOUNT > 0
BEGIN
INSERT TR_TESTLOG
SELECT GETDATE(),’Old’,HOST_NAME(),APP_NAME(),FullName
FROM Deleted
INSERT TR_TESTLOG
SELECT GETDATE(),’New’,HOST_NAME(),APP_NAME(),FullName
FROM INSERTED
END
测试:
UPDATE TR_TEST SET FullName = ‘HONGSU1′ WHERE ID =2
SELECT * FROM TR_TESTLOG
LogDate AuditType HostName AppName Value
———————— ——— ———– —————— ———————- ——————–
2006-01-19 14:08:12.080 Old BRIGHTWEN SQL Query Analyzer HONGSU
2006-01-19 14:08:12.090 New BRIGHTWEN SQL Query Analyzer HONGSU1
No Comments
Be the first to comment on this entry.
Leave a comment
Fields in bold are required. Email addresses are never published or distributed.
Some HTML code is allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>URLs must be fully qualified (eg: http://www.dbifan.com),and all tags must be properly closed.
Line breaks and paragraphs are automatically converted.
Please keep comments relevant. Off-topic, offensive or inappropriate comments may be edited or removed.