web-dev-qa-db-fra.com

Journalisation des requêtes et autres T-SQL

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

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

14
Xian Garcia

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 un 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 le charger dans un tableau pour une analyse plus approfondie.

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

  4. Vous pouvez utiliser 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 .

18
Nathan Jolly

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

5
Jaycob Read

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.

En outre, 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 de connexion, etc. et vous pouvez trouver plus d'informations ici avec le T -Scripts SQL pour extraire des informations de la trace par défaut.

3
Kin Shah

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 souhaiterez peut-être étendre le modèle - par exemple, cela ignorera les requêtes commençant par ;WITH, ironiquement, et peut capturer SELECT INTO et 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.

3
Aaron Bertrand