T-SQL Stored Procedure die eine neue Trace Tabelle anlegt und Daten aus einer Trace Datei importiert

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 LoadTraceFile ToTable 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:

  1. Die Trace Datei muss vor der Ausführung der Stored Procedure bereits existieren
  2. Der Trace File Parameter muss den vollen Pfadnamen beinhalten
  3. Der Tabellennamen Parameter muss im Format Datenbank.Schema.Tabellenname angegeben werden
  4. Die Trace Tabelle darf in der Datenbank nicht existieren
  5. 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

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.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.