有一个post关于有用的SQL技巧。在这里,我将提到SQL Server Profiler工具,因为它帮助我编写了更少的SQL。我会编写SQL来询问,理解或猜测数据库业务逻辑。
Profiler非常有用,特别是在应用程序代码嵌入了SQL并且您希望在最短的时间内计算出它正在做的事情的情况下。 (另外,您可能不知道在应用程序环境中使用了哪个源代码版本,或者更糟糕的是,在没有可用源代码的情况下!)。
我想知道探查器是否有可以挂钩的API?
当我们想要通过设置环境变量/标志(例如,PROFILER_ON = TRUE)快速检查系统内的SQL调用时,这将非常有用。然后,系统可以启动SQL事件探查器,设置各种跟踪属性,然后写入日志或表 - 这可以由支持团队查看。
我想编写一个组件来切换启动器并监视生产环境(在安静时间),因此无法真正改变代码库(应用程序代码和SQL存储过程)。
答案 0 :(得分:4)
您可以使用Microsoft.SqlServer.Management.Trace命名空间对象;它们提供的API与SQL Profiler提供的功能相同。这是针对数据库编写自己的sql脚本的替代方法。但是,就像SQL事件探查器一样,这些对象的功能是执行SQL跟踪存储过程(或其变体)来创建,运行和管理跟踪。
如果您使用1个分析器实例来分析另一个(或使用分析器通过从跟踪中删除“NOT LIKE”SQL Profiler ...'“过滤条件来分析自身(我认为它是应用程序名称过滤器),那么您我将确切地了解探测器正在做什么与在SQL中执行的操作相同,或者SMO对象将从API执行的操作。
答案 1 :(得分:3)
您可以做的是设置“完美”跟踪并将其编写为SQL。 然后执行它以运行跟踪并将输出保存到文件或表中。
现在,您可以包装SQL以在另一个可以通过SQL代理/空闲阈值运行的存储过程中创建跟踪,但是使用fn_trace_getinfo来查看是否已经运行了。
你无法在SSMS中自动化它或使用环境变量:代码,作业,警报等都必须存在于服务器上。
您可以将脚本化跟踪放入批处理文件并通过osql / sqlcmd运行,但必须手动调用。
没有探查器API:它所做的就是运行存储过程,就像任何解决方案一样。
为什么不能添加监控SQL代码帽独立于应用程序代码?
您can't use SMO either ...仅读取痕迹
编辑:跟踪始终要求对服务器运行SQL
答案 2 :(得分:1)
您可以使用系统存储过程自动执行探查器。在http://vyaskn.tripod.com/server_side_tracing_in_sql_server.htm
查看相同的详细信息答案 3 :(得分:0)
GBN在这里得到了它;所有SQL事件探查器都在SQL Server上执行存储过程:这些过程启动,配置和停止跟踪。这意味着,您只需执行相同的跟踪过程,而不是尝试自动化分析器,您将获得相同的行为。
要自动启动和停止跟踪,可以使用SQL事件探查器创建脚本;该脚本可以从批处理文件中执行。所以你会做这样的事情;
.sql
文件此.sql
文件包含您可以运行的代码;如果你打开它,你会在顶部看到这种代码;
exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL
if (@rc != 0) goto error
-- Client side File and Table cannot be scripted
-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 6, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
exec sp_trace_setevent @TraceID, 14, 14, @on
exec sp_trace_setevent @TraceID, 14, 11, @on
This creates a trace that writes to a file.
这是创建跟踪并将事件附加到跟踪。
现在,要开始跟踪,您可以安排执行此文件。批处理文件看起来像;
osql -E -S MACHINE\INSTANCE -i "c:\my-trace-definition.sql"