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. P>
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? p>
Détails: MS SQL Server 2008 P>
merci !! p>
5 Réponses :
SQL Server 2008 a introduit une nouvelle fonctionnalité appelée Change Capture de données (CDC) plutôt que d'utiliser des déclencheurs. En savoir plus à ce sujet ici a>. p>
Caractéristique très cool, mais je ne s'applique pas à ma situation. J'ai besoin de pouvoir voir la SQL qui touche la table afin que je puisse enquêter plus loin. Je sais que le profileur viendrait à l'esprit pour cela et c'est mon outil principal, mais avec ce projet particulier de 30 à 50 dB, des articles de DB sont tirés pour certaines pièces de logique.
Veuillez voter pour Cet élément Microsoft Connect et consultez Ce contournement de pile d'appels . P>
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/...
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
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 p> de sorte que le scénario est que le scénario est que 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. p> Les données de trace peuvent être lues avec p> La pièce de pile d'appels est p> jonction sur les DMVS p> donne des résultats (montrant l'ensemble TSQL Call Stack) P> 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. P>
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 CODE> Retourne de nombreux événements cependant.
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. P>
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. P>
p>
Les rapports montrent diverses informations utiles, y compris l'instruction SQL exécutée qui a initié le changement. P>
p>
Disclaimer: je travaille pour apexsql en tant qu'ingénieur de support em> p>