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:
--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.