C#, как получить список сеансов XEvent в данной базе данных
Я пытаюсь написать простой код управления расширенными событиями на C#, но я довольно новичок в этом. Я могу настроить сеансы XEvent в SSMS и смог получить поток Linq из этого созданного сеанса в C#, используя этот пример
Что я хотел бы сделать сейчас, так это уметь запрашивать у заданной базы данных, какие сеансы существуют. Я мог бы вручную запросить sys.dm_xe*
таблиц и создайте сопоставленные классы для них, но похоже, что классы уже существуют в пространстве имен Microsoft.SqlServer.Management.XEvent - поэтому я не хотел бы делать плохую повторную реализацию, если что-то уже существует.
Конкретная таблица, содержащая, какие сеансы существуют, sys.dm_xe_sessions
,
Любой пример кода или помощь приветствуется. Спасибо!
1 ответ
Класс для поиска 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();
}