针对某个跟踪添加或删除一个事件或事件列。只有在已停止的现有跟踪(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_addlogin 和 sp_droplogin。 |
105 | Audit Login GDR | 在添加或删除 Microsoft Windows® 登录权限时发生;用于 sp_grantlogin、sp_revokelogin 和 sp_denylogin。 |
106 | Audit Login Change Property | 在修改除密码之外的登录属性时发生;用于 sp_defaultdb 和 sp_defaultlanguage。 |
107 | Audit Login Change Password | 在更改 SQL Server 登录密码时发生。
不记录密码。 |
108 | Audit Add Login to Server Role | 在从固定服务器角色添加或删除登录时发生;用于 sp_addsrvrolemember 和 sp_dropsrvrolemember。 |
109 | Audit Add DB User | 在添加或删除作为某个数据库的数据库用户(Windows 或 SQL Server)的登录时发生;用于 sp_grantdbaccess、sp_revokedbaccess、sp_adduser 和 sp_dropuser。 |
110 | Audit Add Member to DB | 在将某登录作为数据库的固定数据库用户或用户定义数据库用户进行添加或删除时发生;用于 sp_addrolemember、sp_droprolemember 和 sp_changegroup。 |
111 | Audit Add/Drop Role | 在将某登录作为数据库的数据库用户进行添加或删除时发生;用于 sp_addrole 和 sp_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: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 = 成功 |
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。