8
votes

Créez la gâchette pour enregistrer SQL qui affectait la table?

J'essaie de savoir ce qui met à jour la valeur d'une colonne et j'ai très peu connaissance de l'application. À un coup d'œil rapide, j'ai remarqué environ 90% de la logique d'activité des applications est traitée sur la base de données. Inutile de dire que la profondeur des SP, les fonctions et les déclencheurs est folle.

J'aimerais créer une gâchette sur la table en question qui enregistrera la SQL qui affectait la table. Quel SQL pourrait être utilisé pour saisir le SQL exécuté dans le contexte de la table étant mise à jour?

Détails: MS SQL Server 2008

merci !!


0 commentaires

5 Réponses :



3
votes

3 commentaires

Pour le moment, cela ressemble plus à ce que je vais avoir besoin. Je vais regarder plus dans cela au cours des prochaines minutes. Merci cade!


J'ai voté pour la fonctionnalité que vous avez liée à CADE. Voir la réponse que j'ai postée à ma question. La "pile d'appels" implémentée manuellement que vous avez liée ne vous aurait pas travaillé pour moi, car j'aurais dû modifier chaque SP, voir et déclencher. En outre, cela n'aurait pas fonctionné avec des fonctions.


Il est également possible d'obtenir une sorte de pile d'appels utilisant des événements étendus. Bien que je n'ai pas essayé moi-même. sqlblog.com/blogs/extended_events/archive/2010/05/07/...



6
votes

Ma solution

J'ai ajouté un déclencheur sur la table en question que les informations enregistrées que j'ai réduites via horlogetampes à partir de sys.dm_exec_sql_text code> et sys.dm_exec_query_stats code>. Cela a rapidement cloué ce que je cherchais. Il y avait quelques déclencheurs, je ne savais pas que cela mettait à jour des données après une mise à jour. P>

SELECT 
    qStats.last_execution_time AS [ExecutedAt],
    qTxt.[text] AS [Query], qTxt.number
FROM
    sys.dm_exec_query_stats AS qStats
    CROSS APPLY
    sys.dm_exec_sql_text(qStats.sql_handle) AS qTxt
WHERE
    qTxt.[dbid] = @DbId
    AND qTxt.[text] like '%UPDATE%'
    AND qStats.last_execution_time between @StartExecutionSearchTime and @EndExecutionSearchTime
ORDER BY
    qStats.last_execution_time DESC 


0 commentaires

9
votes

Je réalise que ce problème a déjà été résolu, mais j'étais intéressé par la manière dont il pourrait être résolu à l'aide d'événements prolongés SQL Server 2008. C'est ma première pièce avec Xevents, donc je suis sûr qu'il y a beaucoup à améliorer!

script à la configuration de la base de données de test xxx

de sorte que le scénario est que le scénario est que tablewithmysteryupdate < / code> est mis à jour mais je ne suis pas sûr de quoi. J'ajouterai un déclencheur de mise à jour qui ne fait rien pour pouvoir filtrer sur cet objet. xxx

puis exécutez le script pour créer la session Xevents, déclencher la procédure finira par descendre la pile d'appels entraînera la mise à jour, puis arrêtez la session. xxx

Les données de trace peuvent être lues avec xxx

La pièce de pile d'appels est xxx

jonction sur les DMVS xxx

donne des résultats (montrant l'ensemble TSQL Call Stack)

 pile d'appel


1 commentaires

Je ne sais pas ce qui a changé depuis '10, mais sur MSSQL 2012, votre dernière requête, sur les traces d'événement XML, ne renvoie rien. Le plus simple Sélectionnez Convert (XML, Event_Data) sous forme de données de SYS.FN_XE_FILE_TARGET_READ_FILE Retourne de nombreux événements cependant.



8
votes

En plus d'utiliser des déclencheurs qui seront tirés lorsqu'un changement de données se produit, vous pouvez utiliser les traces SQL Server et les analyser dans SQL Profiler, ou un outil d'audit tiers qui suit le code exécuté pour les modifications DML.

Utilisation de apexsql response Vous pouvez affiner l'audit uniquement l'objet de base de données spécifique (tableau Dans ce cas) et type d'événement.

Entrez la description de l'image ici

Les rapports montrent diverses informations utiles, y compris l'instruction SQL exécutée qui a initié le changement.

Entrez la description de l'image ici

Disclaimer: je travaille pour apexsql en tant qu'ingénieur de support


0 commentaires