sud*_*ned 5 sql-server-2005 sql-server profiler
我正在将一个旧的、半损坏的 ASP.NET/SQL Server 应用程序移植到 PHP/PostgreSQL。我面临的折磨^H^H^H^H^H^H^H^H挑战是报告是由一系列二进制可执行文件完成的,因为显然我是一个坏人,需要受到惩罚。因此,我无权访问查询以移植它们。
那很好,我想。我可以运行查询分析器并记录 在夜间报告生成期间发生的所有SELECT 语句。
但事实证明,最初的开发人员通过运行不包含 Profiler 的 SQL Server Workgroup Edition 降低了成本。
我正在考虑使用触发器来获取这些查询,但我认为我不能在SELECT语句上使用触发器。逆向工程查询是可能的,但考虑到数据库的复杂性(多个,通常是递归的,表之间的关系,同名表的负载,其中有几个表多年没有更新,等等)我更喜欢有规范的查询参考。
我应该怎么做?有没有办法让 Profiler 在 Workgroup Edition 中运行?有没有办法在没有分析器的情况下启用查询日志记录?我并不担心性能,因为这个应用程序并没有得到特别频繁的使用,而且它在比应用程序要求的两个尺寸更强大的机器上运行。
Pau*_*ite 10
几个选项:
您可以从 SQL Server Developer、Standard、Enterprise 或 Evaluation Edition 的不同客户端工具安装中针对 Workgroup Edition 服务器使用 SQL Server Profiler。
使用半记录的跟踪标志 4032,如Tom LaRock 所述。
评估第三方工具,例如免费的DataWizard SQL Performance Profiler、xSQL Profiler(一个实例免费)或ExpressProfiler(BSD 许可证)。
我的偏好可能是选项 (1),如有必要,下载评估版。
如果您告诉 Profiler 不要过滤掉它自己的查询,您可能会看到它调用这些存储过程:
sp_trace_create 创建跟踪sp_trace_setevent 添加或删除事件和列(只能在停止的跟踪上调用)sp_trace_setfilter 将过滤器应用于跟踪(只能在停止的跟踪上调用)sp_trace_setstatus 开始和停止跟踪如文档所述,您按以下顺序执行过程:
sp_trace_create。sp_trace_setevent。sp_trace_setfilter.sp_trace_setstatus。sp_trace_setstatus。sp_trace_setstatus。您最终会得到一个.trc文件,然后您可以在 SQL Profiler 中打开该文件或使用fn_trace_gettable.
这是启动跟踪的示例脚本:
declare @rc int
declare @TraceID int
-- create the trace
exec @rc = sp_trace_create @TraceID output, 0, N'trace-filename'
-- set which events to capture
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 10, 1, @on
exec sp_trace_setevent @TraceID, 10, 2, @on
exec sp_trace_setevent @TraceID, 10, 6, @on
exec sp_trace_setevent @TraceID, 10, 9, @on
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 11, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 6, @on
exec sp_trace_setevent @TraceID, 12, 9, @on
exec sp_trace_setevent @TraceID, 12, 10, @on
exec sp_trace_setevent @TraceID, 12, 11, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 15, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
-- start the trace
exec sp_trace_setstatus @TraceID, 1
Run Code Online (Sandbox Code Playgroud)
使用内置的动态管理视图。AFAIK,它们在工作组版中工作得很好。
SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4831 次 |
| 最近记录: |