2016-12-15 6 views
0

私はいくつかの単純な拡張イベント管理コードをC#で書こうとしていますが、かなり新しくなっています。私はSSMSでXEventセッションをセットアップすることができ、C#で作成したセッションからLinqストリームを取得することができましたthis exampleC#与えられたデータベースのXEventセッションのリストを取得する方法

私は今どのようなセッションが存在するかを特定のデータベースに問い合わせることができます。手動でsys.dm_xe*テーブルを照会してそれらのマッピングされたクラスを作成することもできますが、すでにクラスがMicrosoft.SqlServer.Management.XEvent名前空間に存在しているように見えます。既に存在するものがあれば、再実装がうまくいかないことは嫌です。

セッションが存在する特定のテーブルはsys.dm_xe_sessionsです。

すべてのサンプルコードまたはヘルプがありがとうございます。ありがとう!

+0

'sys.dm_xe_sessions'はアクティブなXEventセッションを返します。 'sys.server_event_sessions'は、アクティブでないものも含めて、すべてのXEventセッションを返します。それはあなたが探しているものですか? (私はあなたがC#またはTSQLコードを探しているかどうかはわかりません)。 – DMason

答えて

0

検索するクラスはXEStoreで、Microsoft.SqlServer.Managment.XEventです。これにより、拡張イベントセッションが存在するかどうかを確認したり、新しいイベントセッションを作成することができます。

using (SqlConnection conn = new SqlConnection(connString)) { 
    XEStore store = new XEStore(new SqlStoreConnection(conn)); 

    if (store.Sessions[sessionName] != null) { 
     Console.WriteLine("dropping existing session"); 
     store.Sessions[sessionName].Drop(); 
    } 

    Session s = store.CreateSession(sessionName); 
    s.MaxMemory = 4096; 
    s.MaxDispatchLatency = 30; 
    s.EventRetentionMode = Session.EventRetentionModeEnum.AllowMultipleEventLoss; 

    Event rpc = s.AddEvent("rpc_completed"); 
    rpc.AddAction("username"); 
    rpc.AddAction("database_name"); 
    rpc.AddAction("sql_text"); 
    rpc.PredicateExpression = @"sqlserver.username NOT LIKE '%testuser'"; 

    s.Create(); 
    s.Start(); 

    //s.Stop(); 
    //s.Drop(); 
} 
関連する問題