29
Création de fichiers de trace SQL Server Profiler côté serveur par Nicolas Souquet (elsuket.developpez.com) (Blog) Date de publication : 27/10/2009 Dernière mise à jour : 27/10/2009

Fichier Trace Cote Serveur

  • Upload
    dzar123

  • View
    230

  • Download
    3

Embed Size (px)

DESCRIPTION

fichier trace

Citation preview

Page 1: Fichier Trace Cote Serveur

Creacuteation de fichiers de traceSQL Server Profiler cocircteacute serveur

par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

Date de publication 27102009

Derniegravere mise agrave jour 27102009

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 2 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

I - Introduction3II - Preacuteparation de la trace 3III - Obtention du script de trace SQL Server Profiler9IV - Interpreacutetation du fichier de script de trace 12V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace13

V-A - Script de creacuteation de la table dinteacutegration des traces 16V-B - Structure de la table de trace 18V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell 18

VI - Creacuteation du job de creacuteation des fichiers de trace 19VII - Exploitation des donneacutees de trace26VIII - Conclusion 28IX - Remerciements 29

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 3 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

I - Introduction

Sil est bien un outil quil est confortable dutiliser pour rechercher des problegravemes de performances sur un serveur debases de donneacutees SQL Server cest bien le Profiler de SQL Server

En effet cette interface graphique permet de capturer des donneacutees deacuteveacutenements qui se produisent au sein duneinstance SQL Server et des les analyser directement dans linterface proposeacutee ou ulteacuterieurement en enregistrantla trace dans un fichier

Nous allons voir ici comment

bull creacuteer une trace de faccedilon automatique agrave laide de lAgent SQL Serverbull larrecircter toujours de faccedilon automatiquebull la charger automatiquement dans une table de base de donneacuteesbull seacuteparer les fichiers de trace par peacuteriode (par exemple un fichier par heure)

II - Preacuteparation de la trace

Deacutemarrons SQL Server Management Studio puis rendons-nous dans le menu Outils pour deacutemarrer SQL ServerProfiler

Nous obtenons linterface graphique sous laquelle nous pouvons suivre entre autres les exeacutecutions de quelquesappels de proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 4 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il suffit de choisir les eacuteveacutenements habituels

Dans cet exemple nous seacutelectionnerons

bull RPC Completedbull Locks Deadlock Graphbull Locks Timeout (timeout gt 0)

Voyons tout dabord RPC Completed nous voulons savoir combien de pages les proceacutedures stockeacutees appeleacuteeslisent et eacutecrivent et combien de temps celles-ci mettent agrave sexeacutecuter Nous souhaitons eacutegalement connaitre le nomdes proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 5 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous cochons seulement les cases dont nous avons besoin de faccedilon agrave minimiser la charge que la tracesappropriera

bull TextData pour le code dappel complet de la proceacutedure stockeacuteebull Reads pour le nombre de pages lues agrave lexeacutecution de la proceacutedure stockeacuteebull Writes pour le nombre de pages eacutecrites agrave lexeacutecution de la proceacutedure stockeacuteebull Duration pour le temps dexeacutecution total de la proceacutedure stockeacuteebull StartTime pour savoir agrave quelle heure la proceacutedure stockeacutee sest exeacutecuteacutee

Reacuteduisons maintenant le deacutetail de toutes les cateacutegories de classes deacuteveacutenement

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 6 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons ensuite aux verrous et eacutetreintes mortelles apregraves avoir cocheacute la case Afficher tous les eacuteveacutenements Endeacuteveloppant le noeud de la cateacutegorie Locks nous obtenons

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 2: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 2 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

I - Introduction3II - Preacuteparation de la trace 3III - Obtention du script de trace SQL Server Profiler9IV - Interpreacutetation du fichier de script de trace 12V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace13

V-A - Script de creacuteation de la table dinteacutegration des traces 16V-B - Structure de la table de trace 18V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell 18

VI - Creacuteation du job de creacuteation des fichiers de trace 19VII - Exploitation des donneacutees de trace26VIII - Conclusion 28IX - Remerciements 29

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 3 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

I - Introduction

Sil est bien un outil quil est confortable dutiliser pour rechercher des problegravemes de performances sur un serveur debases de donneacutees SQL Server cest bien le Profiler de SQL Server

