我们有一个 winform 应用程序,所有的 SQL 都是内联的,不幸的是没有使用存储过程。
跟踪对 SQL 表执行的操作(INSERT、UPDATE 或 DELETE)、监视和捕获单个表中正在进行的活动的记录的最佳方法是什么。
我知道 SQL Server Profiler 是可用的,但理想情况下我不想让 Profiler 一直运行,我需要的是在幕后运行并捕获一张表的所有活动。
我想过使用触发器,但使用它有一些缺点,所以我想知道是否还有其他选择?
谢谢
我们有一个 winform 应用程序,所有的 SQL 都是内联的,不幸的是没有使用存储过程。
跟踪对 SQL 表执行的操作(INSERT、UPDATE 或 DELETE)、监视和捕获单个表中正在进行的活动的记录的最佳方法是什么。
我知道 SQL Server Profiler 是可用的,但理想情况下我不想让 Profiler 一直运行,我需要的是在幕后运行并捕获一张表的所有活动。
我想过使用触发器,但使用它有一些缺点,所以我想知道是否还有其他选择?
谢谢
如果您使用的是 SQL Server 2008(及更高版本),更改数据捕获听起来是个不错的起点:
http://msdn.microsoft.com/en-us/library/bb522489(v=sql.105).aspx
如果您使用的是 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/
有几种方法。如果您只想在代码中执行此操作(取决于您的程序),您只需将命令添加到列表并将它们写入文件即可。
如果您使用的是 EntityFrameWork,那么我会记录数据更改。在使用 EF 时,最好使用存储过程。
您的代码或项目示例会有所帮助。TransactionLogs 已经捕获了该信息。
很明显,你使用 Sql Server 的那些甲骨文人真是太嫉妒了。
还要看看使用 DataSourceViews,它是一种告诉服务器正在发生什么的方法。
我认为 SQL Server CHANGE TRACKING TeEchinique 最适合您的要求。