如何在不同的数据库上重放SQL事件探查器跟踪?

时间:2010-02-23 09:48:36

标签: sql-server sql-server-2008 trace profiler

我在生产服务器上为特定数据库捕获了一个跟踪(模板:tsql_replay)(按数据库名称过滤)。我想在我们的测试服务器上重播它,但当然测试服务器上的数据库ID是不同的。

到目前为止,我已经尝试将跟踪文件加载到表中并使用更新查询修改databaseid(参见下文),但是在尝试重放时,Profiler会给我一个错误(丢失事件等)。如果我直接打开跟踪文件,它允许我重放它。所以不知何故,无论是加载到表中还是更改数据库ID都会让人感到困惑。

捕获重放跟踪的正确程序是什么,更改应该重播的数据库是什么?

select * into trace_table
from fn_trace_gettable('f:\trace\trace100222.trc', default)
go
update trace_table
set databaseid = 47
where databaseid = 16

3 个答案:

答案 0 :(得分:3)

您必须创建跟踪并将其另存为重播的跟踪XML文件,然后打开XML并更改跟踪XML上的数据库ID。

请注意,如果从sql 2008跟踪到sql 2000,则无法设置结束日期和小时,因为会出现ODBC DateTime错误。

但除此之外,通常也是如此。

答案 1 :(得分:1)

两年后,我遇到了同样的问题。这就是我解决它的方法:

  1. 启动SQL Server Profiler
  2. 打开跟踪文件
  3. 重播跟踪文件以确认其有效
  4. 将跟踪文件另存为表(T1)
  5. 在必要时更新表格(在我的情况下,我必须更新 LoginName为本地用户)
  6. 打开更新的跟踪表
  7. 重播跟踪
  8. 要注意,我针对将跟踪文件保存到跟踪表的过程运行了跟踪,而Profiler除了使用 fn_trace_gettable 将跟踪内容写入表之外,还做了很多工作。它似乎也通过一系列sp_cursor命令将各种内部属性添加到跟踪表中:

    exec sp_cursor 180150003,4,0,N'[dbo].[T1]',@EventClass=65528,@BinaryData=0xFFF...
    

答案 2 :(得分:0)

我在重播常规跟踪文件(.trc)方面没有遇到任何问题。它们不一定是XML。这是在SQL 2005中。您需要确保捕获某些事件,以便甚至能够重放跟踪。 TSQL_Replay跟踪模板将为您提供帮助。

重播时,我倾向于在重播对话框中的高级重播选项选项卡上关闭重放系统SPID。我也倾向于将结果保存到表中以供以后分析。