En effet cette interface graphique permet de capturer des donneacutees deacuteveacutenements qui se produisent au sein duneinstance SQL Server et des les analyser directement dans linterface proposeacutee ou ulteacuterieurement en enregistrantla trace dans un fichier

Nous allons voir ici comment

bull creacuteer une trace de faccedilon automatique agrave laide de lAgent SQL Serverbull larrecircter toujours de faccedilon automatiquebull la charger automatiquement dans une table de base de donneacuteesbull seacuteparer les fichiers de trace par peacuteriode (par exemple un fichier par heure)

II - Preacuteparation de la trace

Deacutemarrons SQL Server Management Studio puis rendons-nous dans le menu Outils pour deacutemarrer SQL ServerProfiler

Nous obtenons linterface graphique sous laquelle nous pouvons suivre entre autres les exeacutecutions de quelquesappels de proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 4 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il suffit de choisir les eacuteveacutenements habituels

Dans cet exemple nous seacutelectionnerons

bull RPC Completedbull Locks Deadlock Graphbull Locks Timeout (timeout gt 0)

Voyons tout dabord RPC Completed nous voulons savoir combien de pages les proceacutedures stockeacutees appeleacuteeslisent et eacutecrivent et combien de temps celles-ci mettent agrave sexeacutecuter Nous souhaitons eacutegalement connaitre le nomdes proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 5 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous cochons seulement les cases dont nous avons besoin de faccedilon agrave minimiser la charge que la tracesappropriera

bull TextData pour le code dappel complet de la proceacutedure stockeacuteebull Reads pour le nombre de pages lues agrave lexeacutecution de la proceacutedure stockeacuteebull Writes pour le nombre de pages eacutecrites agrave lexeacutecution de la proceacutedure stockeacuteebull Duration pour le temps dexeacutecution total de la proceacutedure stockeacuteebull StartTime pour savoir agrave quelle heure la proceacutedure stockeacutee sest exeacutecuteacutee

Reacuteduisons maintenant le deacutetail de toutes les cateacutegories de classes deacuteveacutenement

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 6 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons ensuite aux verrous et eacutetreintes mortelles apregraves avoir cocheacute la case Afficher tous les eacuteveacutenements Endeacuteveloppant le noeud de la cateacutegorie Locks nous obtenons

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 3: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 3 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

I - Introduction

Sil est bien un outil quil est confortable dutiliser pour rechercher des problegravemes de performances sur un serveur debases de donneacutees SQL Server cest bien le Profiler de SQL Server

En effet cette interface graphique permet de capturer des donneacutees deacuteveacutenements qui se produisent au sein duneinstance SQL Server et des les analyser directement dans linterface proposeacutee ou ulteacuterieurement en enregistrantla trace dans un fichier

Nous allons voir ici comment

bull creacuteer une trace de faccedilon automatique agrave laide de lAgent SQL Serverbull larrecircter toujours de faccedilon automatiquebull la charger automatiquement dans une table de base de donneacuteesbull seacuteparer les fichiers de trace par peacuteriode (par exemple un fichier par heure)

II - Preacuteparation de la trace

Deacutemarrons SQL Server Management Studio puis rendons-nous dans le menu Outils pour deacutemarrer SQL ServerProfiler

Nous obtenons linterface graphique sous laquelle nous pouvons suivre entre autres les exeacutecutions de quelquesappels de proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 4 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il suffit de choisir les eacuteveacutenements habituels

Dans cet exemple nous seacutelectionnerons

bull RPC Completedbull Locks Deadlock Graphbull Locks Timeout (timeout gt 0)

Voyons tout dabord RPC Completed nous voulons savoir combien de pages les proceacutedures stockeacutees appeleacuteeslisent et eacutecrivent et combien de temps celles-ci mettent agrave sexeacutecuter Nous souhaitons eacutegalement connaitre le nomdes proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 5 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous cochons seulement les cases dont nous avons besoin de faccedilon agrave minimiser la charge que la tracesappropriera

bull TextData pour le code dappel complet de la proceacutedure stockeacuteebull Reads pour le nombre de pages lues agrave lexeacutecution de la proceacutedure stockeacuteebull Writes pour le nombre de pages eacutecrites agrave lexeacutecution de la proceacutedure stockeacuteebull Duration pour le temps dexeacutecution total de la proceacutedure stockeacuteebull StartTime pour savoir agrave quelle heure la proceacutedure stockeacutee sest exeacutecuteacutee

