如何通过SessionID过滤SQL跟踪?

时间:2019-07-03 16:04:59

标签: c# .net vb.net ssas trace

我正在使用Microsoft.AnalysisServices.dll,并且在SQL Analysis Server上处理多维数据集和数据库。我从SQL跟踪到我的代码(C#)。通过使用此跟踪,我可以看到事件。暂时一切都很好。如果要跟踪两个或多个sessionID,则我的可视化将无法正常工作,因为一切都混合了。所以我想通过SessionID过滤跟踪。但是我不知道该怎么做。

我尝试了“跟踪”的“过滤器”属性,但无效。

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

0 个答案:

没有答案