MS SQL Server跟踪日志的集合

时间:2012-11-27 22:07:40

标签: c sql-server smo etw

我需要编写一个可以从C代码中收集SQL Server跟踪日志的程序。似乎有几种方法可以做到这一点:

  1. 使用最常见的SQL trace方法,其中跟踪文件通过存储过程映射到表。然后可以使用SQL / ODBC收集此跟踪日志。 问题在于跟踪文件是旋转的并且大小有限。在收集跟踪时,可能会交换跟踪文件,而不是收集所有事件。其次,这些存储过程在将来的版本中将是removed,因此构建它似乎不是一个好主意。
  2. 推荐的方法是使用Extended Events代替。这支持ETW和文件目标,但在服务器端设置似乎更复杂,并非所有SQL Server版本似乎都支持这一点。
  3. 还有SMO,但这不提供C API。
  4. 那么正确收集SQL Server跟踪日志的推荐方法是什么?

1 个答案:

答案 0 :(得分:-1)

这似乎是一个受欢迎的问题。学习C#并使用

public void FileToTable()
{
    TraceServer reader = new TraceServer();

    ConnectionInfoBase ci = new SqlConnectionInfo("localhost");
    ((SqlConnectionInfo)ci).UseIntegratedSecurity = true;

    reader.InitializeAsReader(ci, @"Standard.tdf");

    int eventNumber = 0;

    while (reader.Read())
    {
        Console.Write( "{0}\n", reader.GetValue(0).ToString() );
    }
    reader.Close();        
}