T-SQL Trace Datei in Tabelle importieren

0 Comments

Lesedauer ca.  Minuten

byFrank Piotrowsky

September 18, 2009

T-SQL Trace

Eine T-SQL Stored Procedure, die Daten aus einer Trace Datei in eine neue Trace Tabelle importiert, ohne die master- und user-Datenbanken zu vergrößern.

Gast-Artikel

Dieser Artikel ist eine direkte Übersetzung des Artikels T-SQL Stored Procedure Creates Trace Tables from Trace Files von Eli Leiba, Senior Application DBA, Israel Electric Company, der mir freundlicherweise die Genehmigung für die Übersetzung und die Veröffentlichung des Codes gegeben hat.

Anmerkung

Leider schein es den Orignal-Content nicht mehr zu geben, da der Server www.sqlmag.com nicht mehr erreichbar ist.

LoadTraceFileToTable ist eine T-SQL Stored Procedure für den Microsoft SQL Server 2005. Wie auch der SQL Server Profiler generiert auch LoadTraceFileToTable eine neue Trace Tabelle von einem Trace File. Aber anders als der SQL Server Profiler bläht LoadTraceFileToTable die master oder user Datenbank nicht unnötig auf, da die Tabelle erst nach dem Profiling-Prozess angelegt wird.

Ich habe es immer vorgezogen, die Daten aus einem Trace File (.trc) zu Analysezwecken in eine Datenbanktabelle zu importieren. So ist es für mich einfacher, die Daten zu analysieren, da es ein Leichtes ist, auf der Datenbank ein paar Abfragen laufen zu lassen. Also habe ich die Stored Procedure LoadTraceFileToTable geschrieben. Mit dieser Stored Procedure kann ich ein beliebiges Trace-Ergebnis aus einem Trace-File in eine Trace Tabelle importieren, Abfragen auf dieser ausführen und nachher wieder löschen, ohne dass mir die Original-Daten verloren gehen.

Die LoadTraceFileToTable Stored Procedure soll den SQL Server Profiler nicht ersetzen sondern eher komplettieren. Denn auch der SQL Server Profiler kann Trace Tabellen aus Trace Files erzeugen. LoadTraceFileToTable hat einen entscheidenden Vorteil gegenüber SQL Server Profiler: während des Traces kann die Tabelle schnell Millionen von Zeilen füllen und somit die master oder user Datenbank vergrößern. LoadTraceFileToTable legt die Tabelle nach dem Trace an, so dass diese Systemdatenbanken nicht unnütz vergrößert werden.

Die LoadTraceFileToTable Stored Procedure (siehe Listing 1) konstruiert eine dynamische T-SQL Abfrage. Genauer gesagt erstellt sie einen SELECT INTO Befehl, der die ::fn_trace_gettable System Funktion benutzt. Diese Funktion transformiert eine Trace Datei in eine Tabelle. Die LoadTraceFileToTable Stored Procedure fügt ebenfalls eine bigint Identity Spalte hinzu.

Die LoadTraceFileToTable Stored Procedure wurde zur Benutzung auf dem SQL Server 2005 geschrieben. Sie benötigt 2 Parameter: 1. den Pfad- und Dateinamen der Trace Datei und 2. den Namen der Tabelle, die angelegt und in die die Daten importiert werden sollen. Der Name der Zieltabelle muss im Format Datenbank.Schema.Tabellenname angegeben werden.

Wenn Sie z.B. die Datei C:\ELI_TRACE.trc in die Zieltabelle AdventureWorks.dbo.trc_04052007 importieren wollen, würden Sie den folgenden Code ausführen:

EXEC LoadTraceFileToTable
@traceFileName = C:\ELI_TRACE.trc,
@newTraceTableName = AdventureWorks.dbo.trc_04052007

Bevor Sie diesen Befehl ausführen, sollten Sie sicherstellen, dass die folgenden Voraussetzungen erfüllt sind, da sie von der Stored Procedure nicht abgetestet werden:

  • Die Trace Datei muss vor der Ausführung der Stored Procedure bereits existieren
  • Der Trace File Parameter muss den vollen Pfadnamen beinhalten
  • Der Tabellennamen Parameter muss im Format Datenbank.Schema.Tabellenname angegeben werden
  • Die Trace Tabelle darf in der Datenbank nicht existieren
  • Der SELECT INTO Befehl muss auf dem Server ausführbar sein (z.B. sollte die SELECT INTO/Bulk Copy Option aktiviert sein)

--Listing 1: The LoadTraceFileToTable Stored Procedure

CREATE PROCEDURE LoadTraceFileToTable (@traceFileName varchar(200), @newTraceTableName sysname)
AS
BEGIN
   DECLARE @tsqlStmt varchar(400)
   SET NOCOUNT ON
   SET @tsqlStmt =

      -- BEGIN CALLOUT A
      'SELECT IDENTITY(bigInt,1,1) AS Row_Number,' + '* ' + ' INTO ' + RTRIM(LTRIM(@newTraceTableName)) + ' FROM ::fn_trace_gettable ( ' + '''' + @traceFileName + '''' + ',default)'
      -- END CALLOUT A

   PRINT @tsqlStmt
   EXEC (@tsqlStmt)
   SET NOCOUNT OFF
END
GO

Guest Content

This post is a direct translation of the article T-SQL Stored Procedure Creates Trace Tables from Trace Files by Eli Leiba, Senior Application DBA, Israel Electric Company, who kindly acknowledged me the right to repulish the translated version. Thank you Eli, for sharing this great code with us.



Über den Autor

Frank Piotrowsky ist IT-Consultant und beschäftigt sich mit der Automatisierung von Arbeitsprozessen, Netzwerkadministration und deren Automatisierung, sowie mit Software-Entwicklung, die ebenfalls in diese Richtung zielt. "Wenn der Computer die Arbeit für Sie erledigen kann, warum sollten Sie sie dann tun?" ist die Philosophie, die hinter dem Thema steckt.

Tags


Das könnte Sie auch interessieren:

Frank Piotrowsky

01/01/2024

E-Mail Verschlüsselung Microsoft 365

E-Mail Verschlüsselung Microsoft 365
Remotedesktop über Gateway ohne VPN verbinden
Remotedesktopverbindung: RDG Zertifikat installieren

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
>