Journalisation des requêtes et autres T-SQL


14

Je voudrais savoir si SQL Server 2008 R2 a un schéma de journalisation par défaut pour les SELECTinstructions (ou tout autre T-SQL d'ailleurs).

Si oui, où puis-je le voir? Sinon, comment pourrais-je le configurer?

Réponses:


18

Par défaut, l'activité de SQL Server n'est pas enregistrée comme vous le souhaitez. Certaines activités d'écriture sont enregistrées dans le journal des transactions , mais cela dépend également de la configuration de vos bases de données.

Il existe quatre options principales pour suivre l'activité SELECT sur un serveur:

  1. Vous pouvez utiliser SQL Server Profiler pour vous connecter à votre serveur et surveiller une activité spécifique lorsqu'elle se produit.

  2. Vous pouvez créer une trace côté serveur pour consigner l'activité dans un fichier de trace sur le serveur, qui peut ensuite être lu par SQL Server Profiler ou en utilisant fn_trace_gettable pour la charger dans une table pour une analyse plus approfondie.

  3. Vous pouvez utiliser les événements étendus , qui offrent plus de fonctionnalités que les traces côté serveur, et que Microsoft recommande au lieu des traces côté serveur à partir de SQL Server 2012.

  4. Vous pouvez utiliser le mode d'audit C2 .

Vous pouvez utiliser SQL Server Profiler pour configurer votre trace (choisissez les événements, filtres, etc. spécifiques que vous souhaitez), puis créez un script à l'aide du menu Fichier et exécutez-le sur le serveur pour créer une trace côté serveur, comme décrit ici .


5

Il existe plusieurs solutions et techniques SQL Server pour le suivi des instructions SELECT

  1. Procédures et fonctions stockées spécialement développées - Remarque: cette méthode nécessite une connaissance avancée de la programmation T-SQL et une maintenance supplémentaire des procédures et fonctions stockées (par exemple en cas de changement de schéma de base de données). Vous pouvez en voir plus dans cet article: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Technologie de trace SQL Server - vous pouvez lire une instruction étape par étape dans cet article: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Utilisation de la fonction d'audit de SQL Server - La fonction d'audit (introduite dans SQL Server 2008) peut suivre les événements du serveur et de la base de données et utilise la technologie Extended Events. Mais, l'audit au niveau de la base de données n'est pris en charge que par les éditions SQL Server Developer et Enterprise.

  4. Utilisation d'outils tiers comme ApexSQL Audit ou Idera SQL Compliance Manager


3

Par défaut, il n'enregistre pas les instructions SELECT. Vous pouvez vous référer à ma réponse ici pour plus de détails sur l'audit des instructions SELECT.

De plus, par défaut, il n'enregistre même pas les instructions T-SQL, mais enregistre à la place des ÉVÉNEMENTS comme le changement de mémoire du serveur, l'échec de la connexion d'audit, l'événement d'audit Addlogin, etc. et vous pouvez trouver plus d'informations ici avec les scripts T-SQL pour extraire des informations de Trace par défaut.


3

Tant que vous ne vous souciez pas de qui a exécuté les requêtes, il existe plusieurs façons de voir les métriques sur les requêtes qui sont exécutées dans votre système. Cela est limité aux données depuis le dernier redémarrage et potentiellement par la pression du cache du plan (ou autre mémoire) en fonction de l'étendue de la requête.

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

Vous voudrez peut-être étendre le modèle - par exemple, cela ignorera les requêtes commençant par ;WITH , ironiquement, et peut capturer SELECT INTOet même des affectations de variables qui ne font pas référence à des tables réelles.

Cependant, si vous avez besoin de plus d'informations granulaires que cela, la réponse de Nathan est un bon début (sauf si vous allez utiliser la trace, n'utilisez PAS Profiler). N'oubliez pas que l'enregistrement de chaque requête sur votre système ne sera pas gratuit.


Je suis d'accord avec la déclaration ci-dessus, je serais incroyablement prudent quant à la surveillance de toutes les déclarations sélectionnées dans votre base de données.
Zane

J'ai essayé votre solution - est-il possible que cela ne fournisse que des procédures, des fonctions et des déclencheurs et aucune des instructions sql exécutées adhoc?
Magier

@Magier Non, sys.dm_exec_query_stats ne doit rendre compte que des instructions de requête (ad hoc ou à partir d'un module).
Aaron Bertrand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.