首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 T-SQL 腳本建立並啟動 SQL Server 追蹤的完整指南

     編輯:關於SqlServer

SQL Server Profiler(事件探查器)雖功能強大,但不支援排程自動啟動。若需定時追蹤特定時段的伺服器運行狀態,透過 T-SQL 腳本搭配 SQL Server Agent Job 即可實現自動化追蹤。本文詳細說明腳本建立追蹤的核心預存程序、最簡生成流程及常見問題應對。

一、腳本啟動追蹤的核心範例

以下腳本由 Profiler 導出並簡化,展示建立追蹤的完整流程:

DECLARE @rc INT, @TraceID INT, @maxfilesize BIGINT;
SET @maxfilesize = 5; -- 最大檔案大小 (MB)

-- 建立追蹤佇列,指定輸出檔案路徑 (需伺服器有寫入權限)
EXEC @rc = sp_trace_create @TraceID OUTPUT, 0, N'C:\Trace\MyTrace', @maxfilesize, NULL;
IF (@rc != 0) GOTO error;

-- 設定追蹤事件 (範例: SQL:BatchCompleted 事件 ID 12, 欄位 TextData=1, SPID=12, StartTime=14)
DECLARE @on BIT = 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;

-- 設定過濾器 (範例: 排除 ApplicationName='SQL Profiler', CPU>100, DatabaseID=1, DatabaseName='pubs')
DECLARE @intfilter INT, @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';

-- 啟動追蹤
EXEC sp_trace_setstatus @TraceID, 1;
SELECT TraceID = @TraceID; -- 記錄 TraceID 供後續停止/查詢使用
GOTO finish;

error: SELECT ErrorCode = @rc;
finish: GO

二、生成追蹤腳本的最簡三步驟

  1. 開啟 **事件探查器**,建立追蹤並設定好事件、欄位、過濾器,啟動執行確認無誤。
  2. 選單 **檔案 → 導出 → 指令碼追蹤定義 → 選擇適用版本**,儲存為 .sql 檔。
  3. 打開生成的腳本,修改 sp_trace_create 中的檔案路徑參數,即可在需要時直接執行該腳本啟動追蹤。啟動後可關閉查詢視窗,追蹤於背景持續運行。

三、已知限制與管理指令

1. 寫入非即時

追蹤記錄非即時寫入檔案,停止追蹤時才可能將緩衝資料刷入檔案。

2. 查看當前追蹤

SELECT * FROM ::fn_trace_getinfo(0);

3. 停止與關閉追蹤

-- 停止 (保留定義,可重新啟動)
EXEC sp_trace_setstatus @traceid = 1, @status = 0;
-- 關閉並釋放資源
EXEC sp_trace_setstatus @traceid = 1, @status = 2;

建議在 Job 步驟中先啟動追蹤,再排程另一 Job 於指定時間執行停止/關閉指令,構建完整自動化追蹤方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved