如何跟踪数据库表中的SQL Server事件数据?

问题描述:

如何跟踪数据库表中的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。

请为我提供更好的解决方案。

谢谢。

编号SQL Trace(您的脚本示例)和Extended Events都不允许直接跟踪表。由于涉及到开销,这是一个有意识的设计决策,如果捕获大量数据,这可能会影响服务器的稳定性。

但是,您可以跟踪文件,然后根据需要将跟踪数据导入到表中。可以将fn_trace_gettable(用于SQL跟踪文件)和sys.fn_xe_file_target_read_file(扩展事件文件目标)表值函数用作INSERT ... SELECT的源。