如何捕获和记录SQL表的活动

时间:2012-07-10 21:45:01

标签: c# winforms sql-server-2008-r2

我们有一个winform应用程序,所有SQL都是内联的,不幸的是没有使用存储过程。

保持对SQL表执行的操作(INSERT,UPDATE或DELETE)的跟踪的最佳方法是什么,监视并捕获单个表中正在进行的活动的记录

我知道SQL服务器分析器是可用的,但理想情况下我不想让分析器一直运行,我需要的是在幕后运行并捕获一个表的所有活动。

我想过使用触发器,但使用它有一些缺点,所以我想知道是否有其他选择?

谢谢

4 个答案:

答案 0 :(得分:2)

如果你正在使用SQL Server 2008(以及更高版本),那么Change Data Capture听起来是一个很好的起点:

http://msdn.microsoft.com/en-us/library/bb522489(v=sql.105).aspx

答案 1 :(得分:0)

如果您使用的是ORACLE,则可以使用此语句审核表(如果使用fireid 是进行更新的用户的名称):

AUDIT SELECT TABLE,UPDATE TABLE,INSERT TABLE,DELETE TABLE BY fireid BY ACCESS;

结果将存储在SYS.AUD $表

(如果您正在使用其他数据库,只需搜索文档以审核DML语句。)

SQL SERVER:有一个名为“SQL AUDIT”的功能这是你要找的吗? http://www.bradmcgehee.com/2010/03/an-introduction-to-sql-server-2008-audit/

答案 2 :(得分:0)

有几种方法。如果您只想在Code中执行此操作(取决于您的程序) 您只需将命令添加到列表中并将其写入文件即可。

如果您正在使用EntityFrameWork,那么我会记录数据更改。使用EF时,使用存储过程确实是最好的。

您的代码或项目示例会有所帮助。 TransactionLogs已经捕获了这些信息。

显然你使用Sql Server这些ORACLE人非常嫉妒。

另外,请看一下使用DataSourceViews,它是一种告诉服务器发生了什么的方法。

答案 3 :(得分:0)

我认为SQL Server CHANGE TRACKING TeEchinique最适合您的要求。