L'historique des requêtes est-il stocké dans certains fichiers journaux? Si oui, pouvez-vous me dire comment trouver leur emplacement? Sinon, pouvez-vous me donner des conseils sur la façon de le voir?
sql-server
logging
ssms
mstaniloiu
la source
la source
Réponses:
[Étant donné que cette question sera probablement fermée en double.]
Si SQL Server n'a pas été redémarré (et que le plan n'a pas été expulsé, etc.), vous pourrez peut-être trouver la requête dans le cache du plan.
Si vous avez perdu le fichier en raison de la panne de Management Studio, vous pourrez peut-être trouver les fichiers de récupération ici:
Sinon, vous devrez utiliser quelque chose d'autre à l'avenir pour vous aider à enregistrer votre historique de requêtes, comme SSMS Tools Pack comme mentionné dans la réponse d'Ed Harper - bien que ce ne soit pas gratuit dans SQL Server 2012+. Ou vous pouvez configurer un traçage léger filtré sur votre nom de connexion ou votre nom d'hôte (mais veuillez utiliser une trace côté serveur, pas Profiler, pour cela).
Comme l'a commenté @ Nenad-Zivkovic, il pourrait être utile de se joindre à nous
sys.dm_exec_query_stats
et de commander enlast_execution_time
:la source
sys.dm_exec_query_stats
et rechercher ou commander parlast_execution_time
En retard mais j'espère utile car il ajoute plus de détails ...
Il n'y a aucun moyen de voir les requêtes exécutées dans SSMS par défaut. Il existe cependant plusieurs options.
Lire le journal des transactions - ce n'est pas une chose facile à faire car il est dans un format propriétaire. Cependant, si vous avez besoin de voir les requêtes qui ont été exécutées historiquement (à l'exception de SELECT), c'est le seul moyen.
Vous pouvez utiliser des outils tiers pour cela, tels que ApexSQL Log et SQL Log Rescue (gratuit mais SQL 2000 uniquement). Consultez ce fil pour plus de détails ici SQL Server Transaction Log Explorer / Analyzer
Profileur SQL Server - le mieux adapté si vous souhaitez simplement commencer l'audit et que vous n'êtes pas intéressé par ce qui s'est passé précédemment. Assurez-vous d'utiliser des filtres pour sélectionner uniquement les transactions dont vous avez besoin. Sinon, vous vous retrouverez très rapidement avec une tonne de données.
Suivi SQL Server - le mieux adapté si vous souhaitez capturer la totalité ou la plupart des commandes et les conserver dans un fichier de trace qui peut être analysé ultérieurement.
Déclencheurs - mieux adaptés si vous souhaitez capturer DML (sauf select) et les stocker quelque part dans la base de données
la source
Le pack d'outils SSMS ajoute des fonctionnalités pour enregistrer l'historique d'exécution, entre autres.
la source
Comme d'autres l'ont noté, vous pouvez utiliser SQL Profiler, mais vous pouvez également tirer parti de ses fonctionnalités via les procédures stockées système sp_trace_ *. Par exemple, cet extrait de code SQL (sur 2000 au moins; je pense que c'est la même chose pour SQL 2008 mais vous devrez revérifier) capture
RPC:Completed
etSQL:BatchCompleted
événements pour toutes les requêtes qui prennent plus de 10 secondes à s'exécuter, et enregistre la sortie dans un fichier trace que vous pouvez ouvrir dans le profileur SQL à une date ultérieure:Vous pouvez trouver l'ID de chaque événement de trace, colonnes, etc. dans la documentation en ligne; recherche juste pour les sp_trace_create , sp_trace_setevent et sp_trace_setfiler sprocs. Vous pouvez ensuite contrôler la trace comme suit:
... où '15' est l'ID de trace (comme indiqué par sp_trace_create, que le premier script lance, ci-dessus).
Vous pouvez vérifier avec quelles traces s'exécutent:
La seule chose que je dirai avec prudence - je ne sais pas combien de charge cela imposera à votre système; cela en ajoutera, mais la taille de ce "certains" dépend probablement de l'occupation de votre serveur.
la source
Le système n'enregistre pas les requêtes de cette manière. Si vous savez que vous souhaitez le faire à l'avance, vous pouvez utiliser SQL Profiler pour enregistrer ce qui arrive et suivre les requêtes pendant l'exécution de Profiler.
la source
J'utilise la requête ci-dessous pour tracer l'activité des applications sur un serveur SQL sur lequel le profileur de trace n'est pas activé. La méthode utilise Query Store (SQL Server 2016+) au lieu des DMV. Cela donne une meilleure capacité à examiner les données historiques, ainsi que des recherches plus rapides. Il est très efficace de capturer des requêtes à exécution courte qui ne peuvent pas être capturées par sp_who / sp_whoisactive.
la source
Cela devrait vous montrer l'heure et la date auxquelles une requête a été exécutée
la source
Vous pouvez surveiller les requêtes SQL par SQL Profiler si vous en avez besoin
la source
L'historique des requêtes peut être visualisé à l'aide des vues système:
Par exemple, en utilisant la requête suivante:
Les requêtes en cours d'exécution peuvent être visualisées à l'aide du script suivant:
Cette demande affiche toutes les demandes actives et toutes les demandes qui bloquent explicitement les demandes actives.
Tous ces scripts, ainsi que d'autres, sont implémentés sous forme de représentations dans la base de données SRV , qui est distribuée librement. Par exemple, le premier script provenait de la vue [inf]. [VBigQuery] et le second de la vue [inf]. [VRequests] .
Il existe également diverses solutions tierces pour l'historique des requêtes. J'utilise Query Manager de Dbeaver : et Query Execution History de SQL Tools , qui est intégré dans SSMS :
la source
Cette fonctionnalité n'existe pas prête à l'emploi dans SSMS.
Si vous utilisez SSMS 18 ou plus récent, vous pouvez essayer SSMSPlus.
Il a une fonction d'historique des requêtes.
https://github.com/akarzazi/SSMSPlus
Avertissement: je suis l'auteur.
la source
vous pouvez utiliser "Générer automatiquement un script à chaque sauvegarde", si vous utilisez Management Studio. Ce n'est certainement pas de la journalisation. Vérifiez si cela vous est utile ..;)
la source
Si les requêtes qui vous intéressent sont des requêtes dynamiques qui échouent par intermittence, vous pouvez enregistrer le SQL, la date / heure et l'utilisateur dans une table au moment de la création de l'instruction dynamique. Cela serait fait au cas par cas, car cela nécessite une programmation spécifique et cela prend un peu plus de temps de traitement, alors ne le faites que pour les quelques requêtes qui vous préoccupent le plus. Mais avoir un journal des instructions spécifiques exécutées peut vraiment aider lorsque vous essayez de découvrir pourquoi cela échoue une fois par mois seulement. Les requêtes dynamiques sont difficiles à tester de manière approfondie et parfois vous obtenez une valeur d'entrée spécifique qui ne fonctionnera tout simplement pas et cette journalisation au moment de la création du SQL est souvent le meilleur moyen de voir ce qui était spécifiquement dans le SQL qui a été construit.
la source
Une méthode un peu originale serait de créer un script pour une solution dans AutoHotKey. Je l'utilise, et ce n'est pas parfait, mais fonctionne et est gratuit. Essentiellement, ce script attribue un raccourci clavier à CTRL+ SHIFT+ Rqui copiera le SQL sélectionné dans SSMS ( CTRL+ C), enregistrera un fichier SQL d'horodatage, puis exécutera la requête en surbrillance ( F5). Si vous n'êtes pas habitué aux scripts AHK, le premier point-virgule est un commentaire.
Les plus grandes limitations sont que ce script ne fonctionnera pas si vous cliquez sur "Exécuter" plutôt que d'utiliser le raccourci clavier, et ce script ne sauvegardera pas le fichier entier - juste le texte sélectionné. Mais, vous pouvez toujours modifier le script pour exécuter la requête, puis sélectionner tout ( CTRL+ A) avant la copie / sauvegarde.
L'utilisation d'un éditeur moderne avec des fonctionnalités de «recherche dans les fichiers» vous permettra de rechercher votre historique SQL. Vous pouvez même obtenir de la fantaisie et gratter vos fichiers dans une base de données SQLite3 pour interroger vos requêtes.
la source