Transact-SQL 参考

sp_trace_setevent

针对某个跟踪添加或删除一个事件或事件列。只有在已停止的现有跟踪(status 为 0)上才能执行 sp_trace_setevent。如果在不存在或其 status 不为 0 的跟踪上执行该存储过程,则 Microsoft® SQL Server™ 2000 将返回错误。

语法

sp_trace_setevent [ @traceid = ] trace_id
    , [ @eventid = ] event_id
    , [ @columnid = ] column_id
    , [ @on = ] on

参数

[ @traceid = ] trace_id

是要修改的跟踪 ID。trace_id 的数据类型为 int,没有默认设置。用户使用 trace_id 值识别、修改和控制跟踪。

[ @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 Login 在用户成功登录到 SQL Server 时发生。
15 Logout 在用户注销 SQL Server 时发生。
16 Attention 在提示事件(如客户端中断请求或客户端连接中断)发生时发生。
17 ExistingConnection 在检测所有用户在启动跟踪前连接到 SQL Server 的活动。
18 ServiceControl 在修改过 SQL Server 服务状态时发生。
19 DTCTransaction 跟踪 Microsoft 分布式事务处理协调器 (MS DTC) 在两个或更多的数据库之间协调的事务。
20 Login Failed 表明试图从客户机登录到 SQL Server 失败。
21 EventLog 表示已将事件记录到 Microsoft Windows NT® 应用程序日志中。
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 DOP Event 在执行 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 SP:ExecContextHit 表示已在过程高速缓存内找到某存储过程的执行版本。
40 SQL:StmtStarting 在已启动 Transact-SQL 语句时发生。
41 SQL:StmtCompleted 在已完成 Transact-SQL 语句后发生。
42 SP:Starting 表明存储过程已被启动的时间。
43 SP:Completed 表明存储过程已完成的时间。
44 保留 改为使用事件 40。
45 保留 改为使用事件 41。
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 Transaction Log 在事务被写入事务日志时进行跟踪。
55 Hash Warning 表示未在缓冲分区进行的某一哈希操作(例如,哈希联接、哈希聚合、哈希 union 运算、哈希非重复)已回复为替换计划。这可由于递归深度、数据扭曲、跟踪标记或位计数而发生。
56-57 保留  
58 Auto Update Stats 表示已自动更新索引统计。
59 Lock:Deadlock Chain 为每个导致死锁的事件而产生。
60 Lock:Escalation 表示较细粒度的锁已转换为较粗粒度的锁(如由行锁升级或转换为页锁)。
61 OLE DB Errors 表明发生了一个 OLE DB 错误。
62-66 保留  
67 Execution Warnings 表明在执行 SQL Server 语句或存储过程期间发生的所有警告。
68 Execution Plan 显示正在执行的 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 Transact-SQL 语句上的游标由 SQL Server 从一种类型转换到另一种类型。

为 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 Microsoft 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 Show Plan Text 在查询优化器中显示 SQL 语句的查询计划树。
97 Show Plan ALL 用已执行的 SQL 语句的完整的编译时细节显示查询计划。
98 Show Plan Statistics 执行 SQL 语句的完整的编译时细节来显示查询计划用已执行的 SQL 语句的完整的运行时细节显示查询计划。
99 保留  
100 RPC Output Parameter 生成每个 RPC 的参数输出值。
101 保留  
102 Audit Statement GDR SQL Server 中的任何用户每次发出用于语句权限的 GRANT、DENY、REVOKE 时都发生。
103 Audit Object GDR 在 SQL Server 中的任何用户每次发出用于对象权限的 GRANT、DENY、REVOKE 时都发生。
104 Audit Add/Drop Login 在添加或删除 SQL Server 登录时发生;用于 sp_addloginsp_droplogin
105 Audit Login GDR 在添加或删除 Microsoft Windows® 登录权限时发生;用于 sp_grantloginsp_revokeloginsp_denylogin
106 Audit Login Change Property 在修改除密码之外的登录属性时发生;用于 sp_defaultdbsp_defaultlanguage
107 Audit Login Change Password 在更改 SQL Server 登录密码时发生。

不记录密码。

108 Audit Add Login to Server Role 在从固定服务器角色添加或删除登录时发生;用于 sp_addsrvrolemembersp_dropsrvrolemember
109 Audit Add DB User 在添加或删除作为某个数据库的数据库用户(Windows 或 SQL Server)的登录时发生;用于 sp_grantdbaccesssp_revokedbaccesssp_addusersp_dropuser
110 Audit Add Member to DB 在将某登录作为数据库的固定数据库用户或用户定义数据库用户进行添加或删除时发生;用于 sp_addrolemembersp_droprolemembersp_changegroup
111 Audit Add/Drop Role 在将某登录作为数据库的数据库用户进行添加或删除时发生;用于 sp_addrolesp_droprole
112 App Role Pass Change 在更改应用程序角色的密码时发生。
113 Audit Statement Permission 在使用语句权限(如 CREATE TABLE)时发生。
114 Audit Object Permission 在成功地或不成功地使用对象权限(如 SELECT)时发生。
115 Audit Backup/Restore 在发出 BACKUP 或 RESTORE 命令时发生。
116 Audit DBCC 在发出 DBCC 命令时发生。
117 Audit Change Audit 在进行审核跟踪修改时发生。
118 Audit Object Derived Permission 在发出 CREATE、ALTER 和 DROP 对象命令时发生。

[ @columnid = ] column_id

是要为事件添加的列 ID。column_id 的数据类型为 int,没有默认设置。

下表列出了可以为事件添加的列。

列号 列名 描述
1 TextData 与跟踪内捕获的事件类相关的文本值。
2 BinaryData 与在跟踪中捕获的事件类相关的二进制值。
3 DatabaseID USE database 语句所指定的数据库 ID,如果没有对给定的连接发出 USE database 语句,则是默认数据库 ID。

可以使用 DB_ID 函数确定数据库的值。

4 TransactionID 系统分配的事务 ID。
5 保留  
6 NTUserName Microsoft Windows NT® 用户名。
7 NTDomainName 用户所属的 Windows NT 域。
8 ClientHostName 发起请求的客户计算机名称。
9 ClientProcessID 客户端计算机分配给进程的 ID,而客户端应用程序正在该进程中运行。
10 ApplicationName 创建与 SQL Server 实例的连接的客户端应用程序名。该列由应用程序传递的值填充,而不是由所显示的程序名填充。
11 SQLSecurityLoginName 客户端的 SQL Server 登录名称。
12 SPID SQL Server 指派的与客户端相关的服务器进程 ID。
13 Duration 事件所花费的实耗时间总计(以毫秒为单位)。Hash Warning 事件不填充该数据列。
14 StartTime 启动事件的时间(可用时)。
15 EndTime 事件结束时的时间。启动事件类(如 SQL:BatchStartingSP: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
30 State 发生错误时的服务器状态。
31 Error 错误号。
32 Mode 获取锁的锁模式。Lock:Released 事件不填充该列。
33 Handle 在事件中引用的对象句柄。
34 ObjectName 被访问的对象名称。
35 DatabaseName USE database 语句中指定的数据库名称。
36 Filename 被修改的文件名的逻辑名。
37 ObjectOwner 被引用对象的所有者 ID。
38 TargetRoleName 语句作为目标的数据库范围角色或服务器范围角色的名称。
39 TargetUserName 某个操作目标的用户名。
40 DatabaseUserName 客户端的 SQL Server 数据库用户名。
41 LoginSID 登录用户的安全标识号 (SID)。
42 TargetLoginName 某个操作目标的登录名称。
43 TargetLoginSID 是某个操作目标的登录 SID。
44 ColumnPermissionsSet 列级权限状态;由安全审核使用。

[ @on = ] on

指定是打开事件 (ON (1)) 还是关闭事件 (OFF (0))。@on 的数据类型为 bit,没有默认设置。

如果 on 设置为 1,且 column_id 是 NULL,则将事件设置为 ON 并清除所有列。如果 column_id 不为空,则为该事件将列设置为 ON。

如果 on 设置为 0,且 column_id 是 NULL,则关闭事件 (OFF) 且清除所有列。如果 column_id 不为空,则关闭列 (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 是 Microsoft SQL Server 2000 存储过程,它执行以前由 SQL Server 早期版本使用的扩展存储过程执行的很多操作。使用 sp_trace_setevent 而不使用:

对于为每个事件添加的每列,用户都必须执行 sp_trace_setevent。在每次执行过程中,如果将 @on 设置为 1,则 sp_trace_setevent 将指定的事件添加到跟踪事件的列表。如果将 @on 设置为 0,则 sp_trace_setevent 将从列表中删除指定的事件。

严格地键入所有 SQL 跟踪存储过程 (sp_trace_xx) 的参数。如果没有用正确的输入参数数据类型(与在参数说明中指定的相同)调用这些参数,则存储过程将返回错误。

权限

只有 sysadmin 固定服务器角色成员才能执行 sp_trace_setevent

请参见

fn_trace_geteventinfo

fn_trace_getinfo

sp_trace_setevent