2009-02-19 34 views
4

关于有用的SQL技巧,有一个post。在这里,我将提及SQL Server Profiler工具,因为它帮助我编写了更少的SQL。我会编写SQL来询问,理解或猜测数据库业务逻辑。是否可以自动化SQL Server 2008分析器?

Profiler是非常有用的,尤其是在应用程序代码中嵌入SQL,你想看看它在做什么,在最短的时间内。 (你也许不知道在应用程序的环境中使用哪个源代码版本,或者更糟的是,没有可用的源代码!)。

我在想,如果探查有一个API,我可以挂接到?

当我们想要通过设置环境变量/标志(例如PROFILER_ON = TRUE)来快速检查系统中调用什么SQL时,这将非常有用。然后,系统可以启动SQL事件探查器,设置各种跟踪属性,然后写出日志或表格 - 可以由支持团队查看。

我想编写一个组件切换探查并监控生产环境(在安静的时候),所以不能真正改变代码库(应用程序代码和SQL存储的特效两者)。

回答

3

你可以做的是设置你的“完美”跟踪和脚本它作为SQL。 然后执行它来运行跟踪并将输出保存到文件或表格中。

现在,您可以包装SQL以在另一个可以通过SQL代理/空闲阈值运行的存储过程中创建跟踪,但是使用fn_trace_getinfo来查看是否有一个已经运行。

不能在SSMS中自动执行或使用环境变量:代码,作业,警报等都必须存在于服务器上。

你可以把脚本跟踪到一个批处理文件,并通过OSQL/SQLCMD运行它,但它需要手动调用。

没有探查器API:它所做的就是运行存储过程,就像任何解决方案必须的一样。

为什么不能添加监视SQL代码帽子是独立于应用程序代码?

can't use SMO either ...为只读痕迹

编辑:踪总是需要SQL将针对服务器运行

+0

当我通过GUI使用分析器时,我试图自动执行我要做的事情。你的观点是有用的,唯一的问题是我不想写一个已经存在的系统的SQL。通过某种交换机开发和运行组件,在服务器上自动化分析器本来是很好用的。 – Ferdeen 2009-02-21 18:17:41

+0

然后我再重复一遍:你别无选择,只能针对实时系统运行SQL! – gbn 2009-02-22 12:06:50

4

可以利用Microsoft.SqlServer.Management.Trace命名空间中的物体;他们提供了一个针对SQL Profiler提供的相同功能的API。这是针对数据库脚本编写自己的sql的替代方法。但是,就像SQL事件探查器一样,这些对象在封面下做的是执行SQL Trace存储过程(或其变体)来创建,运行和管理这些跟踪。

如果您使用1个事件探查器实例来分析另一个事件(或者使用事件探查器通过从跟踪中删除“NOT LIKE”SQL Profiler ...“”过滤器条件(我认为它是一个应用程序名称过滤器)您将看到事件探查器所做的与您在SQL中执行的操作或SMO对象从API执行的操作相同。

0

GBN的就在这里;所有SQL Profiler都在SQL Server上执行存储过程:这些过程启动,配置和停止跟踪。这意味着,不是试图自动化分析器,而是执行相同的跟踪过程,并且会得到相同的行为。

要自动启动和停止跟踪,可以使用SQL事件探查器创建脚本;该脚本可以从批处理文件中执行。所以你会做这样的事情;

  • 打开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" 
相关问题