教你用T-SQL语句来建立启动跟踪

一般我们会用事件探查器来跟踪SQL Server的运行情况,有时我们也需要定时进行一些跟踪,以检查SQL Server在某个时间段内的运行状况,由于事件探查器不支持调度,因此,应该寻找一种方法,适合我们通过设置JOB来启动跟踪,本文介绍的用T-SQL语句来启用跟踪就适合这种需求。

一、用脚本启动并设置跟踪的示例

通过这个示例,你可以了解用脚本进行跟踪所涉及到的存储过程,要了解这些存储过程的具体语法和参数的含义,请查询联机帮助

/****************************************************/
/* Created by: SQL Profiler             */
/* Date: 2004/06/19 16:50:05     */
/****************************************************/
-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5
-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share
exec @rc = sp_trace_create @TraceID output, 0, N'c:\test', @maxfilesize, NULL
if (@rc != 0) goto error
-- Client side File and Table cannot be scripted
-- Writing to a table is not supported through the SP's
-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Profiler'
set @intfilter = 100
exec sp_trace_setfilter @TraceID, 22, 0, 4, @intfilter
set @intfilter = 1
exec sp_trace_setfilter @TraceID, 23, 1, 0, @intfilter
exec sp_trace_setfilter @TraceID, 35, 1, 6, N'pubs'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1
-- display trace id for future references
select TraceID=@TraceID
goto finish
error:
select ErrorCode=@rc
finish:
go

二、生成跟踪脚本的最简式

事件探查器建立跟踪, 并设置好各种选项, 完成后运行跟踪

然后生成脚本:

事件探查器--文件--导出跟踪定义的文件--选择合适的版本.

这样就会生成一个跟踪的脚本, 打开生成的脚本, 修改里面的:

exec @rc = sp_trace_create

部分, 设置跟踪结果的保存文件(用语句跟踪的时候, 跟踪结果只能保存到文件)

然后, 在需要跟踪的时候, 运行这个脚本来启动跟踪

启动跟踪后, 跟踪自动进行, 所以你可以关闭查询分析器做其他事情去了.

三、已知的问题

1. 跟踪记录不是实时写入跟踪文件的, 因此, 可能会到你停止跟踪的时候, 跟踪信息才写入跟踪文件

2. 查看当前已经进行的跟踪可以用(关于结果集的解释, 请看联机帮助):

SELECT * FROM ::fn_trace_getinfo(0)

3. 停止某个跟踪, 可以在sp_trace_create 语句中设置自动停止时间, 也可以手动停止跟踪, 用下面的语句:

EXEC sp_trace_setstatus
  @traceid = 1 ,  -- 跟踪的id
  @status = 0   -- 停止, 这样以后还可能指定此项为来启用
EXEC sp_trace_setstatus
  @traceid = 1 ,
  @status = 2   -- 关闭, 彻底释放

时间: 2024-10-30 16:52:55

教你用T-SQL语句来建立启动跟踪的相关文章

问一个关于MS的DBhelpersql的效率问题,每执行一条sql语句都会建立一次连接,这样子会不会太慢了

问题描述 publicstaticobjectGetSingle(stringSQLString){using(SqlConnectionconnection=newSqlConnection(connectionString)){using(SqlCommandcmd=newSqlCommand(SQLString,connection)){看上去好像每执行一条sql语句都会建立一次连接,这样子会不会太慢了大家也这么用吗?

ASP初学者:教你使用使用SQL语句

sql|初学|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直

用SQL语句来建立跟踪的问题

问题|语句 /*-- 下面是我用SQL的事件探察器设置跟踪,并生成的SQL脚本 现在有几个问题: 1.这个跟踪不会产生数据,用:  select * from ::fn_trace_getinfo(1) 可以看到状态是在运行,但 c:\test.trc 始终是空文件  2.在事件探察器中设置筛选时,ObjectType 的说明是对应  sysobjects 表的 type 列,该列是字符型,但我输入字符时 要求是数字,这个数字从那里查?  3.如果只产生对 insert,update,delet

[20130226]跟踪特定IP的sql语句.txt

[20130226]跟踪特定IP的sql语句.txt 工作需要,跟踪特定IP地址发出的sql语句.可惜我们生产系统是10g的,如果是11G支持trcsess可以合并trc文件,再分析.自己做一个测试看看. http://space.itpub.net/267265/viewspace-754003 1.建立logon触发器: CREATE OR REPLACE TRIGGER SYS.on_logon_trigger    AFTER LOGON ON DATABASE DECLARE    v

oracle追踪特定sql语句

--新建测试表 create tablespace test datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\test01.DBF' size 500m autoextend on next 100m maxsize unlimited extent management local autoallocate segment   space management auto; create table t1 ( sid int not null primar

手把手教你在ASP中使用SQL语句

sql|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用

php与mysql建立连接并执行SQL语句的代码

今天写了一个小程序,很小很小,只不过是能够建立php与mysql的链接,并且实现简单的SQL语句. 新手初试,还请各路高手多多指导. 程序源代码如下: 复制代码 代码如下: <?php $conn = mysql_connect("localhost","root","") or die ("wrong!"); $sel=mysql_select_db("mydb",$conn); $sql=&quo

使用表单集合建立SQL语句2

集合|语句 更简单的方法 由此可见,我们需要一种简单的方法,能够根据任何表单建立SQL语句,而不管表单中有多少字段,也不管字段类型如何.要做到这点,我们要利用ASP 内置的request.form集合.经过在这个集合中循环,我们能够把每个表单字段的名称和它的值一起提取出来.列表 B 是这种工作方式的一个简单版本.在您查看代码时,请注意:为了这个技术能够生效,我们的HTML字段名必须与数据库表中的字段名相同.列表 B:使用 request.form 来轻松建立SQL字符串. <%iStr = &quo

使用表单集合建立SQL语句3

集合|语句 其它考虑 靠近函数的顶部,您会注意到我们使用了replace函数,把数据中的每个单引号替换成两个单引号.这是因为SQL翻译器使用单引号做为字符串的分隔符,如果数据中有单引号,就会造成SQL解释错误.把一个单引号转换成两个单引号,可以确保SQL翻译器在文本中正确加入单引号. 到了现在,就只剩下两个问题要解决:空值Null及从最终SQL语句中省略字段.列表 D 中加入了这两个问题的代码. 列表 D: buildSQLInsert函数的最终版. <%function buildSQLIns