2014-10-04 103 views
1

如何跟蹤數據庫表中的SQL Server事件數據?如何跟蹤數據庫表中的SQL Server事件數據?

這裏我創建了一個在sql server中登錄和註銷的跟蹤事件,該事件記錄並跟蹤給定文件路徑中的數據。

但我想將事件數據存儲在自定義sql server數據庫表中而不是文件中。

declare @tracefile nvarchar(500) set @tracefile=N'd:\rohit\newtraceFile' 
declare @trace_id int 
declare @maxsize bigint 
    set @maxsize =1 
    exec sp_trace_create @trace_id output,2,@tracefile ,@maxsize 
go 

declare @trace_id int 
    set @trace_id=2 
declare @on bit 
    set @on=2 
declare @current_num int 
    set @current_num =1 
    while(@current_num <65) 
    begin 
    --add events to be traced, id 14 is the login event 
    exec sp_trace_setevent @trace_id,14, @current_num,@on 
    set @[email protected]_num+1 
    end 
go 

declare @trace_id int 
    set @trace_id=2 
declare @on bit 
    set @on=2 
declare @current_num int 
    set @current_num =1 
    while(@current_num <65) 
    begin 
     --add events to be traced, id 15 is the logout event 
     exec sp_trace_setevent @trace_id,14, @current_num,@on 
     set @[email protected]_num+1 
    end 
go 

我可以通過指定sql server表而不是指定文件路徑來跟蹤數據嗎? 我不想使用SQL Profiler。

請爲我提供更好的解決方案。

謝謝。

回答

1

編號SQL Trace(您的腳本示例)和Extended Events都不允許直接跟蹤表。由於涉及到開銷,這是一個有意識的設計決策,如果捕獲大量數據,這可能會影響服務器的穩定性。

但是,您可以跟蹤文件,然後根據需要將跟蹤數據導入到表中。可以將fn_trace_gettable(用於SQL跟蹤文件)和sys.fn_xe_file_target_read_file(擴展事件文件目標)表值函數用作INSERT ... SELECT的源。