Reacuteduisons maintenant le deacutetail de toutes les cateacutegories de classes deacuteveacutenement

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 6 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons ensuite aux verrous et eacutetreintes mortelles apregraves avoir cocheacute la case Afficher tous les eacuteveacutenements Endeacuteveloppant le noeud de la cateacutegorie Locks nous obtenons

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 4: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 4 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il suffit de choisir les eacuteveacutenements habituels

Dans cet exemple nous seacutelectionnerons

bull RPC Completedbull Locks Deadlock Graphbull Locks Timeout (timeout gt 0)

Voyons tout dabord RPC Completed nous voulons savoir combien de pages les proceacutedures stockeacutees appeleacuteeslisent et eacutecrivent et combien de temps celles-ci mettent agrave sexeacutecuter Nous souhaitons eacutegalement connaitre le nomdes proceacutedures stockeacutees

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 5 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous cochons seulement les cases dont nous avons besoin de faccedilon agrave minimiser la charge que la tracesappropriera

bull TextData pour le code dappel complet de la proceacutedure stockeacuteebull Reads pour le nombre de pages lues agrave lexeacutecution de la proceacutedure stockeacuteebull Writes pour le nombre de pages eacutecrites agrave lexeacutecution de la proceacutedure stockeacuteebull Duration pour le temps dexeacutecution total de la proceacutedure stockeacuteebull StartTime pour savoir agrave quelle heure la proceacutedure stockeacutee sest exeacutecuteacutee

Reacuteduisons maintenant le deacutetail de toutes les cateacutegories de classes deacuteveacutenement

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 6 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons ensuite aux verrous et eacutetreintes mortelles apregraves avoir cocheacute la case Afficher tous les eacuteveacutenements Endeacuteveloppant le noeud de la cateacutegorie Locks nous obtenons

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 5: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 5 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous cochons seulement les cases dont nous avons besoin de faccedilon agrave minimiser la charge que la tracesappropriera

bull TextData pour le code dappel complet de la proceacutedure stockeacuteebull Reads pour le nombre de pages lues agrave lexeacutecution de la proceacutedure stockeacuteebull Writes pour le nombre de pages eacutecrites agrave lexeacutecution de la proceacutedure stockeacuteebull Duration pour le temps dexeacutecution total de la proceacutedure stockeacuteebull StartTime pour savoir agrave quelle heure la proceacutedure stockeacutee sest exeacutecuteacutee

Reacuteduisons maintenant le deacutetail de toutes les cateacutegories de classes deacuteveacutenement

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 6 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons ensuite aux verrous et eacutetreintes mortelles apregraves avoir cocheacute la case Afficher tous les eacuteveacutenements Endeacuteveloppant le noeud de la cateacutegorie Locks nous obtenons

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 6: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 6 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons ensuite aux verrous et eacutetreintes mortelles apregraves avoir cocheacute la case Afficher tous les eacuteveacutenements Endeacuteveloppant le noeud de la cateacutegorie Locks nous obtenons

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 7: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 7 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Notons ici que quel que pour nimporte quel eacuteveacutenement la colonne SPID (identifiant de la session qui a deacuteclencheacuteleacuteveacutenement) est cocheacutee et ne peut ecirctre deacutecocheacutee tant que leacuteveacutenement associeacute est actif

Ajoutons maintenant les filtres

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 8: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 8 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Nous obtenons alors la boicircte de dialogue suivante

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 9: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 9 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et nous pouvons filtrer sur le paramegravetre correspondant au nombre de pages lues Ici nous choisissions 100 cest-agrave-dire 8Mo

Il suffit maintenant de deacutemarrer la trace comme si nous voulions la visualiser dans linterface graphique

III - Obtention du script de trace SQL Server Profiler

Pour obtenir le script de la trace que nous venons de creacuteer il suffit douvrir le menu Fichier

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 10: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 10 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

et de choisir finalement de geacuteneacuterer un script de trace pour leacutedition de SQL Server qui convient

On retrouve la boicircte de dialogue denregistrement classique dun fichier

Lenregistrement est immeacutediatement confirmeacute

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 11: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 11 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Noublions pas darrecircter la trace avant de quitter SQL Server Profiler

Retournons maintenant sous SQL Server Management Studio puis ouvrons le fichier script de trace

