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

时间:2014-10-04 14:05:29

标签: sql-server sql-server-2008 sql-server-2005

如何在数据库表中跟踪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 @current_num=@current_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 @current_num=@current_num+1
     end
go

我可以通过指定sql server表而不是指定文件路径来跟踪数据吗? 我不想使用SQL Profiler。

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

相关问题