如何跟踪SQL Server中的数据库写入?

问题描述:

我正在使用SQL Server 2008 R2,试图对一个不透明的应用程序进行逆向工程并重复其一些操作,以便我可以自动执行一些大规模的数据加载。如何跟踪SQL Server中的数据库写入?

我觉得它应该很容易做 - 只需进入SQL Server Profiler,开始一个跟踪,执行GUI操作,并查看跟踪结果。我的问题是,过滤器没有按照我的预期工作。尤其是,“写入”列通常显示为“0”,即使是在明确更改数据库的语句(如INSERT查询)上也是如此。这使得我无法设置Writes >= 1筛选器,因为我愿意这样做。

我已通过设置全包式跟踪并运行应用程序来验证这正是发生了什么事情。我事先检查了桌子,执行了操作,然后检查了桌子,这肯定是对桌子进行了改变。我查看了跟踪,没有一行显示“Writes”列中的任何非零数字,包括显示INSERT查询的行。查询是没有什么特别的...只是像

exec sp_executesql 
    N'INSERT INTO my_table([a], [b], [c]) 
     values(@newA, @newB, @newC)', 
    N'@newA int,@newB int,@newC int', @newA=1, @newB=2, @newC=3 

(如果有上面的错误,这是我在这里错字 - 语句绝对是插入表中的记录)

我m确保此行为的关键在于“Writes”列的描述中:“由服务器代表事件执行的物理磁盘写入数量”。也许服务器正在缓存写入,并且它发生在Profiler的普通用途之外。我不知道,也许这不重要。

有没有办法可靠地找到并记录所有更改数据库的语句?

+2

你确定你的跟踪配置正确吗?您是在寻找开始通话而不是完整通话吗?因为它还没有发生,你不会看到开始的东西。 – 2013-04-10 20:26:28

+0

你正在过滤哪些事件?是否可以在包含通配符搜索插入,更新和删除的Textdata上执行通配符过滤器。但正如@ Love2Learn所说的,你当然一定要跟踪RPC Completed和SQL Batch Completed,而不是开始。 – 2013-04-10 20:44:15

+0

我正在使用“标准(默认)”模板,其中包括'RPC:Completed'和'SQL:BatchCompleted'事件。 Textdata过滤器是否会捕获存储过程中所做的更改?我对此很感兴趣。 – 2013-04-10 21:01:01

您是否试过Server Side Trace?它也可以用来记录读取和写入,如果我正确地读取了你 - 你想要记录写入。

+0

这将报告与分析器完全相同。 – 2013-04-10 21:04:17