Nous obtenons alors le script suivant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 12: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 12 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Created by SQL Server 2008 Profiler Date 07102009 230319

-- Create a Queuedeclare rc intdeclare TraceID intdeclare maxfilesize bigintset maxfilesize = 5

-- Please replace the text InsertFileNameHere with an appropriate-- filename prefixed by a path eg cMyFolderMyTrace The trc extension-- will be appended to the filename automatically If you are writing from-- remote server to local drive please use UNC path and make sure server has-- write access to your network share

exec rc = sp_trace_create TraceID output 0 NInsertFileNameHere maxfilesize NULL if (rc = 0) goto error

-- Client side File and Table cannot be scripted

-- Set the eventsdeclare on bitset on = 1exec sp_trace_setevent TraceID 148 12 onexec sp_trace_setevent TraceID 148 14 onexec sp_trace_setevent TraceID 148 1 onexec sp_trace_setevent TraceID 189 1 onexec sp_trace_setevent TraceID 189 12 onexec sp_trace_setevent TraceID 189 13 onexec sp_trace_setevent TraceID 189 14 onexec sp_trace_setevent TraceID 10 16 onexec sp_trace_setevent TraceID 10 1 onexec sp_trace_setevent TraceID 10 17 onexec sp_trace_setevent TraceID 10 12 onexec sp_trace_setevent TraceID 10 13 onexec sp_trace_setevent TraceID 10 14 on

-- Set the Filtersdeclare intfilter intdeclare bigintfilter bigint

set bigintfilter = 100exec sp_trace_setfilter TraceID 16 0 4 bigintfilter

-- Set the trace status to startexec sp_trace_setstatus TraceID 1

-- display trace id for future referencesselect TraceID=TraceIDgoto finish

error select ErrorCode=rc

finish go

IV - Interpreacutetation du fichier de script de trace

Le premier appel de proceacutedure stockeacutee est sp_trace_create Il permet simplement de creacuteer la trace

Je vous engage agrave vous documenter sur les paramegravetres de cette proceacutedure stockeacutee systegraveme

bull Dans la BOL sp_trace_createbull Dans la documentation en ligne

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 13: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 13 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Ensuite la proceacutedure stockeacutee sp_trace_setevent est appeleacutee plusieurs fois agrave raison dune fois par eacuteveacutenement Enconsultant la documentation de cette proceacutedure stockeacutee on voit que

bull Pour tout eacuteveacutenement on doit passer lidentifiant de trace que lon retrouve en requecirctant la table systraces

bull Chaque eacuteveacutenement possegravede un identifiant qui doit ecirctre passeacute en second paramegravetre dentreacutee agrave cetteproceacutedure stockeacutee Il existe en tout plus de 200 eacuteveacutenements agrave savoir ID 148 qui correspond agrave leacuteveacutenementDeadlock GraphID 189 qui correspond agrave leacuteveacutenement LockTimeout (timeoutgt 0)ID 10 qui correspond agraveleacuteveacutenement RPCCompleted

bull Pour chaque eacuteveacutenement on doit preacuteciser les colonnes qui devront ecirctre prises en compte

On retrouvera forceacutement pour chacun des eacuteveacutenements comme nous lavons vu la colonne ndeg 12 qui correspondau SPID et en loccurrence

bull La colonne ndeg 14 qui correspond agrave la colonne StartTimebull La colonne ndeg 1 qui identifie la colonne TextDatabull La colonne ndeg 13 pour la colonne Durationbull La colonne ndeg 16 pour la colonne Reads que lon ne trouve que pour leacuteveacutenement RPCCompletedbull La colonne ndeg 17 pour la colonne Writes eacutegalement seulement pour leacuteveacutenement RPCCompleted

On peut ensuite speacutecifier des filtres avec la proceacutedure sp_trace_setfilter et comme nous avons speacutecifieacute danslinterface graphique un filtre sur les appels de proceacutedures qui provoquent la lecture de plus de 100 pages Noustrouvons dans lordre

bull Toujours lidentifiant de tracebull Lidentifiant de la colonne agrave filtrer ici la ndeg 16 Readsbull Lopeacuterateur logique AND(0) ou OR (1) car on peut speacutecifier plusieurs filtres pour la mecircme colonne par

exemple les proceacutedures entraicircnent la lecture dau moins 100 pages et dau plus 1000 pages ou lesproceacutedures dont le nom contient un mot ou un autre

