写在前面的话:
该文章大部分内容是摘抄
https://www.cnblogs.com/zhijianliutang/p/4113911.html
作者只是在该文章的基础上增加了,在实践的过程中,遇到的一些细节;
再此特别感谢作者指尖流淌的无私分享
如果缺省跟踪信息打开,它将在SQL Server启动时自动记录SQL Server启动信息。该功能犹如飞机的黑匣子,会记录一个SQL Server实例配置信息的所有改动。查看该信息,可以看出故障时数据库进行了什么样的改动。缺省跟踪信息和ERRORLOG存储在相同的日志文件夹中,其名称如“log_xxx.trc”,此处的xxx是一组序列号。你可以使用Profiler打开这些文件来查看事件记录,也可以使用函数 "fn_trace_gettable"来处理这些文件。
我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案。
简单的举几个应用场景:
在线生产库为何突然宕机?
数百张数据表为何不翼而飞?
刚打好补丁的系统为何屡遭黑手?
新添加的信息表为何频频丢失?
某张表字段的突然更改,究竟为何人所为?
这些个匿名的访问背后,究竟是人是鬼?
突然增加的增量数据,究竟是对是错?
数百兆的日志爆炸式的增长背后又隐藏着什么?
这一且的背后,是应用程序的BUG还是用户品质的缺失?
我相信如用过SQL Server数据库的人,都会或多或少的利用过SQL Profiler工具。这个玩意就是利用SQL Trace形成的一个图形化操作工具。
select * from sys.configurations where configuration_id = 1568
结果中Value的值为1是开启
select * from sys.traces
--开启Default Trace
sp_configure 'show advanced options' , 1 ;
GO
RECONFIGURE;
GO
sp_configure 'default trace enabled' , 1 ;
GO
RECONFIGURE;
GO
--测试是否开启
EXEC sp_configure 'default trace enabled';
GO
--关闭Default Trace
sp_configure 'default trace enabled' , 0 ;
GO
RECONFIGURE;
GO
sp_configure 'show advanced options' , 0 ;
GO
RECONFIGURE;
GO
select * from ::fn_trace_getinfo(0)
红框为系统跟踪日志配置;如下图
traceid | property | value |
---|---|---|
1 | 1 | 2 |
1 | 2 | C:yFrogram FilesMi crosoft SL Server MSSQL11.M..... |
1 | 3 | 20 |
1 | 4 | NULL |
1 | 5 | 1 |
一般情况下“系统的跟踪”信息ID为1;如上图 traceid=1
从上至下解读Value
选项名 | 选项值 | 说明 |
---|---|---|
TRACE_FILE_ROLLOVER | 2 | 指定当达到 max_file_size 时,将关闭当前跟踪文件并创建新文件。所有新记录都将写入新文件。新文件将与前一个文件同名,但是在文件名后将附加一个整数以指示其序列。例如,如果命名原始跟踪文件为 filename.trc,则命名下个跟踪文件为 filename_1.trc,命名再下一个跟踪文件为 filename_2.trc,等等。 随着更多滚动更新跟踪文件的创建,附加到文件名的整数值继续增加。 如果指定该选项时未指定 max_file_size 的值,则 SQL Server 使用 max_file_size 的默认值 (5 MB)。 |
SHUTDOWN_ON_ERROR | 4 | 指定无论任何原因,如果不能将跟踪写入文件,则 SQL Server 将关闭。执行安全审核跟踪时,该选项很有用。 |
TRACE_PRODUCE_BLACKBOX | 8 | 指定服务器产生的最后 5 MB 跟踪信息记录将由服务器保存。TRACE_PRODUCE_BLACKBOX 与所有其他选项不兼容。 |
tracefile:跟踪将写入的位置和文件名
maxfilesize:指定跟踪文件可以增长到的最大文件大小 (MB)
stoptime:指定停止跟踪的日期和时间,默认值为 NULL。如果为 NULL,该跟踪将一直运行,直到它被手动停止或服务器关闭。
start:当前跟踪的状态:0 停止;1 运行
select * from ::fn_trace_getinfo(0)
C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\log_803.trc
根据文件路径打开后,发现有5个相同的文件后缀为.trc的文件
系统默认提供5个跟踪文件,并且每一个文件默认大小都是20MB,SQL Server会自己维护这5个文件,当实例重启的时候或者到达大值的时候,之后会重新生成新的文件,将早的跟踪文件删除,依次滚动更新。
我们通过以下命令来查看跟踪文件中的内容:
select * from ::fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\log_803.trc',0)
默认的跟踪文件,提供的跟踪信息还是很全的,从中我们可以找到登录人,操作信息等,上面的截图只是包含的部分信息。我们可以利用该语句进行自己的加工,然后获得更有用的信息。
--获取跟踪文件中前100行执行内容
SELECT TOP 100
gt.[HostName]
,gt.[ServerName]
,gt.[DatabaseName]
,gt.[SPID]
,gt.[ObjectName]
,gt.[objecttype] [ObjectTypeID]
,sv.[subclass_name] [ObjectType]
,e.[category_id] [CategoryID]
,c.[Name] [Category]
,gt.[EventClass] [EventID]
,e.[Name] [EventName]
,gt.[LoginName]
,gt.[ApplicationName]
,gt.[StartTime]
,gt.[TextData]
FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\log_803.trc', DEFAULT) gt
LEFT JOIN sys.trace_subclass_values sv
ON gt.[eventclass] = sv.[trace_event_id] AND sv.[subclass_value] = gt.[objecttype]
INNER JOIN sys.trace_events e
ON gt.[eventclass] = e.[trace_event_id]
INNER JOIN sys.trace_categories c
ON e.[category_id] = c.[category_id]
WHERE gt.[spid] > 50 AND --50以内的spid为系统使用
gt.[DatabaseName] = 'master' AND --根据DatabaseName过滤
gt.[ObjectName] = 'fn_trace_getinfo' AND --根据objectname过滤
e.[category_id] = 5 AND --category 5表示对象,8表示安全
e.[trace_event_id] = 46
--trace_event_id
--46表示Create对象(Object:Created),
--47表示Drop对象(Object:Deleted),
--93表示日志文件自动增长(Log File Auto Grow),
--164表示Alter对象(Object:Altered),
--20表示错误日志(Audit Login Failed)
ORDER BY [StartTime] DESC
我创建了一张表,通过上面的跟踪,可以跟踪到该记录的信息,根据不同的过滤信息,我们可以查询出到跟踪的某个库的某个表的更改信息,包括:46创建(Created)、47删除(Deleted)、93文件自动增长信息(Log File Auto Grow)、146修改(Alter)、20表示错误日志(Login Failed)
在生产环境中,以上几个分类都是比较常用的,对定位部分问题的定位能够在找到充分的证据可循,比如某厮将数据库数据删除掉了还不承认等,这里面的Login Failed信息,能够追踪出有那么用户尝试登陆过数据库,并且失败,如果大面积的出现这种情况,那就要谨防黑客袭击了。
当然,这里我还可以利用SQL Server自带的Profile工具,打开查看跟踪文件中的内容。
菜单栏》工具》SQL Server Profiler
这个图像化的工具就比较熟悉了,直接打开进行筛选就可以了。
这种方式看似不错,但是它也有本身的缺点,我们来看:
1、这5个文件是滚动更新的,而且每个文件默认大都为20MB,并且没有提供更改的接口,所以当文件填充完之后就会删除掉,所以会找不到太久以前的内容;
2、本身默认的跟踪,只是提供一些关键信息的追踪,其中包括:auditing events,database events,error events,full text events,object creation,object deletion,object alteration,想要找到其它更详细的内容,此方式可能无能为力;
3、在SQL Server2012后续版本的 Microsoft SQL Server 将删除该功能,改用扩展事件。
根据上面SQL Server自带的跟踪信息有一些局限性,SQL Server为我们提供了自定义跟踪的接口,我们可以自己定义跟踪,充分扩展方法。
利用如下系统存储过程,我们可以创建自定义的Trace
sp_trace_create [ @traceid = ] trace_id OUTPUT
, [ @options = ] option_value
, [ @tracefile = ] 'trace_file'
[ , [ @maxfilesize = ] max_file_size ]
[ , [ @stoptime = ] 'stop_time' ]
[ , [ @filecount = ] 'max_rollover_files' ]
@traceid 系统默认分配跟踪的ID号
@options 指定为跟踪设置的选项,系统默认提供的几个选项:
2表示当文件写满的时候,关闭当前跟踪并创建新文件。
4表示如果不能将跟踪写入文件,不管什么原因导致,SQL Server则会关闭。这个可以利用此选项,追踪问题
8制定服务器产生的后5MB的跟踪信息记录由服务器保存。
@tracefile 跟踪文件的路径,这里可以是share的路径
@maxfilesize 跟踪文件的大小,单位是MB,默认不设置为5MB
@stoptime 跟踪停止的时间,利用它我们可以定时跟踪结束的日期
@filecount 默认生产的跟踪文件的数量,比如默认的为5个,那就在第5个文件写完的时候进行覆盖第1个文件滚动
比如我们可以利用如下脚本进行创建
--创建跟踪文件返回值
declare @rc int
--创建一个跟踪句柄
declare @TraceID int
--创建跟踪文件路径
declare @TraceFilePath nvarchar(500)
set @TraceFilePath=N'F:\SQLTest\'
--跟踪文件的大小
declare @maxfilesize bigint
set @maxfilesize=5
--设置停止的时间
declare @EndTime datetime
set @EndTime=null
--设置系统默认的操作
declare @options int
set @options=2
--设置默认滚动文件的数目
declare @filecount int
set @filecount=5
exec @rc=sp_trace_Create
@TraceID output,
@options,
@TraceFilePath,
@maxfilesize,
@EndTime,
@filecount
if(@rc=0)
select @TraceID
我们通过上面的跟踪创建的过程,可以在系统自带的默认的sys.traces中找到该跟踪的明细
这里的2即为【traceid】的值
select * from sys.traces
where id=2
通过上面的脚本,我们已经创建了一个新的跟踪(trace),但是这个跟踪状态为0,也就是说还没有运行,下面我们的步骤就是要为这个跟踪添加事件(event)
sp_trace_setevent [ @traceid = ] trace_id
, [ @eventid = ] event_id
, [ @columnid = ] column_id
, [ @on = ] on
@traceid 要修改的跟踪的 ID号
@eventid 要打开的事件的 ID
@columnid 要为该事件添加的列的 ID
@on 表示事件状态
详细的“事件ID(eventid) ”和“列的 ID(columnid)”等请看文末
十、跟踪中添加或删除的事件
其中主要的就是事件ID,这个是SQL Server为我们提供的一些列的码表事件值,具体值可以参考联机丛书
sp_trace_setevent (Transact-SQL) | Microsoft Learn
sql-server-2012
sp_trace_setevent (Transact-SQL) | Microsoft Learn
这里面常用的就是:
事件号 |
事件名称 |
说明 |
---|---|---|
10 |
RPC:Completed |
在完成了远程过程调用 (RPC) 时发生。 |
11 |
RPC:Starting |
在启动了 RPC 时发生。 |
12 |
SQL:BatchCompleted |
在完成了 Transact-SQL 批处理时发生。 |
13 |
SQL:BatchStarting |
在启动了 Transact-SQL 批处理时发生。 |
14 |
Audit Login |
在用户成功登录到 SQL Server 时发生。 |
15 |
Audit Logout |
在用户从 SQL Server 注销时发生。 |
16 |
Attention |
在发生需要关注的事件(如客户端中断请求或客户端连接中断)时发生。 |
17 |
ExistingConnection |
检测在启动跟踪前连接到 SQL Server 的用户的所有活动。 |
18 |
Audit Server Starts and Stops |
在修改 SQL Server 服务状态时发生。 |
20 |
Audit Login Failed |
指示试图从客户端登录到 SQL Server 失败。 |
21 |
EventLog |
指示已将事件记录到 Windows 应用程序日志中。 |
22 |
ErrorLog |
指示已将错误事件记录到 SQL Server 错误日志中。 |
23 |
Lock:Released |
指示已释放某个资源(如页)的锁。 |
24 |
Lock:Acquired |
指示获取了某个资源(如数据页)的锁。 |
25 |
Lock:Deadlock |
指示两个并发事务由于试图获得对方事务拥有的资源的不兼容锁而发生了相互死锁。 |
26 |
Lock:Cancel |
指示已取消获取资源锁(例如,由于死锁)。 |
27 |
Lock:Timeout |
指示由于其他事务持有所需资源的阻塞锁而使对资源(例如页)锁的请求超时。 超时由 @@LOCK_TIMEOUT 函数确定,并可用 SET LOCK_TIMEOUT 语句设置。 |
28 |
Degree of Parallelism Event(7.0 插入) |
在执行 SELECT、INSERT 或 UPDATE 语句之前发生。 |
33 |
Exception |
指示 SQL Server 中出现了异常。 |
34 |
SP:CacheMiss |
指示未在过程缓存中找到某个存储过程。 |
35 |
SP:CacheInsert |
指示某个项被插入到过程缓存中。 |
36 |
SP:CacheRemove |
指示从过程缓存中删除了某个项。 |
37 |
SP:Recompile |
指示已重新编译存储过程。 |
38 |
SP:CacheHit |
指示在过程缓存中找到了存储过程。 |
40 |
SQL:StmtStarting |
在启动了 Transact-SQL 语句时发生。 |
41 |
SQL:StmtCompleted |
在完成了 Transact-SQL 语句时发生。 |
42 |
SP:Starting |
指示启动了存储过程。 |
43 |
SP:Completed |
指示完成了存储过程。 |
44 |
SP:StmtStarting |
指示已开始执行存储过程中的 Transact-SQL 语句。 |
45 |
SP:StmtCompleted |
指示存储过程中的 Transact-SQL 语句已执行完毕。 |
46 |
Object:Created |
指示 CREATE INDEX、CREATE TABLE 和 CREATE DATABASE 这样的语句已创建了一个对象。 |
47 |
Object:Deleted |
指示已在 DROP INDEX 和 DROP TABLE 这样的语句中删除了对象。 |
50 |
SQL Transaction |
跟踪 Transact-SQL BEGIN、COMMIT、SAVE 和 ROLLBACK TRANSACTION 语句。 |
51 |
Scan:Started |
指示启动了表或索引扫描 |
52 |
Scan:Stopped |
指示停止了表或索引扫描。 |
53 |
CursorOpen |
指示 ODBC、OLE DB 或 DB-Library 在 Transact-SQL 语句中打开了一个游标。 |
54 |
TransactionLog |
将事务写入事务日志时进行跟踪。 |
55 |
Hash Warning |
指示未在缓冲分区进行的某一哈希操作(例如,哈希联接、哈希聚合、哈希 union 运算、哈希非重复)已恢复为替换计划。 发生此事件的原因可能是递归深度、数据扭曲、跟踪标记或位计数。 |
58 |
Auto Stats |
指示发生了自动更新索引统计信息。 |
59 |
Lock:Deadlock Chain |
为导致死锁的每个事件而生成。 |
60 |
Lock:Escalation |
指示较细粒度的锁转换成了较粗粒度的锁(例如,页锁升级或转换为 TABLE 或 HoBT 锁)。 |
61 |
OLE DB Errors |
指示发生了 OLE DB 错误。 |
67 |
Execution Warnings |
指示在执行 SQL Server 语句或存储过程期间发生的任何警告。 |
68 |
Showplan Text (Unencoded) |
显示所执行 Transact-SQL 语句的计划树。 |
69 |
Sort Warnings |
指示不适合内存的排序操作。 不包括与创建索引有关的排序操作;只包括某查询内的排序操作(如 SELECT 语句中使用的 ORDER BY 子句)。 |
70 |
CursorPrepare |
指示已准备了 ODBC、OLE DB 或 DB-Library 用于 Transact-SQL 语句的游标。 |
71 |
Prepare SQL |
ODBC、OLE DB 或 DB-Library 已准备好了一个或多个要使用的 Transact-SQL 语句。 |
72 |
Exec Prepared SQL |
ODBC、OLE DB 或 DB-Library 已执行了一个或多个准备好的 Transact-SQL 语句。 |
73 |
Unprepare SQL |
ODBC、OLE DB 或 DB-Library 已撤消(删除)了一个或多个准备好的 Transact-SQL 语句。 |
74 |
CursorExecute |
执行了先前由 ODBC、OLE DB 或 DB-Library 为 Transact-SQL 语句准备的游标。 |
75 |
CursorRecompile |
由 ODBC 或 DB-Library 为 Transact-SQL 语句打开的游标已直接重新编译或由于架构更改而重新编译。 为 ANSI 和非 ANSI 游标触发。 |
76 |
CursorImplicitConversion |
SQL Server 将 Transact-SQL 语句的游标从一种类型转换为另一种类型。 为 ANSI 和非 ANSI 游标触发。 |
77 |
CursorUnprepare |
ODBC、OLE DB 或 DB-Library 撤消(删除)了准备好的 Transact-SQL 语句的游标。 |
78 |
CursorClose |
关闭了先前由 ODBC、OLE DB 或 DB-Library 为 Transact-SQL 语句打开的游标。 |
79 |
Missing Column Statistics |
可能曾经对优化器有用的列统计信息不可用。 |
80 |
Missing Join Predicate |
正在执行没有联接谓词的查询。 这可能导致长时间运行查询。 |
81 |
Server Memory Change |
SQL Server 内存的使用量已增加或减少了 1 MB 或大服务器内存的 5%(两者中较大者)。 |
82-91 |
User Configurable (0-9) |
用户定义的事件数据。 |
92 |
Data File Auto Grow |
指示服务器已自动扩展了数据文件。 |
93 |
Log File Auto Grow |
指示服务器已自动扩展了日志文件。 |
94 |
Data File Auto Shrink |
指示服务器已自动收缩了数据文件。 |
95 |
Log File Auto Shrink |
指示服务器已自动收缩了日志文件。 |
96 |
Showplan Text |
显示来自查询优化器的 SQL 语句的查询计划树。 请注意,TextData 列不包含此事件的显示计划。 |
97 |
Showplan All |
显示查询计划,并显示已执行的 SQL 语句的完整编译时详细信息。 请注意,TextData 列不包含此事件的显示计划。 |
98 |
Showplan Statistics Profile |
显示查询计划,并显示已执行的 SQL 语句的完整运行时详细信息。 请注意,TextData 列不包含此事件的显示计划。 |
100 |
RPC Output Parameter |
生成每个 RPC 的参数的输出值。 |
108 |
Audit Add Login to Server Role Event |
在从固定服务器角色添加或删除登录时发生;针对 sp_addsrvrolemember 和 sp_dropsrvrolemember。 |
112 |
Audit App Role Change Password Event |
在更改应用程序角色的密码时发生。 |
113 |
Audit Statement Permission Event |
在使用语句权限(如 CREATE TABLE)时发生。 |
114 |
Audit Schema Object Access Event |
在成功或未成功使用了对象权限(如 SELECT)时发生。 |
115 |
Audit Backup/Restore Event |
在发出 BACKUP 或 RESTORE 命令时发生。 |
116 |
Audit DBCC Event |
在发出 DBCC 命令时发生。 |
117 |
Audit Change Audit Event |
在修改审核跟踪时发生。 |
118 |
Audit Object Derived Permission Event |
在发出 CREATE、ALTER 和 DROP 对象命令时发生。 |
119 |
OLEDB Call Event |
为分布式查询和远程存储过程调用 OLE DB 访问接口时发生。 |
120 |
OLEDB QueryInterface Event |
为分布式查询和远程存储过程调用 OLE DB QueryInterface 时发生。 |
121 |
OLEDB DataRead Event |
对 OLE DB 访问接口调用数据请求时发生。 |
122 |
Showplan XML |
在执行 SQL 语句时发生。 包括该事件可以标识 Showplan 运算符。 每个事件都存储在格式正确的 XML 文档中。 请注意,此事件的 Binary 列包含已编码的显示计划。 使用 SQL Server Profiler 可打开跟踪并查看显示计划。 |
123 |
SQL:FullTextQuery |
执行全文查询时发生。 |
124 |
Broker:Conversation |
报告 Service Broker 会话的进度。 |
125 |
Deprecation Announcement |
使用将从 SQL Server 的未来版本中删除的功能时发生。 |
126 |
Deprecation Final Support |
使用将从 SQL Server 的下一个主版本中删除的功能时发生。 |
127 |
Exchange Spill Event |
在 tempdb 数据库临时写入并行查询计划中的通信缓冲区时发生。 |
128 |
Audit Database Management Event |
创建、更改或删除数据库时发生。 |
129 |
Audit Database Object Management Event |
对数据库对象(如架构)执行 CREATE、ALTER 或 DROP 语句时发生。 |
130 |
Audit Database Principal Management Event |
创建、更改或删除数据库的主体(如用户)时发生。 |
131 |
Audit Schema Object Management Event |
创建、更改或删除服务器对象时发生。 |
132 |
Audit Server Principal Impersonation Event |
服务器范围中发生模拟(如 EXECUTE AS LOGIN)时发生。 |
133 |
Audit Database Principal Impersonation Event |
数据库范围中发生模拟(如 EXECUTE AS USER 或 SETUSER)时发生。 |
134 |
Audit Server Object Take Ownership Event |
服务器范围中的对象的所有者发生更改时发生。 |
135 |
Audit Database Object Take Ownership Event |
数据库范围中的对象的所有者发生更改时发生。 |
136 |
Broker:Conversation Group |
Service Broker 创建新的会话组或删除现有会话组时发生。 |
137 |
Blocked Process Report |
进程被阻塞的时间超过了指定的时间时发生。 不包括系统进程或正在等待未发现死锁的资源的进程。 请使用 sp_configure 来配置生成报表时的阈值和频率。 |
138 |
Broker:Connection |
报告 Service Broker 管理的传输连接的状态。 |
139 |
Broker:Forwarded Message Sent |
Service Broker 转发消息时发生。 |
140 |
Broker:Forwarded Message Dropped |
Service Broker 删除用于转发的消息时发生。 |
141 |
Broker:Message Classify |
Service Broker 确定消息的路由时发生。 |
142 |
Broker:Transmission |
指示在 Service Broker 传输层中发生了错误。 错误号和状态值指示了错误源。 |
143 |
Broker:Queue Disabled |
指示检测到有害消息,这是由于在 Service Broker 队列中有五个连续的事务回滚。 该事件包含数据库 ID 和包含有害消息的队列的队列 ID。 |
146 |
Showplan XML Statistics Profile |
在执行 SQL 语句时发生。 标识 Showplan 运算符,并显示完整的编译时数据。 请注意,此事件的 Binary 列包含已编码的显示计划。 使用 SQL Server Profiler 可打开跟踪并查看显示计划。 |
148 |
Deadlock Graph |
取消获取锁的尝试时发生,这是因为该尝试是死锁的一部分,并且被选为死锁牺牲品。 提供死锁的 XML 说明。 |
149 |
Broker:Remote Message Acknowledgement |
Service Broker 发送或收到消息确认时发生。 |
150 |
Trace File Close |
跟踪文件在回滚期间关闭时发生。 |
152 |
Audit Change Database Owner |
使用 ALTER AUTHORIZATION 更改数据库的所有者,并且检查执行该操作的权限时发生。 |
153 |
Audit Schema Object Take Ownership Event |
使用 ALTER AUTHORIZATION 来将所有者分配给对象,并且检查执行该操作的权限时发生。 |
155 |
FT:Crawl Started |
全文爬网(填充)开始时发生。 用于检查工作线程任务是否拾取了爬网请求。 |
156 |
FT:Crawl Stopped |
全文爬网(填充)停止时发生。 爬网成功完成或发生错误时停止。 |
157 |
FT:Crawl Aborted |
在全文爬网过程中遇到异常时发生。 通常导致全文爬网停止。 |
158 |
Audit Broker Conversation |
报告与 Service Broker 对话安全性相关的审核消息。 |
159 |
Audit Broker Login |
报告与 Service Broker 传输安全性相关的审核消息。 |
160 |
Broker:Message Undeliverable |
Service Broker 无法保留收到的消息时发生,该消息应当已传递给某个服务。 |
161 |
Broker:Corrupted Message |
Service Broker 收到损坏的消息时发生。 |
162 |
User Error Message |
显示出现错误或异常时用户看到的错误消息。 |
163 |
Broker:Activation |
队列监视器启动激活存储过程时,发送 QUEUE_ACTIVATION 通知时,或者队列监视器启动的激活存储过程退出时发生。 |
164 |
Object:Altered |
数据库对象更改时发生。 |
165 |
Performance statistics |
将经过编译的查询计划次缓存、重新编译或从计划缓存中删除时发生。 |
166 |
SQL:StmtRecompile |
发生语句级别的重新编译时发生。 |
167 |
Database Mirroring State Change |
镜像数据库的状态更改时发生。 |
168 |
Showplan XML For Query Compile |
编译 SQL 语句时发生。 显示完整的编译时数据。 请注意,此事件的 Binary 列包含已编码的显示计划。 使用 SQL Server Profiler 可打开跟踪并查看显示计划。 |
169 |
Showplan All For Query Compile |
编译 SQL 语句时发生。 显示完整的编译时数据。 用于标识 Showplan 运算符。 |
170 |
Audit Server Scope GDR Event |
指示在服务器范围中发生了权限的授予、拒绝或撤消事件(如创建登录)。 |
171 |
Audit Server Object GDR Event |
指示发生了对架构对象(如表或函数)的授予、拒绝或撤消事件。 |
172 |
Audit Database Object GDR Event |
指示发生了对数据库对象(如程序集和架构)的授予、拒绝或撤消事件。 |
173 |
Audit Server Operation Event |
使用了安全审核操作(如使用了更改设置、资源、外部访问或授权)时发生。 |
175 |
Audit Server Alter Trace Event |
检查语句的 ALTER TRACE 权限时发生。 |
176 |
Audit Server Object Management Event |
创建、更改或删除服务器对象时发生。 |
177 |
Audit Server Principal Management Event |
创建、更改或删除了服务器主体时发生。 |
178 |
Audit Database Operation Event |
发生数据库操作(如检查或订阅查询通知)时发生。 |
180 |
Audit Database Object Access Event |
访问数据库对象(如架构)时发生。 |
181 |
TM: Begin Tran starting |
BEGIN TRANSACTION 请求开始时发生。 |
182 |
TM: Begin Tran completed |
BEGIN TRANSACTION 请求完成时发生。 |
183 |
TM: Promote Tran starting |
PROMOTE TRANSACTION 请求开始时发生。 |
184 |
TM: Promote Tran completed |
PROMOTE TRANSACTION 请求完成时发生。 |
185 |
TM: Commit Tran starting |
COMMIT TRANSACTION 请求开始时发生。 |
186 |
TM: Commit Tran completed |
COMMIT TRANSACTION 请求完成时发生。 |
187 |
TM: Rollback Tran starting |
ROLLBACK TRANSACTION 请求开始时发生。 |
188 |
TM: Rollback Tran completed |
ROLLBACK TRANSACTION 请求完成时发生。 |
189 |
Lock:Timeout (timeout > 0) |
对资源(如页)的锁请求超时时发生。 |
190 |
Progress Report: Online Index Operation |
报告生成进程正在运行时,联机索引生成操作的进度。 |
191 |
TM: Save Tran starting |
SAVE TRANSACTION 请求开始时发生。 |
192 |
TM: Save Tran completed |
SAVE TRANSACTION 请求完成时发生。 |
193 |
Background Job Error |
后台作业不正常终止时发生。 |
194 |
OLEDB Provider Information |
分布式查询运行并收集对应于提供程序连接的信息时发生。 |
195 |
Mount Tape |
收到磁带装入请求时发生。 |
196 |
Assembly Load |
发生加载 CLR 程序集的请求时发生。 |
198 |
XQuery Static Type |
执行 XQuery 表达式时发生。 此事件类提供静态类型的 XQuery 表达式。 |
199 |
QN: subscription |
无法订阅查询注册时发生。 TextData 列包含事件的有关信息。 |
200 |
QN: parameter table |
有关活动订阅的信息存储在内部参数表中。 在创建或删除参数表时发生该事件类。 通常,重新启动数据库时将创建或删除这些表。 TextData 列包含事件的有关信息。 |
201 |
QN: template |
查询模板代表订阅查询的类。 通常,除参数值以外,相同类中的查询是相同的。 当新的订阅请求针对已存在的类 (Match)、新类 (Create) 或 Drop 类(指示清除没有活动订阅的查询类的模板)时,发生此事件类。 TextData 列包含事件的有关信息。 |
202 |
QN: dynamics |
跟踪查询通知的内部活动。 TextData 列包含事件的有关信息。 |
213 |
Database Suspect Data Page |
指示何时将某页添加到 msdb 的 suspect_pages 表。 |
214 |
CPU threshold exceeded |
指示资源调控器检测到查询超过 CPU 阈值 (REQUEST_MAX_CPU_TIME_SEC) 的时间。 |
215 |
指示 LOGON 触发器或资源调控器分类器函数开始执行的时间。 |
指示 LOGON 触发器或资源调控器分类器函数开始执行的时间。 |
216 |
PreConnect:Completed |
指示 LOGON 触发器或资源调控器分类器函数完成执行的时间。 |
217 |
Plan Guide Successful |
指示 SQL Server 已成功为计划指南中包含的查询或批处理生成执行计划。 |
218 |
Plan Guide Unsuccessful |
指示 SQL Server 无法为包含计划指南的查询或批处理生成执行计划。 SQL Server 尝试在不应用计划指南的情况下为此查询或批处理生成执行计划。 的计划指南可能是导致此问题的原因。 您可以通过使用 sys.fn_validate_plan_guide 系统函数验证该计划指南。 |
上述的跟踪事件中,基本包含了SQL Server中所能做的任何操作,我们可以根据自己需要进行定义,当我们可以针对日常经常遇到的一些问题进行定位,比如:死锁、等待、登录失败等等吧...当然也可以追踪某个人的所有行为,这里我们来定义几个来看看
我们定义追踪所有语句批量操作的追踪,从上面表我们可以查找到为12,13
exec sp_trace_setevent 2,12,1,1
exec sp_trace_setevent 2,13,1,1
通过如下存储过程,将我们自定的追踪启动
--设置跟踪状态以启动
exec sp_trace_setstatus @TraceID,1
至此,我们新建的追踪已经开始运行了,我们可以利用上面的方法,来查看我们生成的追踪文件了,其实大部分时候,我们都是利用此种方法设置好”圈套“,等待鱼儿上网
比如死锁查找,CPU消耗高,IO值高的那些语句....
我们可以利用如下语句,查找跟踪文件的信息
--查看跟踪文件以表显示
select * from ::fn_trace_gettable('F:\SQLTest\.trc',1)
将我们刚才的所有操作,已经追踪出来了。
通过如下命令进行跟踪的关闭
--设置跟踪状态以停止
exec sp_trace_setstatus @TraceID,0
通过如下命令进行跟踪的删除
--从系统中移除跟踪
exec sp_trace_setstatus @TraceID,2
我们知道在SQL Server默认的跟踪文件在实例重启时候,都会消失,所以我们可以通过如下方法解决,保证在每次实例重新启动的时候都会执行该追踪
--新建追踪的存储过程
use master
go
create proc StartBlackBoxTrace
as
begin
--默认开启追踪所有的SQL 执行语句,文件文件路径为默认
DECLARE @TraceID int
DECLARE @MaxFileSize bigint
SET @MaxFileSize=25
EXEC SP_TRACE_CREATE
@TraceID OUTPUT,
8,
NULL,
@MaxFileSize
EXEC SP_TRACE_SETSTATUS @TraceID,1
END
--将该存储过程设置为SQL Server服务启动时自动启动
EXEC sp_procoption
'StartBlackBoxTrace','STARTUP','ON'
GO
通过如下脚本删除到所有的跟踪
create proc [dbo].[Performance_Trace_StopAll]
AS
declare traceCursor cursor for
select id from sys.traces where id <> 1
open traceCursor
declare @curid int
fetch next from traceCursor
into @curid
while(@@fetch_status=0)
begin
exec sp_trace_setstatus @curid,0
exec sp_trace_setstatus @curid,2
fetch next from traceCursor into @curid
end
close traceCursor
deallocate traceCursor
设置或清除自动执行的存储过程。 每次启动 SQL Server 实例时,设置为自动执行的存储过程都会运行。
sp_procoption [ @ProcName = ] 'procedure'
, [ @OptionName = ] 'option'
, [ @OptionValue = ] 'value'
[ @ProcName = ] 'procedure'
要为其设置选项的过程的名称。 过程 为 nvarchar (776) ,没有默认值。
[ @OptionName = ] 'option'
要设置的选项的名称。 选项的唯一值是“启动”。
[ @OptionValue = ] 'value'
是将选项设置为 (true ,还是在) 或 关闭 (false 或 关闭) 。 值为varchar (12) ,没有默认值。
0(成功)或错误号(失败)
启动过程必须位于 master 数据库中,不能包含 INPUT 或 OUTPUT 参数。 所有数据库恢复后将开始执行存储过程,并在开始时记录“恢复已完成”消息。
要求具有 sysadmin 固定服务器角色的成员身份。
执行权限默认授予 sysadmin 固定服务器角色的成员。启动过程必须属于 master 数据库的所有者。
死锁案例(2014年11月23日晚补充)
这里我们来利用自己新建跟踪来跟踪一个死锁的发生过程,并且将其记录到我们的Trace文件中,这里我们来制作一个死锁
以上代码参照院子里大牛宋沄剑,这里我们利用系统的自带的profile进行设计追踪,我们直接选择系统自带的死锁模板,进行追踪
然后设置,默认的SPID为大于等于50,小于50的为系统自有事件
然后,我们利用上面的死锁脚本,运行获取死锁的捕捉
可以看到,我们已经顺利的追踪到这个死锁。我们知道这种追踪是高成本的,并且我们有时候不知道死锁发生的具体时间,所以不能一直开着这个Profile,出于性能考虑也不建议这么做,所以我们采用新建的Trace文件,来保存改脚本,然后重定向到我们自己的文件夹,将死锁的信息放置到该文件夹下,提供更大灵活性。
SQL Server本身自带的Profile工具就提供编辑脚本的功能,我们将上面的设计,导出成Trace脚本,我们点击“文件”,导出该设计脚本
将该脚本保存到一个位置,然后我们打开,我顺便将默认的文件路径添加上
/****************************************************/
/* Created by: SQL Server 2008 Profiler */
/* Date: 2014/11/23 20:28:11 */
/****************************************************/
-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
--可以更改文件大小
set @maxfilesize = 5
--默认死锁文件放置目录
declare @FilePath nvarchar(max)
set @FilePath=N'F:\SQLTest\DeadLock.trc'
-- 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, @FilePath, @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, 137, 15, @on
exec sp_trace_setevent @TraceID, 137, 32, @on
exec sp_trace_setevent @TraceID, 137, 1, @on
exec sp_trace_setevent @TraceID, 137, 13, @on
exec sp_trace_setevent @TraceID, 137, 22, @on
exec sp_trace_setevent @TraceID, 148, 11, @on
exec sp_trace_setevent @TraceID, 148, 12, @on
exec sp_trace_setevent @TraceID, 148, 14, @on
exec sp_trace_setevent @TraceID, 148, 1, @on
exec sp_trace_setevent @TraceID, 26, 15, @on
exec sp_trace_setevent @TraceID, 26, 32, @on
exec sp_trace_setevent @TraceID, 26, 1, @on
exec sp_trace_setevent @TraceID, 26, 9, @on
exec sp_trace_setevent @TraceID, 26, 57, @on
exec sp_trace_setevent @TraceID, 26, 2, @on
exec sp_trace_setevent @TraceID, 26, 10, @on
exec sp_trace_setevent @TraceID, 26, 11, @on
exec sp_trace_setevent @TraceID, 26, 35, @on
exec sp_trace_setevent @TraceID, 26, 12, @on
exec sp_trace_setevent @TraceID, 26, 13, @on
exec sp_trace_setevent @TraceID, 26, 6, @on
exec sp_trace_setevent @TraceID, 26, 14, @on
exec sp_trace_setevent @TraceID, 26, 22, @on
exec sp_trace_setevent @TraceID, 25, 15, @on
exec sp_trace_setevent @TraceID, 25, 32, @on
exec sp_trace_setevent @TraceID, 25, 1, @on
exec sp_trace_setevent @TraceID, 25, 9, @on
exec sp_trace_setevent @TraceID, 25, 57, @on
exec sp_trace_setevent @TraceID, 25, 2, @on
exec sp_trace_setevent @TraceID, 25, 10, @on
exec sp_trace_setevent @TraceID, 25, 11, @on
exec sp_trace_setevent @TraceID, 25, 35, @on
exec sp_trace_setevent @TraceID, 25, 12, @on
exec sp_trace_setevent @TraceID, 25, 13, @on
exec sp_trace_setevent @TraceID, 25, 6, @on
exec sp_trace_setevent @TraceID, 25, 14, @on
exec sp_trace_setevent @TraceID, 25, 22, @on
exec sp_trace_setevent @TraceID, 59, 32, @on
exec sp_trace_setevent @TraceID, 59, 1, @on
exec sp_trace_setevent @TraceID, 59, 57, @on
exec sp_trace_setevent @TraceID, 59, 2, @on
exec sp_trace_setevent @TraceID, 59, 14, @on
exec sp_trace_setevent @TraceID, 59, 22, @on
exec sp_trace_setevent @TraceID, 59, 35, @on
exec sp_trace_setevent @TraceID, 59, 12, @on
exec sp_trace_setevent @TraceID, 60, 32, @on
exec sp_trace_setevent @TraceID, 60, 9, @on
exec sp_trace_setevent @TraceID, 60, 57, @on
exec sp_trace_setevent @TraceID, 60, 10, @on
exec sp_trace_setevent @TraceID, 60, 11, @on
exec sp_trace_setevent @TraceID, 60, 35, @on
exec sp_trace_setevent @TraceID, 60, 12, @on
exec sp_trace_setevent @TraceID, 60, 6, @on
exec sp_trace_setevent @TraceID, 60, 14, @on
exec sp_trace_setevent @TraceID, 60, 22, @on
exec sp_trace_setevent @TraceID, 189, 15, @on
exec sp_trace_setevent @TraceID, 189, 32, @on
exec sp_trace_setevent @TraceID, 189, 1, @on
exec sp_trace_setevent @TraceID, 189, 9, @on
exec sp_trace_setevent @TraceID, 189, 57, @on
exec sp_trace_setevent @TraceID, 189, 2, @on
exec sp_trace_setevent @TraceID, 189, 10, @on
exec sp_trace_setevent @TraceID, 189, 11, @on
exec sp_trace_setevent @TraceID, 189, 35, @on
exec sp_trace_setevent @TraceID, 189, 12, @on
exec sp_trace_setevent @TraceID, 189, 13, @on
exec sp_trace_setevent @TraceID, 189, 6, @on
exec sp_trace_setevent @TraceID, 189, 14, @on
exec sp_trace_setevent @TraceID, 189, 22, @on
exec sp_trace_setevent @TraceID, 45, 16, @on
exec sp_trace_setevent @TraceID, 45, 1, @on
exec sp_trace_setevent @TraceID, 45, 9, @on
exec sp_trace_setevent @TraceID, 45, 17, @on
exec sp_trace_setevent @TraceID, 45, 10, @on
exec sp_trace_setevent @TraceID, 45, 18, @on
exec sp_trace_setevent @TraceID, 45, 11, @on
exec sp_trace_setevent @TraceID, 45, 35, @on
exec sp_trace_setevent @TraceID, 45, 12, @on
exec sp_trace_setevent @TraceID, 45, 13, @on
exec sp_trace_setevent @TraceID, 45, 6, @on
exec sp_trace_setevent @TraceID, 45, 14, @on
exec sp_trace_setevent @TraceID, 45, 22, @on
exec sp_trace_setevent @TraceID, 45, 15, @on
exec sp_trace_setevent @TraceID, 44, 1, @on
exec sp_trace_setevent @TraceID, 44, 9, @on
exec sp_trace_setevent @TraceID, 44, 10, @on
exec sp_trace_setevent @TraceID, 44, 11, @on
exec sp_trace_setevent @TraceID, 44, 35, @on
exec sp_trace_setevent @TraceID, 44, 12, @on
exec sp_trace_setevent @TraceID, 44, 6, @on
exec sp_trace_setevent @TraceID, 44, 14, @on
exec sp_trace_setevent @TraceID, 44, 22, @on
exec sp_trace_setevent @TraceID, 41, 15, @on
exec sp_trace_setevent @TraceID, 41, 16, @on
exec sp_trace_setevent @TraceID, 41, 1, @on
exec sp_trace_setevent @TraceID, 41, 9, @on
exec sp_trace_setevent @TraceID, 41, 17, @on
exec sp_trace_setevent @TraceID, 41, 10, @on
exec sp_trace_setevent @TraceID, 41, 18, @on
exec sp_trace_setevent @TraceID, 41, 11, @on
exec sp_trace_setevent @TraceID, 41, 35, @on
exec sp_trace_setevent @TraceID, 41, 12, @on
exec sp_trace_setevent @TraceID, 41, 13, @on
exec sp_trace_setevent @TraceID, 41, 6, @on
exec sp_trace_setevent @TraceID, 41, 14, @on
exec sp_trace_setevent @TraceID, 40, 1, @on
exec sp_trace_setevent @TraceID, 40, 9, @on
exec sp_trace_setevent @TraceID, 40, 6, @on
exec sp_trace_setevent @TraceID, 40, 10, @on
exec sp_trace_setevent @TraceID, 40, 14, @on
exec sp_trace_setevent @TraceID, 40, 11, @on
exec sp_trace_setevent @TraceID, 40, 35, @on
exec sp_trace_setevent @TraceID, 40, 12, @on
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - efbc9d24-69cd-465f-8daf-e38493da0332'
-- 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
我们只需要将这个脚本运行就可以,当然此段脚本,在实例重启的时候,所有的trace都会删除掉,可以将该段代码改成存储过程,然后设置成实例启动的时候运行,
方法参考本篇的上半部分。
当然我们也可以设置别的参数,比如启动时间,运行时间,跟踪文件大小,位置,数量等,删除不必要的trace跟踪事件...
当运行到一段时间之后,我们直接拷贝下来,找台电脑分析就可以了。
更灵活的方式是采取非业务高峰期,利用SQL Server自带的邮件提醒功能,直接检测出问题,然后Send Email....
SQL Server中黑匣子(2014年11月28日晚补充)
黑匣子作为飞机出现事故后的追踪利器,在微软的SQL Server这个数据库中默认也给装上了此引擎,但是没有开启,此功能可能帮助我们诊断间歇性的服务器崩溃。它比我们上面介绍的默认开启的跟踪跟踪的信息更全,跟踪更大一些。
其内容包含了:“SP:启动”、“SQL:批处理启动”、异常和注意等事件
这个跟踪通过在sp_trace_create的默认@option参数设置为8来配置的。代码如下:
DECLARE @Traced INT
EXEC sp_trace_create
@Traced OUTPUT,
@options=8
EXEC sp_trace_setstatus @Traced,1
通过以上的配置会自动配置成两个滚动文件,当达到默认的最大文件容量5MB的时候,就在两个文件中循环滚动依次更新。
当然如果感觉生成的文件5MB有点小,可以手动配置更改大小,或者自定义文件路径,这些都是允许自定义设置的。
DECLARE @TraceID INT
DECLARE @maxfilesize BIGINT
SET @maxfilesize=25
DECLARE @tracefile nvarchar(245)
SET @tracefile=N'F:\SQLTest\TRACE\MYTRACE.trc'
EXEC sp_trace_create
@TraceID OUTPUT,
@options=8,
@tracefile=NULL,
@maxfilesize=@maxfilesize
EXEC sp_trace_setstatus @TraceID,1
此方法能将数据库执行的所有SQL滚动记录下来,以防止SQL Server宕机之后的事故查找。
参考我博文的上面介绍,只需要将这个方法存储于存储过程,然后设置成实例启动后运行,那么恭喜你的SQL Server已经成功装上了黑匣子引擎,假如有一天突然宕机,我们只需要打开此黑匣子就可以。
--【第一步】查看日志配置
--*注意:为了保证查看日志路径有效,先执行下面的SQL,查看日志路径
select * from sys.traces
--查看【系统】日志信息
SELECT *
FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL11.SQL12\MSSQL\Log\log_188.trc', DEFAULT)
order by StartTime desc
SELECT
TextData as '[TextData]信息'
,LoginName as '[LoginName]客户端的 SQL Server 登录名'
,SessionLoginName as '[SessionLoginName]发起会话的用户的登录名'
,DatabaseName as '[DatabaseName]数据库名称'
,ApplicationName as '[ApplicationName]客户端应用程序的名称'
,StartTime as '[StartTime]事件开始的时间'
,EndTime as '[EndTime]事件结束的时间'
,Success as '[Success]1=成功0=失败'
,ServerName as '[ServerName]实例的名称'
,[State] as '[State]状态'
,DatabaseID as '[DatabaseID]对象源所在数据库的 ID'
,HostName as '[HostName]发起请求的客户机的名称'
,ClientProcessID as '[ClientProcessID]客户端进程的 ID'
,SPID as '[SPID]服务器进程 ID'
,EventSubClass as '[EventSubClass]事件子类的类型'
,[EventClass] as '[EventClass]被记录的事件类的类型'
,Error as '[Error]错误号'
,RequestID as '[RequestID]包含该语句的请求的 ID'
,EventSequence as '[EventSequence]事件的序列号'
,[Type] as '[Type]事件类相关'
FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL11.SQL12\MSSQL\Log\log_188.trc', DEFAULT)
where DatabaseID=1
order by StartTime desc
联机丛书2012
sp_trace_setevent (Transact-SQL) | Microsoft Learn
[ @eventid= ] event_id
要打开的事件的 ID。 event_id 的数据类型为 int,无默认值。
下表列出了可以在跟踪中添加或删除的事件。
事件号 |
事件名称 |
说明 |
---|---|---|
0-9 |
保留 |
保留 |
10 |
RPC:Completed |
在完成了远程过程调用 (RPC) 时发生。 |
11 |
RPC:Starting |
在启动了 RPC 时发生。 |
12 |
SQL:BatchCompleted |
在完成了 Transact-SQL 批处理时发生。 |
13 |
SQL:BatchStarting |
在启动了 Transact-SQL 批处理时发生。 |
14 |
Audit Login |
在用户成功登录到 SQL Server 时发生。 |
15 |
Audit Logout |
在用户从 SQL Server 注销时发生。 |
16 |
Attention |
在发生需要关注的事件(如客户端中断请求或客户端连接中断)时发生。 |
17 |
ExistingConnection |
检测在启动跟踪前连接到 SQL Server 的用户的所有活动。 |
18 |
Audit Server Starts and Stops |
在修改 SQL Server 服务状态时发生。 |
19 |
DTCTransaction |
跟踪 Microsoft 分布式事务处理协调器 (MS DTC) 在两个或更多的数据库之间协调的事务。 |
20 |
Audit Login Failed |
指示试图从客户端登录到 SQL Server 失败。 |
21 |
EventLog |
指示已将事件记录到 Windows 应用程序日志中。 |
22 |
ErrorLog |
指示已将错误事件记录到 SQL Server 错误日志中。 |
23 |
Lock:Released |
指示已释放某个资源(如页)的锁。 |
24 |
Lock:Acquired |
指示获取了某个资源(如数据页)的锁。 |
25 |
Lock:Deadlock |
指示两个并发事务由于试图获得对方事务拥有的资源的不兼容锁而发生了相互死锁。 |
26 |
Lock:Cancel |
指示已取消获取资源锁(例如,由于死锁)。 |
27 |
Lock:Timeout |
指示由于其他事务持有所需资源的阻塞锁而使对资源(例如页)锁的请求超时。 超时由 @@LOCK_TIMEOUT 函数确定,并可用 SET LOCK_TIMEOUT 语句设置。 |
28 |
Degree of Parallelism Event(7.0 插入) |
在执行 SELECT、INSERT 或 UPDATE 语句之前发生。 |
29-31 |
保留 |
改用事件 28。 |
32 |
保留 |
保留 |
33 |
Exception |
指示 SQL Server 中出现了异常。 |
34 |
SP:CacheMiss |
指示未在过程缓存中找到某个存储过程。 |
35 |
SP:CacheInsert |
指示某个项被插入到过程缓存中。 |
36 |
SP:CacheRemove |
指示从过程缓存中删除了某个项。 |
37 |
SP:Recompile |
指示已重新编译存储过程。 |
38 |
SP:CacheHit |
指示在过程缓存中找到了存储过程。 |
39 |
不推荐使用 |
不推荐使用 |
40 |
SQL:StmtStarting |
在启动了 Transact-SQL 语句时发生。 |
41 |
SQL:StmtCompleted |
在完成了 Transact-SQL 语句时发生。 |
42 |
SP:Starting |
指示启动了存储过程。 |
43 |
SP:Completed |
指示完成了存储过程。 |
44 |
SP:StmtStarting |
指示已开始执行存储过程中的 Transact-SQL 语句。 |
45 |
SP:StmtCompleted |
指示存储过程中的 Transact-SQL 语句已执行完毕。 |
46 |
Object:Created |
指示 CREATE INDEX、CREATE TABLE 和 CREATE DATABASE 这样的语句已创建了一个对象。 |
47 |
Object:Deleted |
指示已在 DROP INDEX 和 DROP TABLE 这样的语句中删除了对象。 |
48 |
保留 |
|
49 |
保留 |
|
50 |
SQL Transaction |
跟踪 Transact-SQL BEGIN、COMMIT、SAVE 和 ROLLBACK TRANSACTION 语句。 |
51 |
Scan:Started |
指示启动了表或索引扫描 |
52 |
Scan:Stopped |
指示停止了表或索引扫描。 |
53 |
CursorOpen |
指示 ODBC、OLE DB 或 DB-Library 在 Transact-SQL 语句中打开了一个游标。 |
54 |
TransactionLog |
将事务写入事务日志时进行跟踪。 |
55 |
Hash Warning |
指示未在缓冲分区进行的某一哈希操作(例如,哈希联接、哈希聚合、哈希 union 运算、哈希非重复)已恢复为替换计划。 发生此事件的原因可能是递归深度、数据扭曲、跟踪标记或位计数。 |
56-57 |
保留 |
|
58 |
Auto Stats |
指示发生了自动更新索引统计信息。 |
59 |
Lock:Deadlock Chain |
为导致死锁的每个事件而生成。 |
60 |
Lock:Escalation |
指示较细粒度的锁转换成了较粗粒度的锁(例如,页锁升级或转换为 TABLE 或 HoBT 锁)。 |
61 |
OLE DB Errors |
指示发生了 OLE DB 错误。 |
62-66 |
保留 |
|
67 |
Execution Warnings |
指示在执行 SQL Server 语句或存储过程期间发生的任何警告。 |
68 |
Showplan Text (Unencoded) |
显示所执行 Transact-SQL 语句的计划树。 |
69 |
Sort Warnings |
指示不适合内存的排序操作。 不包括与创建索引有关的排序操作;只包括某查询内的排序操作(如 SELECT 语句中使用的 ORDER BY 子句)。 |
70 |
CursorPrepare |
指示已准备了 ODBC、OLE DB 或 DB-Library 用于 Transact-SQL 语句的游标。 |
71 |
Prepare SQL |
ODBC、OLE DB 或 DB-Library 已准备好了一个或多个要使用的 Transact-SQL 语句。 |
72 |
Exec Prepared SQL |
ODBC、OLE DB 或 DB-Library 已执行了一个或多个准备好的 Transact-SQL 语句。 |
73 |
Unprepare SQL |
ODBC、OLE DB 或 DB-Library 已撤消(删除)了一个或多个准备好的 Transact-SQL 语句。 |
74 |
CursorExecute |
执行了先前由 ODBC、OLE DB 或 DB-Library 为 Transact-SQL 语句准备的游标。 |
75 |
CursorRecompile |
由 ODBC 或 DB-Library 为 Transact-SQL 语句打开的游标已直接重新编译或由于架构更改而重新编译。 为 ANSI 和非 ANSI 游标触发。 |
76 |
CursorImplicitConversion |
SQL Server 将 Transact-SQL 语句的游标从一种类型转换为另一种类型。 为 ANSI 和非 ANSI 游标触发。 |
77 |
CursorUnprepare |
ODBC、OLE DB 或 DB-Library 撤消(删除)了准备好的 Transact-SQL 语句的游标。 |
78 |
CursorClose |
关闭了先前由 ODBC、OLE DB 或 DB-Library 为 Transact-SQL 语句打开的游标。 |
79 |
Missing Column Statistics |
可能曾经对优化器有用的列统计信息不可用。 |
80 |
Missing Join Predicate |
正在执行没有联接谓词的查询。 这可能导致长时间运行查询。 |
81 |
Server Memory Change |
SQL Server 内存的使用量已增加或减少了 1 MB 或最大服务器内存的 5%(两者中较大者)。 |
82-91 |
User Configurable (0-9) |
用户定义的事件数据。 |
92 |
Data File Auto Grow |
指示服务器已自动扩展了数据文件。 |
93 |
Log File Auto Grow |
指示服务器已自动扩展了日志文件。 |
94 |
Data File Auto Shrink |
指示服务器已自动收缩了数据文件。 |
95 |
Log File Auto Shrink |
指示服务器已自动收缩了日志文件。 |
96 |
Showplan Text |
显示来自查询优化器的 SQL 语句的查询计划树。 请注意,TextData 列不包含此事件的显示计划。 |
97 |
Showplan All |
显示查询计划,并显示已执行的 SQL 语句的完整编译时详细信息。 请注意,TextData 列不包含此事件的显示计划。 |
98 |
Showplan Statistics Profile |
显示查询计划,并显示已执行的 SQL 语句的完整运行时详细信息。 请注意,TextData 列不包含此事件的显示计划。 |
99 |
保留 |
|
100 |
RPC Output Parameter |
生成每个 RPC 的参数的输出值。 |
101 |
保留 |
|
102 |
Audit Database Scope GDR |
SQL Server 中的任何用户每次对语句权限发出 GRANT、DENY、REVOKE 时发生(仅适用于数据库操作,例如授予对数据库的权限)。 |
103 |
Audit Object GDR Event |
SQL Server 中的任何用户每次对对象权限发出 GRANT、DENY、REVOKE 时发生。 |
104 |
Audit AddLogin Event |
添加或删除 SQL Server 登录名时发生;针对 sp_addlogin 和 sp_droplogin。 |
105 |
Audit Login GDR Event |
在添加或删除 Windows 登录权限时发生;针对 sp_grantlogin、sp_revokelogin 和 sp_denylogin。 |
106 |
Audit Login Change Property Event |
在修改除密码以外的登录属性时发生;针对 sp_defaultdb 和 sp_defaultlanguage。 |
107 |
Audit Login Change Password Event |
在更改 SQL Server 登录密码时发生。 不记录密码。 |
108 |
Audit Add Login to Server Role Event |
在从固定服务器角色添加或删除登录时发生;针对 sp_addsrvrolemember 和 sp_dropsrvrolemember。 |
109 |
Audit Add DB User Event |
在添加或删除作为某个数据库的数据库用户(Windows 或 SQL Server)的登录名时发生;针对 sp_grantdbaccess、sp_revokedbaccess、sp_adduser 和 sp_dropuser。 |
110 |
Audit Add Member to DB Role Event |
在将某个登录名作为数据库用户(固定或用户定义)添加到数据库或从中删除时发生;针对 sp_addrolemember、sp_droprolemember 和 sp_changegroup。 |
111 |
Audit Add Role Event |
在将登录名作为数据库用户添加到数据库或从中删除时发生;针对 sp_addrole 和 sp_droprole。 |
112 |
Audit App Role Change Password Event |
在更改应用程序角色的密码时发生。 |
113 |
Audit Statement Permission Event |
在使用语句权限(如 CREATE TABLE)时发生。 |
114 |
Audit Schema Object Access Event |
在成功或未成功使用了对象权限(如 SELECT)时发生。 |
115 |
Audit Backup/Restore Event |
在发出 BACKUP 或 RESTORE 命令时发生。 |
116 |
Audit DBCC Event |
在发出 DBCC 命令时发生。 |
117 |
Audit Change Audit Event |
在修改审核跟踪时发生。 |
118 |
Audit Object Derived Permission Event |
在发出 CREATE、ALTER 和 DROP 对象命令时发生。 |
119 |
OLEDB Call Event |
为分布式查询和远程存储过程调用 OLE DB 访问接口时发生。 |
120 |
OLEDB QueryInterface Event |
为分布式查询和远程存储过程调用 OLE DB QueryInterface 时发生。 |
121 |
OLEDB DataRead Event |
对 OLE DB 访问接口调用数据请求时发生。 |
122 |
Showplan XML |
在执行 SQL 语句时发生。 包括该事件可以标识 Showplan 运算符。 每个事件都存储在格式正确的 XML 文档中。 请注意,此事件的 Binary 列包含已编码的显示计划。 使用 SQL Server Profiler 可打开跟踪并查看显示计划。 |
123 |
SQL:FullTextQuery |
执行全文查询时发生。 |
124 |
Broker:Conversation |
报告 Service Broker 会话的进度。 |
125 |
Deprecation Announcement |
使用将从 SQL Server 的未来版本中删除的功能时发生。 |
126 |
Deprecation Final Support |
使用将从 SQL Server 的下一个主版本中删除的功能时发生。 |
127 |
Exchange Spill Event |
在 tempdb 数据库临时写入并行查询计划中的通信缓冲区时发生。 |
128 |
Audit Database Management Event |
创建、更改或删除数据库时发生。 |
129 |
Audit Database Object Management Event |
对数据库对象(如架构)执行 CREATE、ALTER 或 DROP 语句时发生。 |
130 |
Audit Database Principal Management Event |
创建、更改或删除数据库的主体(如用户)时发生。 |
131 |
Audit Schema Object Management Event |
创建、更改或删除服务器对象时发生。 |
132 |
Audit Server Principal Impersonation Event |
服务器范围中发生模拟(如 EXECUTE AS LOGIN)时发生。 |
133 |
Audit Database Principal Impersonation Event |
数据库范围中发生模拟(如 EXECUTE AS USER 或 SETUSER)时发生。 |
134 |
Audit Server Object Take Ownership Event |
服务器范围中的对象的所有者发生更改时发生。 |
135 |
Audit Database Object Take Ownership Event |
数据库范围中的对象的所有者发生更改时发生。 |
136 |
Broker:Conversation Group |
Service Broker 创建新的会话组或删除现有会话组时发生。 |
137 |
Blocked Process Report |
进程被阻塞的时间超过了指定的时间时发生。 不包括系统进程或正在等待未发现死锁的资源的进程。 请使用 sp_configure 来配置生成报表时的阈值和频率。 |
138 |
Broker:Connection |
报告 Service Broker 管理的传输连接的状态。 |
139 |
Broker:Forwarded Message Sent |
Service Broker 转发消息时发生。 |
140 |
Broker:Forwarded Message Dropped |
Service Broker 删除用于转发的消息时发生。 |
141 |
Broker:Message Classify |
Service Broker 确定消息的路由时发生。 |
142 |
Broker:Transmission |
指示在 Service Broker 传输层中发生了错误。 错误号和状态值指示了错误源。 |
143 |
Broker:Queue Disabled |
指示检测到有害消息,这是由于在 Service Broker 队列中有五个连续的事务回滚。 该事件包含数据库 ID 和包含有害消息的队列的队列 ID。 |
144-145 |
保留 |
|
146 |
Showplan XML Statistics Profile |
在执行 SQL 语句时发生。 标识 Showplan 运算符,并显示完整的编译时数据。 请注意,此事件的 Binary 列包含已编码的显示计划。 使用 SQL Server Profiler 可打开跟踪并查看显示计划。 |
148 |
Deadlock Graph |
取消获取锁的尝试时发生,这是因为该尝试是死锁的一部分,并且被选为死锁牺牲品。 提供死锁的 XML 说明。 |
149 |
Broker:Remote Message Acknowledgement |
Service Broker 发送或收到消息确认时发生。 |
150 |
Trace File Close |
跟踪文件在回滚期间关闭时发生。 |
151 |
保留 |
|
152 |
Audit Change Database Owner |
使用 ALTER AUTHORIZATION 更改数据库的所有者,并且检查执行该操作的权限时发生。 |
153 |
Audit Schema Object Take Ownership Event |
使用 ALTER AUTHORIZATION 来将所有者分配给对象,并且检查执行该操作的权限时发生。 |
154 |
保留 |
|
155 |
FT:Crawl Started |
全文爬网(填充)开始时发生。 用于检查工作线程任务是否拾取了爬网请求。 |
156 |
FT:Crawl Stopped |
全文爬网(填充)停止时发生。 爬网成功完成或发生错误时停止。 |
157 |
FT:Crawl Aborted |
在全文爬网过程中遇到异常时发生。 通常导致全文爬网停止。 |
158 |
Audit Broker Conversation |
报告与 Service Broker 对话安全性相关的审核消息。 |
159 |
Audit Broker Login |
报告与 Service Broker 传输安全性相关的审核消息。 |
160 |
Broker:Message Undeliverable |
Service Broker 无法保留收到的消息时发生,该消息应当已传递给某个服务。 |
161 |
Broker:Corrupted Message |
Service Broker 收到损坏的消息时发生。 |
162 |
User Error Message |
显示出现错误或异常时用户看到的错误消息。 |
163 |
Broker:Activation |
队列监视器启动激活存储过程时,发送 QUEUE_ACTIVATION 通知时,或者队列监视器启动的激活存储过程退出时发生。 |
164 |
Object:Altered |
数据库对象更改时发生。 |
165 |
Performance statistics |
将经过编译的查询计划第一次缓存、重新编译或从计划缓存中删除时发生。 |
166 |
SQL:StmtRecompile |
发生语句级别的重新编译时发生。 |
167 |
Database Mirroring State Change |
镜像数据库的状态更改时发生。 |
168 |
Showplan XML For Query Compile |
编译 SQL 语句时发生。 显示完整的编译时数据。 请注意,此事件的 Binary 列包含已编码的显示计划。 使用 SQL Server Profiler 可打开跟踪并查看显示计划。 |
169 |
Showplan All For Query Compile |
编译 SQL 语句时发生。 显示完整的编译时数据。 用于标识 Showplan 运算符。 |
170 |
Audit Server Scope GDR Event |
指示在服务器范围中发生了权限的授予、拒绝或撤消事件(如创建登录)。 |
171 |
Audit Server Object GDR Event |
指示发生了对架构对象(如表或函数)的授予、拒绝或撤消事件。 |
172 |
Audit Database Object GDR Event |
指示发生了对数据库对象(如程序集和架构)的授予、拒绝或撤消事件。 |
173 |
Audit Server Operation Event |
使用了安全审核操作(如使用了更改设置、资源、外部访问或授权)时发生。 |
175 |
Audit Server Alter Trace Event |
检查语句的 ALTER TRACE 权限时发生。 |
176 |
Audit Server Object Management Event |
创建、更改或删除服务器对象时发生。 |
177 |
Audit Server Principal Management Event |
创建、更改或删除了服务器主体时发生。 |
178 |
Audit Database Operation Event |
发生数据库操作(如检查或订阅查询通知)时发生。 |
180 |
Audit Database Object Access Event |
访问数据库对象(如架构)时发生。 |
181 |
TM: Begin Tran starting |
BEGIN TRANSACTION 请求开始时发生。 |
182 |
TM: Begin Tran completed |
BEGIN TRANSACTION 请求完成时发生。 |
183 |
TM: Promote Tran starting |
PROMOTE TRANSACTION 请求开始时发生。 |
184 |
TM: Promote Tran completed |
PROMOTE TRANSACTION 请求完成时发生。 |
185 |
TM: Commit Tran starting |
COMMIT TRANSACTION 请求开始时发生。 |
186 |
TM: Commit Tran completed |
COMMIT TRANSACTION 请求完成时发生。 |
187 |
TM: Rollback Tran starting |
ROLLBACK TRANSACTION 请求开始时发生。 |
188 |
TM: Rollback Tran completed |
ROLLBACK TRANSACTION 请求完成时发生。 |
189 |
Lock:Timeout (timeout > 0) |
对资源(如页)的锁请求超时时发生。 |
190 |
Progress Report: Online Index Operation |
报告生成进程正在运行时,联机索引生成操作的进度。 |
191 |
TM: Save Tran starting |
SAVE TRANSACTION 请求开始时发生。 |
192 |
TM: Save Tran completed |
SAVE TRANSACTION 请求完成时发生。 |
193 |
Background Job Error |
后台作业不正常终止时发生。 |
194 |
OLEDB Provider Information |
分布式查询运行并收集对应于提供程序连接的信息时发生。 |
195 |
Mount Tape |
收到磁带装入请求时发生。 |
196 |
Assembly Load |
发生加载 CLR 程序集的请求时发生。 |
197 |
保留 |
|
198 |
XQuery Static Type |
执行 XQuery 表达式时发生。 此事件类提供静态类型的 XQuery 表达式。 |
199 |
QN: subscription |
无法订阅查询注册时发生。 TextData 列包含事件的有关信息。 |
200 |
QN: parameter table |
有关活动订阅的信息存储在内部参数表中。 在创建或删除参数表时发生该事件类。 通常,重新启动数据库时将创建或删除这些表。 TextData 列包含事件的有关信息。 |
201 |
QN: template |
查询模板代表订阅查询的类。 通常,除参数值以外,相同类中的查询是相同的。 当新的订阅请求针对已存在的类 (Match)、新类 (Create) 或 Drop 类(指示清除没有活动订阅的查询类的模板)时,发生此事件类。 TextData 列包含事件的有关信息。 |
202 |
QN: dynamics |
跟踪查询通知的内部活动。 TextData 列包含事件的有关信息。 |
212 |
位图警告 |
指示何时在查询中禁用了位图筛选器。 |
213 |
Database Suspect Data Page |
指示何时将某页添加到 msdb 的 suspect_pages 表。 |
214 |
CPU threshold exceeded |
指示资源调控器检测到查询超过 CPU 阈值 (REQUEST_MAX_CPU_TIME_SEC) 的时间。 |
215 |
指示 LOGON 触发器或资源调控器分类器函数开始执行的时间。 |
指示 LOGON 触发器或资源调控器分类器函数开始执行的时间。 |
216 |
PreConnect:Completed |
指示 LOGON 触发器或资源调控器分类器函数完成执行的时间。 |
217 |
Plan Guide Successful |
指示 SQL Server 已成功为计划指南中包含的查询或批处理生成执行计划。 |
218 |
Plan Guide Unsuccessful |
指示 SQL Server 无法为包含计划指南的查询或批处理生成执行计划。 SQL Server 尝试在不应用计划指南的情况下为此查询或批处理生成执行计划。 无效的计划指南可能是导致此问题的原因。 您可以通过使用 sys.fn_validate_plan_guide 系统函数验证该计划指南。 |
235 |
审核全文 |
--- |
下表列出了可以为事件添加的列。
列号 |
列名 |
说明 |
---|---|---|
1 |
TextData |
与跟踪内捕获的事件类相关的文本值。 |
2 |
BinaryData |
与在跟踪中捕获的事件类相关的二进制值。 |
3 |
DatabaseID |
由 USE database 语句指定的数据库的 ID;如果尚未对给定的实例发出 USE database 语句,则为默认数据库的 ID。 可以使用 DB_ID 函数确定数据库的值。 |
4 |
TransactionID |
系统分配的事务 ID。 |
5 |
LineNumber |
包含存在错误的行的行号。 对于涉及 Transact-SQL 语句的事件(如 SP:StmtStarting),LineNumber 包含存储过程或批查询中语句的行号。 |
6 |
NTUserName |
Microsoft Windows 用户名。 |
7 |
NTDomainName |
用户所属的 Windows 域。 |
8 |
HostName |
发起请求的客户端计算机的名称。 |
9 |
ClientProcessID |
客户端计算机分配给正在运行客户端应用程序的进程的 ID。 |
10 |
ApplicationName |
客户端应用程序的名称,该客户端应用程序创建了指向 SQL Server 实例的连接。 此列由应用程序传递的值填充,而不是由所显示的程序名填充。 |
11 |
LoginName |
客户端的 SQL Server 登录名。 |
12 |
SPID |
SQL Server 为客户端的相关进程分配的服务器进程 ID。 |
13 |
Duration |
事件所花费的实耗时间(以微秒为单位)。 Hash Warning 事件不填充该数据列。 |
14 |
StartTime |
事件开始的时间(如果可用)。 |
15 |
EndTime |
事件结束的时间。 启动事件类(如 SQL:BatchStarting 或 SP:Starting)不填充此列。 Hash Warning 事件也不填充该列。 |
16 |
Reads |
服务器代表事件所执行的逻辑磁盘读取次数。 Lock:Released 事件不填充此列。 |
17 |
Writes |
服务器代表事件所执行的物理磁盘写入次数。 |
18 |
CPU |
事件所用的 CPU 时间(毫秒)。 |
19 |
Permissions |
显示权限的位图;由安全审核使用。 |
20 |
Severity |
异常的严重级别。 |
21 |
EventSubClass |
事件子类类型。 所有事件类都不填充此数据列。 |
22 |
ObjectID |
系统分配的对象 ID。 |
23 |
Success |
尝试使用权限的成功情况;审核时使用。 1 = 成功,0 = 失败 |
24 |
IndexID |
受事件影响的对象的索引的 ID。 若要确定对象的索引的 ID,请使用 sysindexes 系统表的 indid 列。 |
25 |
IntegerData |
与在跟踪中捕获的事件类相关的整型值。 |
26 |
ServerName |
所跟踪的 SQL Server 实例的名称(servername 或 servername\instancename)。 |
27 |
EventClass |
被记录的事件类的类型。 |
28 |
ObjectType |
对象(如表、函数或存储过程)的类型。 |
29 |
NestLevel |
执行此存储过程所处的嵌套级。 请参阅 @@NESTLEVEL (Transact-SQL)。 |
30 |
State |
发生错误时的服务器状态。 |
31 |
Error |
错误号。 |
32 |
Mode |
获取的锁的锁模式。 Lock:Released 事件不填充此列。 |
33 |
Handle |
事件中引用的对象的句柄。 |
34 |
ObjectName |
被访问的对象的名称。 |
35 |
DatabaseName |
USE database 语句中指定的数据库名称。 |
36 |
FileName |
被修改的文件名的逻辑名称。 |
37 |
OwnerName |
被引用对象的所有者名称。 |
38 |
RoleName |
语句针对的数据库范围或服务器范围的角色的名称。 |
39 |
TargetUserName |
某些操作的目标的用户名。 |
40 |
DBUserName |
客户端的 SQL Server 数据库用户名。 |
41 |
LoginSid |
已登录的用户的安全标识符 (SID)。 |
42 |
TargetLoginName |
某些操作的目标的登录名。 |
43 |
TargetLoginSid |
某些操作的目标登录名的 SID。 |
44 |
ColumnPermissions |
列级别权限状态;由安全审核使用。 |
45 |
LinkedServerName |
链接服务器的名称。 |
46 |
ProviderName |
OLE DB 访问接口的名称。 |
47 |
MethodName |
OLE DB 方法的名称。 |
48 |
RowCounts |
批处理中的行数。 |
49 |
RequestID |
包含该语句的请求的 ID。 |
50 |
XactSequence |
用于说明当前事务的标记。 |
51 |
EventSequence |
此事件的序列号。 |
52 |
BigintData1 |
bigint 值,与跟踪中捕获的事件类相关。 |
53 |
BigintData2 |
bigint 值,与跟踪中捕获的事件类相关。 |
54 |
GUID |
GUID 值,与跟踪中捕获的事件类相关。 |
55 |
IntegerData2 |
整数值,与跟踪中捕获的事件类相关。 |
56 |
ObjectID2 |
相关的对象或实体的 ID(如果可用)。 |
57 |
类型 |
整数值,与跟踪中捕获的事件类相关。 |
58 |
OwnerID |
拥有锁的对象的类型。 仅限于锁事件。 |
59 |
ParentName |
对象所在架构的名称。 |
60 |
IsSystem |
指示事件是发生在系统进程还是发生在用户进程。 1 = 系统 0= 用户。 |
61 |
Offset |
存储过程或批查询中的语句的起始偏移量。 |
62 |
SourceDatabaseID |
对象源所在数据库的 ID。 |
63 |
SqlHandle |
基于即席查询文本或 SQL 对象的数据库和对象 ID 的 64 位哈希运算。 可以将该值传递到 sys.dm_exec_sql_text() 以检索关联的 SQL 文本。 |
64 |
SessionLoginName |
发起会话的用户的登录名。 例如,如果您使用 Login1 连接到 SQL Server 并以 Login2 身份执行语句,则 SessionLoginName 将显示 Login1,而 LoginName 将显示 Login2。 此数据列将同时显示 SQL Server 登录名和 Windows 登录名。 |
[ @on=\] on
指定将事件设置为 ON (1) 还是 OFF (0)。 on 的数据类型为 bit,无默认值。
如果将 on 设置为 1,并且 column_id 为 NULL,则将事件设置为 ON 并清除所有列。 如果 column_id 不为 NULL,则将该事件的列设置为 ON。
如果将 on 设置为 0,并且 column_id 为 NULL,则将事件设置为 OFF 并清除所有列。 如果 column_id 不为 NULL,则将列设置为 OFF。
下表阐释 @on 和 @columnid 之间的交互操作。
@on |
@columnid |
结果 |
---|---|---|
ON (1) |
NULL |
事件设置为 ON。 清除所有列。 |
NOT NULL |
指定事件的列设置为 ON。 |
|
OFF (0) |
NULL |
事件设置为 OFF。 清除所有列。 |
NOT NULL |
指定事件的列设置为 OFF。 |
下表说明在存储过程完成后用户可能获得的代码值。
返回代码 |
说明 |
---|---|
0 |
没有错误。 |
1 |
未知错误。 |
2 |
本跟踪当前正在运行。 此时更改跟踪将导致错误。 |
3 |
指定的事件无效。 该事件可能不存在或者它不适用于此存储过程。 |
4 |
指定的列无效。 |
9 |
指定的跟踪句柄无效。 |
11 |
指定的列在内部使用,并且不能删除。 |
13 |
内存不足。 在没有足够内存执行指定的操作时返回此代码。 |
16 |
该函数对此跟踪无效。 |
sp_trace_setevent 执行以前由 SQL Server 的早期版本中的扩展存储过程执行的许多操作。 可以使用 sp_trace_setevent 代替下列各项:
xp_trace_addnewqueue
xp_trace_eventclassrequired
xp_trace_seteventclassrequired
对于为每个事件添加的每个列,用户都必须执行 sp_trace_setevent。 在每次执行过程中,如果将 @on 设置为 1,则 sp_trace_setevent 将把指定的事件添加到跟踪的事件列表中。 如果 @on 设置为 0,则 sp_trace_setevent 将从列表中删除指定的事件。
所有 SQL 跟踪存储过程 (sp_trace_xx) 的参数的类型都受到严格限制。 如果没有用正确的输入参数数据类型(参数说明中指定的类型)来调用这些参数,则存储过程将返回错误。
有关使用跟踪存储过程的示例,请参阅创建跟踪 (Transact-SQL)。
用户必须拥有 ALTER TRACE 权限。
sql性能优化:MS-SQL跟踪信息查看select * from ::fn_trace_gettable
sql性能优化:MS-SQL跟踪信息查看select * from ::fn_trace_gettable_橙-极纪元的博客-CSDN博客
SQL Server中关于跟踪(Trace)那点事
SQL Server中关于跟踪(Trace)那点事 - 文章详情
原文:
https://www.cnblogs.com/zhijianliutang/p/4113911.html