Puis-je voir courir historique des requêtes sur une base de données SQL Server?

dba.stackexchange https://dba.stackexchange.com/questions/4043

  •  16-10-2019
  •  | 
  •  

Question

Quelqu'un en cours d'exécution d'une requête sur notre base de données SQL Server à distance et leur système est écrasé.

Ils ont aucune sauvegarde de cette requête et que vous voulez voir ce qui a été exécuté sur le serveur.

Est-il possible de trouver cette requête dans un journal ou dans un endroit historique?

Était-ce utile?

La solution

Grant similaires Fritchey avait la question où il avait SSMS fermé et a perdu la requête qu'il avait travaillé sur ... blogué ici: Oh **********!

EDIT

Pour faire un peu plus en détail d'une réponse, le REFERENCEE lien ci-dessus Grant fournit une requête simplement aller dans le cache sur l'instance de retirer la requête que vous aviez juste d'exécuter (ou du moins tenter de):

SELECT  dest.text
FROM    sys.dm_exec_query_stats AS deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE   deqs.last_execution_time > '5/19/2011 11:00'
        AND dest.text LIKE 'WITH%';

Quelques autres options qui ont été notées dans les commentaires du blog de Grant:

Autres conseils

2005+, trace par défaut à la rescousse.

Les rouleaux de trace par défaut sur SQL mais à 20mb conserve l'histoire de 5 traces. Avec l'accès au serveur, vous pouvez récupérer les fichiers * de .trc à partir du répertoire MSSQL \ Log. Si vous ne pouvez pas accéder au serveur, ce qui suit vous donnera le nom du fichier de trace par défaut actuelle:

SELECT * FROM ::fn_trace_getinfo(default) 

Si le fichier actuel est par exemple E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, les fichiers précédents doivent être log_199.trc, log_198.trc etc. Obtenez le contenu de la trace avec:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)

peut être en mesure de récupérer les informations à partir des plans de requêtes mises en cache, vérifiez BOL pour plus d'informations sur sys.dm_exec_query_stats ou exécuter ce du studio de gestion connecté à la même base de données:

SELECT  d.plan_handle ,
        d.sql_handle ,
        e.text

FROM    sys.dm_exec_query_stats d
        CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

filtrer la sortie avec

WHERE text like '%something%'

pour affiner les résultats.

Si la base de données était en mode de récupération complète alors il pourrait y avoir une chance de récupérer des données et obtenir un aperçu de ce qui a été fait par la lecture de journal des transactions.

Malheureusement, cela est pas pris en charge par défaut, mais il y a des façons de le faire.

Vous pouvez essayer d'utiliser des outils tiers tels que ApexSQL Log ou SQL Log Rescue (gratuit mais SQL 2000 uniquement).

Une autre option est d'essayer d'utiliser des fonctions non documentées DBCC LOG ou fn_dblog. Ceci est plus complexe, mais gratuit.

Si votre base de données est réglé sur le modèle de récupération complète, vous pouvez enquêter sur vos sauvegardes du journal des transactions. Voir fn_dump_dblog pour plus d'informations.

ApexSQL a une fonctionnalité 'requêtes' Exécuté qui vous permet de rechercher et filtrer par date.

Je ne sais pas si elle tire l'histoire du cache SSMS ou conserve en fait une trace de par lui-même. Vous pouvez essayer de l'installer et de l'espoir pour le mieux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top