針對某個跟蹤添加或刪除一個事件或事件列。只有在已停止的現(xiàn)有跟蹤(status 為 0)上才能執(zhí)行 sp_trace_setevent。如果在不存在或其 status 不為 0 的跟蹤上執(zhí)行該存儲過程,則 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) 后發(fā)生。 |
| 11 | RPC:Starting | 在 RPC 已啟動后發(fā)生。 |
| 12 | SQL:BatchCompleted | 在已完成 Transact-SQL 批處理后發(fā)生。 |
| 13 | SQL:BatchStarting | 在 Transact-SQL 批處理已啟動后發(fā)生。 |
| 14 | Login | 在用戶成功登錄到 SQL Server 時發(fā)生。 |
| 15 | Logout | 在用戶注銷 SQL Server 時發(fā)生。 |
| 16 | Attention | 在提示事件(如客戶端中斷請求或客戶端連接中斷)發(fā)生時發(fā)生。 |
| 17 | ExistingConnection | 在檢測所有用戶在啟動跟蹤前連接到 SQL Server 的活動。 |
| 18 | ServiceControl | 在修改過 SQL Server 服務狀態(tài)時發(fā)生。 |
| 19 | DTCTransaction | 跟蹤 Microsoft 分布式事務處理協(xié)調器 (MS DTC) 在兩個或更多的數據庫之間協(xié)調的事務。 |
| 20 | Login Failed | 表明試圖從客戶機登錄到 SQL Server 失敗。 |
| 21 | EventLog | 表示已將事件記錄到 Microsoft Windows NT® 應用程序日志中。 |
| 22 | ErrorLog | 表示已將錯誤事件記錄到 SQL Server 錯誤日志中。 |
| 23 | Lock:Released | 表示已釋放一個資源鎖(如頁)。 |
| 24 | Lock:Acquired | 表示獲取了像數據頁這樣的資源鎖。 |
| 25 | Lock:Deadlock | 表明由于兩個并發(fā)事務都試圖獲得另一事務所擁有的不兼容的資源鎖而已互相鎖死。 |
| 26 | Lock:Cancel | 表示獲取的資源鎖已被取消(例如,由于死鎖的原因)。 |
| 27 | Lock:Timeout | 表示由于其它事務控制著所需資源的分塊鎖而使對資源鎖(如頁)的請求超時。超時由 @@LOCK_TIMEOUT 函數確定,并可用 SET LOCK_TIMEOUT 語句設置。 |
| 28 | DOP Event | 在執(zhí)行 SELECT、INSERT 或 UPDATE 語句之前發(fā)生。 |
| 29-31 | 保留 | 改為使用事件 28。 |
| 32 | 保留 | |
| 33 | Exception | 表明 SQL Server 中發(fā)生一個異常錯誤。 |
| 34 | SP:CacheMiss | 表明未在過程高速緩存中找到某存儲過程的時間。 |
| 35 | SP:CacheInsert | 表明將某項目插入到過程高速緩存中的時間。 |
| 36 | SP:CacheRemove | 表明將某項目從過程高速緩存中刪除的時間。 |
| 37 | SP:Recompile | 表示已重新編譯某個存儲過程。 |
| 38 | SP:CacheHit | 表示在過程高速緩存中找到某存儲過程的時間。 |
| 39 | SP:ExecContextHit | 表示已在過程高速緩存內找到某存儲過程的執(zhí)行版本。 |
| 40 | SQL:StmtStarting | 在已啟動 Transact-SQL 語句時發(fā)生。 |
| 41 | SQL:StmtCompleted | 在已完成 Transact-SQL 語句后發(fā)生。 |
| 42 | SP:Starting | 表明存儲過程已被啟動的時間。 |
| 43 | SP:Completed | 表明存儲過程已完成的時間。 |
| 44 | 保留 | 改為使用事件 40。 |
| 45 | 保留 | 改為使用事件 41。 |
| 46 | Object: Created | 表示已經創(chuàng)建一個對象,如 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 | 表示未在緩沖分區(qū)進行的某一哈希操作(例如,哈希聯(lián)接、哈希聚合、哈希 union 運算、哈希非重復)已回復為替換計劃。這可由于遞歸深度、數據扭曲、跟蹤標記或位計數而發(fā)生。 |
| 56-57 | 保留 | |
| 58 | Auto Update Stats | 表示已自動更新索引統(tǒng)計。 |
| 59 | Lock:Deadlock Chain | 為每個導致死鎖的事件而產生。 |
| 60 | Lock:Escalation | 表示較細粒度的鎖已轉換為較粗粒度的鎖(如由行鎖升級或轉換為頁鎖)。 |
| 61 | OLE DB Errors | 表明發(fā)生了一個 OLE DB 錯誤。 |
| 62-66 | 保留 | |
| 67 | Execution Warnings | 表明在執(zhí)行 SQL Server 語句或存儲過程期間發(fā)生的所有警告。 |
| 68 | Execution Plan | 顯示正在執(zhí)行的 Transact-SQL 語句的計劃樹。 |
| 69 | Sort Warnings | 表示不符合內存要求的排序操作。不包括與創(chuàng)建索引有關的排序操作;只包括某查詢內的排序操作(如 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 已執(zhí)行一個或多個準備的 Transact-SQL 語句。 |
| 73 | Unprepare SQL | ODBC、OLE DB 或 DB-Library 已撤消準備(刪除)準備好的 Transact-SQL 語句。 |
| 74 | CursorExecute | 執(zhí)行先前由 ODBC、OLE DB 或 DB-Library 在 Transact-SQL 語句上準備的游標。 |
| 75 | CursorRecompile | 由 ODBC 或 DB-Library 在 Transact-SQL 語句上打開的游標已直接重新編譯或由于架構更改而重新編譯。 為 ANSI 和非 ANSI 游標觸發(fā)。 |
| 76 | CursorImplicitConversion | Transact-SQL 語句上的游標由 SQL Server 從一種類型轉換到另一種類型。 為 ANSI 和非 ANSI 游標觸發(fā)。 |
| 77 | CursorUnprepare | ODBC、OLE DB 或 DB-Library 撤消準備(刪除)在 Transact-SQL 上準備好的游標。 |
| 78 | CursorClose | 關閉先前由 ODBC、OLE DB 或 DB-Library 在 Transact-SQL 語句上打開的游標。 |
| 79 | Missing Column Statistics | 在優(yōu)化器中可能會有用的列統(tǒng)計不可用。 |
| 80 | Missing Join Predicate | 正在執(zhí)行沒有聯(lián)接謂詞的查詢。這可能會導致查詢長時間運行。 |
| 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 | 在查詢優(yōu)化器中顯示 SQL 語句的查詢計劃樹。 |
| 97 | Show Plan ALL | 用已執(zhí)行的 SQL 語句的完整的編譯時細節(jié)顯示查詢計劃。 |
| 98 | Show Plan Statistics | 執(zhí)行 SQL 語句的完整的編譯時細節(jié)來顯示查詢計劃用已執(zhí)行的 SQL 語句的完整的運行時細節(jié)顯示查詢計劃。 |
| 99 | 保留 | |
| 100 | RPC Output Parameter | 生成每個 RPC 的參數輸出值。 |
| 101 | 保留 | |
| 102 | Audit Statement GDR | SQL Server 中的任何用戶每次發(fā)出用于語句權限的 GRANT、DENY、REVOKE 時都發(fā)生。 |
| 103 | Audit Object GDR | 在 SQL Server 中的任何用戶每次發(fā)出用于對象權限的 GRANT、DENY、REVOKE 時都發(fā)生。 |
| 104 | Audit Add/Drop Login | 在添加或刪除 SQL Server 登錄時發(fā)生;用于 sp_addlogin 和 sp_droplogin。 |
| 105 | Audit Login GDR | 在添加或刪除 Microsoft Windows® 登錄權限時發(fā)生;用于 sp_grantlogin、sp_revokelogin 和 sp_denylogin。 |
| 106 | Audit Login Change Property | 在修改除密碼之外的登錄屬性時發(fā)生;用于 sp_defaultdb 和 sp_defaultlanguage。 |
| 107 | Audit Login Change Password | 在更改 SQL Server 登錄密碼時發(fā)生。 不記錄密碼。 |
| 108 | Audit Add Login to Server Role | 在從固定服務器角色添加或刪除登錄時發(fā)生;用于 sp_addsrvrolemember 和 sp_dropsrvrolemember。 |
| 109 | Audit Add DB User | 在添加或刪除作為某個數據庫的數據庫用戶(Windows 或 SQL Server)的登錄時發(fā)生;用于 sp_grantdbaccess、sp_revokedbaccess、sp_adduser 和 sp_dropuser。 |
| 110 | Audit Add Member to DB | 在將某登錄作為數據庫的固定數據庫用戶或用戶定義數據庫用戶進行添加或刪除時發(fā)生;用于 sp_addrolemember、sp_droprolemember 和 sp_changegroup。 |
| 111 | Audit Add/Drop Role | 在將某登錄作為數據庫的數據庫用戶進行添加或刪除時發(fā)生;用于 sp_addrole 和 sp_droprole。 |
| 112 | App Role Pass Change | 在更改應用程序角色的密碼時發(fā)生。 |
| 113 | Audit Statement Permission | 在使用語句權限(如 CREATE TABLE)時發(fā)生。 |
| 114 | Audit Object Permission | 在成功地或不成功地使用對象權限(如 SELECT)時發(fā)生。 |
| 115 | Audit Backup/Restore | 在發(fā)出 BACKUP 或 RESTORE 命令時發(fā)生。 |
| 116 | Audit DBCC | 在發(fā)出 DBCC 命令時發(fā)生。 |
| 117 | Audit Change Audit | 在進行審核跟蹤修改時發(fā)生。 |
| 118 | Audit Object Derived Permission | 在發(fā)出 CREATE、ALTER 和 DROP 對象命令時發(fā)生。 |
[ @columnid = ] column_id
是要為事件添加的列 ID。column_id 的數據類型為 int,沒有默認設置。
下表列出了可以為事件添加的列。
| 列號 | 列名 | 描述 |
|---|---|---|
| 1 | TextData | 與跟蹤內捕獲的事件類相關的文本值。 |
| 2 | BinaryData | 與在跟蹤中捕獲的事件類相關的二進制值。 |
| 3 | DatabaseID | USE database 語句所指定的數據庫 ID,如果沒有對給定的連接發(fā)出 USE database 語句,則是默認數據庫 ID。 可以使用 DB_ID 函數確定數據庫的值。 |
| 4 | TransactionID | 系統(tǒng)分配的事務 ID。 |
| 5 | 保留 | |
| 6 | NTUserName | Microsoft Windows NT® 用戶名。 |
| 7 | NTDomainName | 用戶所屬的 Windows NT 域。 |
| 8 | ClientHostName | 發(fā)起請求的客戶計算機名稱。 |
| 9 | ClientProcessID | 客戶端計算機分配給進程的 ID,而客戶端應用程序正在該進程中運行。 |
| 10 | ApplicationName | 創(chuàng)建與 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 | 服務器代表事件執(zhí)行的邏輯磁盤讀取數。Lock:Released 事件不填充該列。 |
| 17 | Writes | 服務器代表事件執(zhí)行的物理磁盤寫入數。 |
| 18 | CPU | 事件所使用的 CPU 時間總計(以毫秒為單位)。 |
| 19 | Permissions | 代表權限的位圖;由安全審核使用。 |
| 20 | Severity | 異常錯誤的嚴重級別。 |
| 21 | EventSubClass | 事件子類類型。所有事件類的該數據列均不填充。 |
| 22 | ObjectID | 系統(tǒng)分配的對象 ID。 |
| 23 | Success | 嘗試使用權限成功;由審核使用。 1 = 成功 |
| 24 | IndexID | 受事件影響的對象上的索引 ID。若要確定對象的索引 ID,請使用 sysindexes 系統(tǒng)表的 indid 列。 |
| 25 | IntegerData | 與在跟蹤中捕獲的事件類相關的整型值。 |
| 26 | ServerName | 正跟蹤的 SQL Server 實例名(servername 或 servername\instancename)。 |
| 27 | EventClass | 正記錄的事件類類型。 |
| 28 | ObjectType | 對象類型(如表、函數或存儲過程)。 |
| 29 | NestLevel | 存儲過程正在其上執(zhí)行的嵌套級。請參見 @@NESTLEVEL。 |
| 30 | State | 發(fā)生錯誤時的服務器狀態(tài)。 |
| 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 | 列級權限狀態(tài);由安全審核使用。 |
[ @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 | 內存不足。在沒有足夠內存執(zhí)行指定的操作時返回此代碼。 |
| 16 | 該函數對此跟蹤無效。 |
sp_trace_setevent 是 Microsoft SQL Server 2000 存儲過程,它執(zhí)行以前由 SQL Server 早期版本使用的擴展存儲過程執(zhí)行的很多操作。使用 sp_trace_setevent 而不使用:
對于為每個事件添加的每列,用戶都必須執(zhí)行 sp_trace_setevent。在每次執(zhí)行過程中,如果將 @on 設置為 1,則 sp_trace_setevent 將指定的事件添加到跟蹤事件的列表。如果將 @on 設置為 0,則 sp_trace_setevent 將從列表中刪除指定的事件。
嚴格地鍵入所有 SQL 跟蹤存儲過程 (sp_trace_xx) 的參數。如果沒有用正確的輸入參數數據類型(與在參數說明中指定的相同)調用這些參數,則存儲過程將返回錯誤。
只有 sysadmin 固定服務器角色成員才能執(zhí)行 sp_trace_setevent。
相關文章