bull Le dernier paramegravetre est de type BIT et permet dactiver ou deacutesactiver le filtre agrave volonteacute en appelant toutsimplement cette mecircme proceacutedure stockeacutee avec ce paramegravetre agrave 0 ce qui est envisageable mecircme si la traceest en cours dexeacutecution

V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace

Voici le script complet de gestion des fichiers de trace

Il est commenteacute autant que cela est possible et permet

bull De creacuteer des fichiers pour une trace ayant les mecircmes caracteacuteristiques (eacuteveacutenements filtres)bull Dinteacutegrer le fichier de trace preacuteceacutedent dans une table dbomaTableDeTrace (script suivant) dont le script de

creacuteation suit celui-ci agrave laide de la fonction table fn_trace_gettable A noter que lon nest pas obligeacute dinteacutegrerles fichiers dans une table

bull De supprimer les fichiers de trace que lon vient dinteacutegrer

--------------------------------- 12102009 - Nicolas SOUQUET-------------------------------ALTER PROCEDURE PsCreeTrace _cheminFichierTrace NVARCHAR(256) _minutesTrace SMALLINT -- Speacutecifie le nombre de minutes de dureacutee de la trace lt=gt peacuteriodociteacute de de renouvellement des fichiers de la trace _avecDetails BIT = 0 -- Retourne quelques caracteacuteristiques de la trace creacuteeacutee _avecIntegration BIT = 0 -- Integravegre le fichier de trace preacutecedeacutemment creacuteeacute directement de base de donneacutees localeASBEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 14: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 14 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET NOCOUNT ON -- BEGIN TRY DECLARE IDTrace INT IDTraceToStop INT cheminFichierTraceToStop NVARCHAR(256) timestampFichierTrace NCHAR(15) maxFileSize BIGINT errMsg NVARCHAR(2047) DOS VARCHAR(255) -- Veacuterifie que le chemin du fichier est -- - soit un fichier dun dossier local -- - soit un fichier dun partage reacuteseau IF ( _cheminFichierTrace NOT LIKE _ -- Reacutepertoire local AND _cheminFichierTrace NOT LIKE -- Chemin UNC ) BEGIN RAISERROR(Chemin de fichier de trace incorrect (CmonRepertoiremaTracetrc ou monServeurmonRepertoirePartageacutemonRepertoiremaTracetrc 16 1) END ----------------------------------------- -- Gestion des traces preacutecedemment creacuteeacutees ----------------------------------------- -- Recherche sil existe une trace de mecircme nom de fichier (mais avec un timestamp diffeacuterent) -- Arrecircte cette trace le cas eacutecheacuteant SELECT IDTraceToStop = id cheminFichierTraceToStop = path FROM systraces WHERE path LIKE + _cheminFichierTrace + IF IDTraceToStop IS NOT NULL BEGIN -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace DECLARE codeRetourArretTrace TINYINT -- Arrecircte la trace EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 0 IF codeRetourArretTrace = 0 BEGIN -- Ferme la trace et supprime sa deacutefinition du serveur EXEC codeRetourArretTrace = syssp_trace_setstatus IDTraceToStop 2 END ELSE BEGIN SET errMsg = CASE codeRetourArretTrace WHEN 1 THEN Erreur inconnue WHEN 8 THEN Leacutetat speacutecifieacute nest pas valide WHEN 9 THEN Le descripteur de trace speacutecifieacute nest pas valide WHEN 13 THEN Meacutemoire insuffisante END RAISERROR(Problegraveme lors de larrecirct de la trace s s 16 1 _cheminFichierTrace errMsg) END -- Integravegre le fichier dans une table de trace le cas eacutecheacuteant IF ( codeRetourArretTrace = 0 AND _avecIntegration = 1 ) BEGIN INSERT INTO dbomaTabledeTrace SELECT FROM sysfn_trace_gettable(cheminFichierTraceToStop NULL) -- Si linteacutegration sest bien passeacutee suppression du fichier de trace IF ERROR = 0 BEGIN

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 15: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 15 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

SET DOS = DEL + cheminFichierTraceToStop PRINT DOS EXEC masterdboxp_cmdshell DOS NO_OUTPUT -- A remplacer par lappel agrave une proceacutedure stockeacutee dassembly END END END

-- Supprime lextension de fichier de trace -- celle-ci est automatiquement ajouteacutee agrave la creacuteation de la trace IF RIGHT(_cheminFichierTrace 4) = trc BEGIN SELECT _cheminFichierTrace = REPLACE(_cheminFichierTrace trc ) END

-- Calcule un timestamp pour le nom du fichier de trace (Format YYYYMMDD_HHmmss) SELECT timestampFichierTrace = CONVERT(NCHAR(8) GETDATE() 112) + _ + REPLACE(CONVERT(NVARCHAR(10) GETDATE() 108) ) maxFileSize = 200 -- taille maximale du fichier de trace en Mo

-- Concategravene le nom du fichier de trace avec le timestamp SET _cheminFichierTrace = _cheminFichierTrace + timestampFichierTrace

----------------------- -- Creacuteation de la trace ----------------------- -- Calcule lheure darrecirct de la trace DECLARE heureArretTrace DATETIME SELECT heureArretTrace = DATEADD(minute _minutesTrace GETDATE()) EXEC syssp_trace_create IDTrace OUTPUT -- neacutecessaire pour parameacutetrer la trace par la suite 0 -- permet de speacutecifier quelques options Voir la BOL _cheminFichierTrace -- lextension trc est automatiquement ajouteacutee maxFileSize heureArretTrace NULL -- nombre maximal de fichiers pour la mecircme trace

----------------------------- -- Attachement des eacuteveacutenements ----------------------------- -- Permet agrave posteriori de deacutesactiver un eacuteveacutenement -- alors que la trace est toujours ne cours dexeacutecution -- en passant 0 en dernier paramegravetre agrave syssp_trace_setevent DECLARE actif BIT SET actif = 1

-- Eveacutenement Deadlock graph EXEC syssp_trace_setevent IDTrace 148 1 actif EXEC syssp_trace_setevent IDTrace 148 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 148 14 actif -- colonne StartTime

-- Eveacutenement LockTimeout (timeoutgt 0) EXEC syssp_trace_setevent IDTrace 189 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 189 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 189 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 189 14 actif -- colonne StartTime

-- Eveacutenement RPCCompleted EXEC syssp_trace_setevent IDTrace 10 1 actif -- colonne TextData EXEC syssp_trace_setevent IDTrace 10 12 actif -- colonne SPID obligatoire EXEC syssp_trace_setevent IDTrace 10 13 actif -- colonne Duration EXEC syssp_trace_setevent IDTrace 10 14 actif -- colonne StartTime EXEC syssp_trace_setevent IDTrace 10 16 actif -- colonne Reads EXEC syssp_trace_setevent IDTrace 10 17 actif -- colonne Writes

----------------------------------- -- Ajout des filtres aux eacuteveacutenements ----------------------------------- -- Le type de la valeur agrave filtrer doit correspondre agrave celui de la colonne -- pour trouver le type de la colonne voir plus loin

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 16: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 16 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

-- Ici le type de la colonne Reads est BIGINT DECLARE bigintFilter BIGINT SET bigintFilter = 100 EXEC syssp_trace_setfilter IDTrace -- identifiant de la trace 16 -- colonne de la trace 0 -- AND 0 | 1 OR 4 -- gt= bigintFilter -- valeur du filtre

------------------------ -- Deacutemarrage de la trace ------------------------ EXEC syssp_trace_setstatus IDTrace 1

------------------------------------------------- -- Affiche eacuteventuellement les deacutetails de la trace ------------------------------------------------- IF _avecDetails = 1 BEGIN SELECT id CASE status WHEN 0 THEN Arrecircteacutee WHEN 1 THEN Deacutemarreacutee END AS Statut path AS Emplacement stop_time AS DateHeureArret FROM systraces WHERE id = IDTrace END END TRY BEGIN CATCH IF EXISTS ( SELECT FROM systraces WHERE id = IDTrace ) BEGIN DECLARE arretTraceOK BIT = 0 BEGIN TRY -- gtgtgtgtgt ATTENTION ceci ne supprime pas le fichier de trace EXEC syssp_trace_setstatus IDTrace 0 -- Arrecircte la trace EXEC syssp_trace_setstatus IDTrace 2 -- Ferme la trace et supprime sa deacutefinition du serveur SET arretTraceOK = 1 END TRY BEGIN CATCH RAISERROR(Erreur agrave larrecirct de la trace s16 1 _cheminFichierTrace) END CATCH IF arretTraceOK = 1 BEGIN -- Suppression du fichier de trace eacuteventuel SET DOS = DEL + _cheminFichierTrace EXEC masterdboxp_cmdshell DOS NO_OUTPUT PRINT Arrecirct de la trace + _cheminFichierTrace + effectueacute END END -- Re-legraveve lexception SET errMsg = ERROR_MESSAGE() RAISERROR(errMsg 16 1) END CATCHEND

V-A - Script de creacuteation de la table dinteacutegration des traces

USE maBD

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 17: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 17 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

GOCREATE TABLE dbomaTableDeTrace( TextData ntext NULL BinaryData image NULL DatabaseID int NULL TransactionID bigint NULL LineNumber int NULL NTUserName nvarchar(256) NULL NTDomainName nvarchar(256) NULL HostName nvarchar(256) NULL ClientProcessID int NULL ApplicationName nvarchar(256) NULL LoginName nvarchar(256) NULL SPID int NULL Duration bigint NULL StartTime datetime NULL EndTime datetime NULL Reads bigint NULL Writes bigint NULL CPU int NULL Permissions bigint NULL Severity int NULL EventSubClass int NULL ObjectID int NULL Success int NULL IndexID int NULL IntegerData int NULL ServerName nvarchar(256) NULL EventClass int NULL ObjectType int NULL NestLevel int NULL State int NULL Error int NULL Mode int NULL Handle int NULL ObjectName nvarchar(256) NULL DatabaseName nvarchar(256) NULL FileName nvarchar(256) NULL OwnerName nvarchar(256) NULL RoleName nvarchar(256) NULL TargetUserName nvarchar(256) NULL DBUserName nvarchar(256) NULL LoginSid image NULL TargetLoginName nvarchar(256) NULL TargetLoginSid image NULL ColumnPermissions int NULL LinkedServerName nvarchar(256) NULL ProviderName nvarchar(256) NULL MethodName nvarchar(256) NULL RowCounts bigint NULL RequestID int NULL XactSequence bigint NULL EventSequence bigint NULL BigintData1 bigint NULL BigintData2 bigint NULL GUID uniqueidentifier NULL IntegerData2 int NULL ObjectID2 bigint NULL Type int NULL OwnerID int NULL ParentName nvarchar(256) NULL IsSystem int NULL Offset int NULL SourceDatabaseID int NULL SqlHandle image NULL SessionLoginName nvarchar(256) NULL PlanHandle image NULL GroupID int NULL)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 18: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 18 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

V-B - Structure de la table de trace

Nom de la colonne Type de donneacutees Nom de la colonne Type de donneacuteesApplicationName nvarchar NTUserName nvarcharBigintData1 bigint ObjectID intBigintData2 bigint ObjectID2 bigintBinaryData image ObjectName nvarcharClientProcessID int ObjectType intColumnPermissions int Offset intCPU int OwnerID intDatabaseID int OwnerName nvarcharDatabaseName nvarchar ParentName nvarcharDBUserName nvarchar Permissions bigintDuration bigint PlanHandle imageEndTime datetime ProviderName nvarcharError int Reads bigintEventClass int RequestID intEventSequence bigint RoleName nvarcharEventSubClass int RowCounts bigintFileName nvarchar ServerName nvarcharGroupID int SessionLoginName nvarcharGUID uniqueidentifier Severity intHandle int SourceDatabaseID intHostName nvarchar SPID intIndexID int SqlHandle imageIntegerData int StartTime datetimeIntegerData2 int State intIsSystem int Success intLineNumber int TargetLoginName nvarcharLinkedServerName nvarchar TargetLoginSid imageLoginName nvarchar TargetUserName nvarcharLoginSid image TextData ntextMethodName nvarchar TransactionID bigintMode int Type intNestLevel int Writes bigintNTDomainName nvarchar XactSequence bigint

V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

Mecircme si son utilisation nest pas recommandeacutee pour des raisons eacutevidentes de seacutecuriteacute voici un script qui permetdactiver lutilisation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell

IF EXISTS( SELECT FROM sysconfigurations WHERE name = xp_cmdshell AND value_in_use = 0)BEGIN EXEC syssp_configure show advanced options 1 RECONFIGURE EXEC syssp_configure xp_cmdshell 1

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 19: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 19 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

RECONFIGURE EXEC syssp_configure show advanced options 0 RECONFIGUREEND

VI - Creacuteation du job de creacuteation des fichiers de trace

Retournons sous SQL Server Management Studio pour creacuteer le travail qui permettra dexeacutecuter la proceacutedure stockeacuteede creacuteation des traces

Ajoutons quelques commentaires

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 20: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 20 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave lajout dune nouvelle eacutetape

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 21: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 21 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut que la base de donneacutees soit la mecircme que celle qui heacuteberge la table dbomatableDeTrace

Ici nous creacuteerons un fichier de trace par heure

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 22: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 22 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Passons agrave la planification du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 23: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 23 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Il faut veiller agrave speacutecifier la mecircme freacutequence que la peacuteriodiciteacute de renouvellement des fichiers de trace (paramegravetre_minutesTrace)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 24: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 24 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Validons la planification par OK

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 25: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 25 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Un nouveau clic sur le bouton OK entraicircne la creacuteation du job

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 26: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 26 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VII - Exploitation des donneacutees de trace

Nous trouvons le fichier de trace courant

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 27: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 27 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

Si nous interrogeons directement la table dbomaTableDeTrace nous verrons quil y a des nombreuses colonnessans valeur (NULL) en effet nous avons utiliseacute 6 colonnes pour notre trace mais le fichier de trace en contientun total de 66

Voici donc un petit script qui permet une consultation facile des donneacutees contenues dans la table dinteacutegration dela trace agrave laide de la fonction de table systegraveme fn_trace_geteventinfo qui donne la liste des colonnes utiliseacutees parla trace

DECLARE req VARCHAR(256) SET req = SELECT

WITH CTE_COLONNES_TRACE AS ( SELECT DISTINCT columnid FROM sysfn_trace_geteventinfo(2) )SELECT req = req + Cname + FROM systables AS TJOIN syscolumns AS C ON Tobject_id = Cobject_idJOIN CTE_COLONNES_TRACE AS CCT ON Ccolumn_id = CCTcolumnidWHERE Tname = maTableDeTrace

SET req = LEFT(req LEN(req) - 1) + FROM dbomaTableDeTraceEXEC (req)

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 28: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 28 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

VIII - Conclusion

SQL Server fournit un ensemble de proceacutedures stockeacutees et de fonctions systegraveme quil est simple dinteacutegrer dansune proceacutedure stockeacutee utilisateur pour geacuterer des fichiers de trace Il est eacutegalement possible den conserver plusieurssans pour autant les inteacutegrer en base de donneacutees et de combiner lutilisation de ces modules consacreacutes aux tracesavec un job SQL Server

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements
Page 29: Fichier Trace Cote Serveur

Creacuteation de fichiers de trace SQL Server Profiler cocircteacute serveur par Nicolas Souquet (elsuketdeveloppezcom) (Blog)

- 29 -Copyright copy 2009 - Nicolas SOUQUET Aucune reproduction mecircme partielle ne peut ecirctre faite de ce site et de lensemble de son contenu textes documents images etc sans lautorisation expresse de lauteur Sinon vous encourez selon la loi jusquagrave 3 ans de prison et jusquagrave 300000 E de dommages et inteacuterecircts

httpelsuketdeveloppezcomtutorielssqlserveurfichier-trace-cote-serveur

La geacuteneacuteration dun script de trace est une opeacuteration simple depuis linterface du profiler SQL Server Il est doncneacutecessaire de connaicirctre son fonctionnement afin de pouvoir analyser lutilisation et le comportement dune base dedonneacutees SQL Server]

IX - Remerciements

bull David Barbarin pour la relecture de cet articlebull Fleur-Anne Blain qui ma supporteacute pour la publicationbull Toute leacutequipe de Deacuteveloppez

  • Sommaire
  • I - Introduction
  • II - Preacuteparation de la trace
  • III - Obtention du script de trace SQL Server Profiler
  • IV - Interpreacutetation du fichier de script de trace
  • V - Ecriture de la proceacutedure stockeacutee de creacuteation de trace
    • V-A - Script de creacuteation de la table dinteacutegration des traces
    • V-B - Structure de la table de trace
    • V-C - Script dactivation de la proceacutedure stockeacutee systegraveme eacutetendue xp_cmdshell
      • VI - Creacuteation du job de creacuteation des fichiers de trace
      • VII - Exploitation des donneacutees de trace
      • VIII - Conclusion
      • IX - Remerciements