我在生产服务器上为特定数据库捕获了一个跟踪(模板: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
答案 0 :(得分:3)
您必须创建跟踪并将其另存为重播的跟踪XML文件,然后打开XML并更改跟踪XML上的数据库ID。
请注意,如果从sql 2008跟踪到sql 2000,则无法设置结束日期和小时,因为会出现ODBC DateTime错误。
但除此之外,通常也是如此。
答案 1 :(得分:1)
两年后,我遇到了同样的问题。这就是我解决它的方法:
要注意,我针对将跟踪文件保存到跟踪表的过程运行了跟踪,而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。我也倾向于将结果保存到表中以供以后分析。