Как я могу отфильтровать трассировку SQL по SessionID? - PullRequest
0 голосов
/ 03 июля 2019

Я использую Microsoft.AnalysisServices.dll и обрабатываю кубы и базы данных на SQL Analysis Server. Я получаю трассировку от SQL к моему коду (C #). С помощью этого следа я визуализирую события. Пока все в порядке. Если два или более идентификатора сеанса обнаруживаются, моя визуализация не работает, потому что все смешано. Поэтому я хочу отфильтровать трассировку по SessionID. Но я не знаю, как это сделать.

Я пробовал свойство «Фильтр» в «Trace», но оно не работало.

Dim xmlString = "<And>
    <Like>
      <ColumnID>39</ColumnID>
      <Value>0C2E42EB-11CD-40B2-9D65-E2FAB4D1378D</Value>
    </Like>
  </And>"
Dim xml As Xml.XmlDocument = New Xml.XmlDocument()
xml.LoadXml(xmlString)
trc.Filter = xml.DocumentElement

Это мой код.

trc = server.Traces.FindByName("TestServerTraces")
        If trc IsNot Nothing Then trc.Drop()
        trc = server.Traces.Add("TestServerTraces", "TestServerTraces")

        Dim onTraceEvent As New TraceEventHandler(AddressOf DefaultTrace_OnEvent_Invoke)
        Dim onTraceStopped As New TraceStoppedEventHandler(AddressOf DefaultTrace_Stopped_Invoke)
        AddHandler trc.OnEvent, onTraceEvent
        AddHandler trc.Stopped, onTraceStopped

        trc.LogFileName = ("TestServerTraces_" & (CType((DateTime.Now.Year * 10000 + DateTime.Now.Month * 100 + DateTime.Now.Day), Int64)).ToString() & "_" + (CType((DateTime.Now.Hour * 10000 + DateTime.Now.Minute * 100 + DateTime.Now.Second), Int64)).ToString() & ".trc")
        trc.LogFileSize = 100
        trc.LogFileRollover = True
        trc.AutoRestart = False

#Region "Trace Columns"
        trc.Events.Clear()

#Region "ProgressReportBegin Columns"

        te = trc.Events.Add(TraceEventClass.ProgressReportBegin)
        te.Columns.Add(TraceColumn.EventClass)
        te.Columns.Add(TraceColumn.EventSubclass)
        te.Columns.Add(TraceColumn.CurrentTime)
        te.Columns.Add(TraceColumn.StartTime)
        te.Columns.Add(TraceColumn.JobID)
        te.Columns.Add(TraceColumn.SessionType)
        te.Columns.Add(TraceColumn.ObjectID)
        te.Columns.Add(TraceColumn.ObjectType)
        te.Columns.Add(TraceColumn.ObjectName)
        te.Columns.Add(TraceColumn.ObjectPath)
        te.Columns.Add(TraceColumn.ObjectReference)
        te.Columns.Add(TraceColumn.ConnectionID)
        te.Columns.Add(TraceColumn.DatabaseName)
        te.Columns.Add(TraceColumn.NTUserName)
        te.Columns.Add(TraceColumn.NTDomainName)
        te.Columns.Add(TraceColumn.SessionID)
        te.Columns.Add(TraceColumn.NTCanonicalUserName)
        te.Columns.Add(TraceColumn.Spid)
        te.Columns.Add(TraceColumn.TextData)
        te.Columns.Add(TraceColumn.ServerName)

#End Region

#Region "ProgressReportCurrent Columns"

        te = trc.Events.Add(TraceEventClass.ProgressReportCurrent)
        te.Columns.Add(TraceColumn.EventClass)
        te.Columns.Add(TraceColumn.EventSubclass)
        te.Columns.Add(TraceColumn.CurrentTime)
        te.Columns.Add(TraceColumn.StartTime)
        te.Columns.Add(TraceColumn.JobID)
        te.Columns.Add(TraceColumn.SessionType)
        te.Columns.Add(TraceColumn.ProgressTotal)
        te.Columns.Add(TraceColumn.IntegerData)
        te.Columns.Add(TraceColumn.ObjectID)
        te.Columns.Add(TraceColumn.ObjectType)
        te.Columns.Add(TraceColumn.ObjectName)
        te.Columns.Add(TraceColumn.ObjectPath)
        te.Columns.Add(TraceColumn.ObjectReference)
        te.Columns.Add(TraceColumn.ConnectionID)
        te.Columns.Add(TraceColumn.DatabaseName)
        te.Columns.Add(TraceColumn.SessionID)
        te.Columns.Add(TraceColumn.Spid)
        te.Columns.Add(TraceColumn.TextData)
        te.Columns.Add(TraceColumn.ServerName)

#End Region

#Region "ProgressReportEnd Columns"

        te = trc.Events.Add(TraceEventClass.ProgressReportEnd)
        te.Columns.Add(TraceColumn.EventClass)
        te.Columns.Add(TraceColumn.EventSubclass)
        te.Columns.Add(TraceColumn.CurrentTime)
        te.Columns.Add(TraceColumn.StartTime)
        te.Columns.Add(TraceColumn.JobID)
        te.Columns.Add(TraceColumn.SessionType)
        te.Columns.Add(TraceColumn.ProgressTotal)
        te.Columns.Add(TraceColumn.IntegerData)
        te.Columns.Add(TraceColumn.ObjectID)
        te.Columns.Add(TraceColumn.ObjectType)
        te.Columns.Add(TraceColumn.ObjectName)
        te.Columns.Add(TraceColumn.ObjectPath)
        te.Columns.Add(TraceColumn.ObjectReference)
        te.Columns.Add(TraceColumn.ConnectionID)
        te.Columns.Add(TraceColumn.DatabaseName)
        te.Columns.Add(TraceColumn.SessionID)
        te.Columns.Add(TraceColumn.Spid)
        te.Columns.Add(TraceColumn.TextData)
        te.Columns.Add(TraceColumn.ServerName)

#End Region

#Region "ProgressReportError Columns"

        te = trc.Events.Add(TraceEventClass.ProgressReportError)
        te.Columns.Add(TraceColumn.EventClass)
        te.Columns.Add(TraceColumn.EventSubclass)
        te.Columns.Add(TraceColumn.CurrentTime)
        te.Columns.Add(TraceColumn.StartTime)
        te.Columns.Add(TraceColumn.EndTime)
        te.Columns.Add(TraceColumn.Duration)
        te.Columns.Add(TraceColumn.JobID)
        te.Columns.Add(TraceColumn.SessionType)
        te.Columns.Add(TraceColumn.ProgressTotal)
        te.Columns.Add(TraceColumn.IntegerData)
        te.Columns.Add(TraceColumn.ObjectID)
        te.Columns.Add(TraceColumn.ObjectType)
        te.Columns.Add(TraceColumn.ObjectName)
        te.Columns.Add(TraceColumn.ObjectPath)
        te.Columns.Add(TraceColumn.ObjectReference)
        te.Columns.Add(TraceColumn.Severity)
        te.Columns.Add(TraceColumn.Error)
        te.Columns.Add(TraceColumn.ConnectionID)
        te.Columns.Add(TraceColumn.DatabaseName)
        te.Columns.Add(TraceColumn.SessionID)
        te.Columns.Add(TraceColumn.Spid)
        te.Columns.Add(TraceColumn.TextData)
        te.Columns.Add(TraceColumn.ServerName)

#End Region

#End Region
 Try
            If processObject.GetType Is GetType(Database) Then
                processObject.Process(ProcessType.ProcessFull)
            Else
                processObject.Process(ProcessType.ProcessData)
            End If
            lblStatus.Text = "Processing completed successfully"
            PictureBox1.Image = My.Resources.accept
            isProcessing = False
        Catch ex As Exception
            errorMesages = ex.Message.Split({Environment.NewLine}, StringSplitOptions.None)
            isProcessing = False
            If Not infoNodeAdded Then
                infoNode = ProcessTree.AppendNode(New Object() {"Hatalar ve Uyarılar"}, parentForRootNodes, "infoNode")
                infoNodeAdded = True

                For i As Integer = 0 To errorMesages.Length - 2
                    Dim errorNode As TreeListNode = ProcessTree.AppendNode(New Object() {errorMesages(i)}, infoNode, "error")
                Next
            End If
            lblStatus.Text = String.Format("Processing failed: {0}", ex.Message)
            PictureBox1.Image = My.Resources._error
        End Try

        'process.Start()
        'trc.Stop()
        'trc.Drop()

Мне нужно иметь трассировку, отфильтрованную по SessionID.

Спасибо за помощь: D

...