2009-02-19 46 views
4

關於有用的SQL技巧,有一個post。在這裏,我將提及SQL Server Profiler工具,因爲它幫助我編寫了更少的SQL。我會編寫SQL來詢問,理解或猜測數據庫業務邏輯。是否可以自動化SQL Server 2008分析器?

Profiler是非常有用的,尤其是在應用程序代碼中嵌入SQL,你想看看它在做什麼,在最短的時間內。 (你也許不知道在應用程序的環境中使用哪個源代碼版本,或者更糟的是,沒有可用的源代碼!)。

我在想,如果探查有一個API,我可以掛接到?

當我們想要通過設置環境變量/標誌(例如PROFILER_ON = TRUE)來快速檢查系統中調用什麼SQL時,這將非常有用。然後,系統可以啓動SQL事件探查器,設置各種跟蹤屬性,然後寫出日誌或表格 - 可以由支持團隊查看。

我想編寫一個組件切換探查並監控生產環境(在安靜的時候),所以不能真正改變代碼庫(應用程序代碼和SQL存儲的特效兩者)。

回答

3

你可以做的是設置你的「完美」跟蹤和腳本它作爲SQL。 然後執行它來運行跟蹤並將輸出保存到文件或表格中。

現在,您可以包裝SQL以在另一個可以通過SQL代理/空閒閾值運行的存儲過程中創建跟蹤,但是使用fn_trace_getinfo來查看是否有一個已經運行。

不能在SSMS中自動執行或使用環境變量:代碼,作業,警報等都必須存在於服務器上。

你可以把腳本跟蹤到一個批處理文件,並通過OSQL/SQLCMD運行它,但它需要手動調用。

沒有探查器API:它所做的就是運行存儲過程,就像任何解決方案必須的一樣。

爲什麼不能添加監視SQL代碼帽子是獨立於應用程序代碼?

can't use SMO either ...爲只讀痕跡

編輯:蹤總是需要SQL將針對服務器運行

+0

當我通過GUI使用分析器時,我試圖自動執行我要做的事情。你的觀點是有用的,唯一的問題是我不想寫一個已經存在的系統的SQL。通過某種交換機開發和運行組件,在服務器上自動化分析器本來是很好用的。 – Ferdeen 2009-02-21 18:17:41

+0

然後我再重複一遍:你別無選擇,只能針對實時系統運行SQL! – gbn 2009-02-22 12:06:50

4

可以利用Microsoft.SqlServer.Management.Trace命名空間中的物體;他們提供了一個針對SQL Profiler提供的相同功能的API。這是針對數據庫腳本編寫自己的sql的替代方法。但是,就像SQL事件探查器一樣,這些對象在封面下做的是執行SQL Trace存儲過程(或其變體)來創建,運行和管理這些跟蹤。

如果您使用1個事件探查器實例來分析另一個事件(或者使用事件探查器通過從跟蹤中刪除「NOT LIKE」SQL Profiler ...「」過濾器條件(我認爲它是一個應用程序名稱過濾器)您將看到事件探查器所做的與您在SQL中執行的操作或SMO對象從API執行的操作相同。

0

GBN的就在這裏;所有SQL Profiler都在SQL Server上執行存儲過程:這些過程啓動,配置和停止跟蹤。這意味着,不是試圖自動化分析器,而是執行相同的跟蹤過程,並且會得到相同的行爲。

要自動啓動和停止跟蹤,可以使用SQL事件探查器創建腳本;該腳本可以從批處理文件中執行。所以你會做這樣的事情;

  • 打開SQL事件探查器
  • 設置你想要的一絲痕跡輪廓;選擇你感興趣的事件和你想跟蹤的文件。
  • 開始跟蹤,然後停止它。
  • 轉至文件|導出|腳本跟蹤定義...和保存.sql文件

.sql文件包含可以運行的代碼;如果你打開它,你會在頂部看到這種代碼;

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @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, 14, 1, @on 
exec sp_trace_setevent @TraceID, 14, 9, @on 
exec sp_trace_setevent @TraceID, 14, 6, @on 
exec sp_trace_setevent @TraceID, 14, 10, @on 
exec sp_trace_setevent @TraceID, 14, 14, @on 
exec sp_trace_setevent @TraceID, 14, 11, @on 
This creates a trace that writes to a file. 

這是創建跟蹤並將事件附加到跟蹤。

所以,現在開始跟蹤,你可以安排這個文件的執行。批處理文件看起來像這樣;

osql -E -S MACHINE\INSTANCE -i "c:\my-trace-definition.sql" 
相關問題