Redémarrer la trace par défaut

SQL Server fournit de nombreux outils de monitoring d’arrière-plan par défaut, comme le journal SQL Server, la session d’événements étendus system_health, mais aussi une trace SQL Profiler. Cette dernière est enregistrée dans un fichier dans le répertoire des journaux, et SQL Server conserve 6 fichiers de cette trace.

Elle capture, entre autres, les événements d’échec d’authentification, la création d’objets dans TempDB, les warnings sur Hash et Sort, les grossissements de fichiers, et de nombreux autres événements. Ceux-ci peuvent aider à comprendre, a posteriori, ce qui a causé une grande consommation de CPU, des latences disque, …

Comme cette trace est écrite sur disque, il peut malencontreusement arriver que ce dernier devienne plein, provoquant alors l’arrêt automatique et forcé de la trace. Ce léger incident (l’arrêt de la trace, pas l’absence d’espace disque libre !) n’empêche aucunement l’instance de fonctionner, ou au moins d’être accessible. Cependant, comment peut-on redémarrer cette trace sans redémarrer l’instance SQL Server ?

Lire la suite

sys.dm_exec_query_profiles : la DMV qui détaille les noeuds d’un plan d’exécution réel

La lecture du plan d’exécution réel peut s’avérer être une tâche laborieuse, surtout lorsque le plan contient de nombreux opérateurs ou nÅ“uds.

Introduite avec SQL Server 2014, la vue de gestion dynamique sys.dm_exec_query_profiles nous permet de voir quel(s) nÅ“ud(s) d’un plan d’exécution réel consomme le plus de ressources et /ou de temps. C’est donc un formidable outil qui peut faire largement diminuer la recherche des points noueux d’une requête à l’étude.

Lire la suite

Vérifier la validité d’un SIRET – Algorithme de Luhn

Lors d’un chargement massif de données et/ou d’une migration, il est possible que la qualité des données soient altérées. Il faut alors tester leur qualité et valider chaque écart. Parmi ceux-ci, on peut trouver les numéro SIRET, qui permet l’identification d’un établissement ou d’une entreprise Française.

Cet identifiant numérique est constitué de 14 chiffres, et est articulé en trois parties :

  • le SIREN
  • le Numéro Interne de Classement, à quatre chiffres : c’est l’ordre de création de l’établissement par l’entreprise Française
  • une clé de contrôle, constituée d’un seul chiffre

Ce dernier est calculé à l’aide de l’algorithme de Luhn. Cet algorithme est aussi utilisé pour valider les numéros de carte bleue, et de nombreux identifiants distribués par les administrations de beaucoup de pays. Nous allons nous en servir pour vérifier la validité de SIRETs en l’implémentant spécifiquement pour ce type d’identifiant.

Lire la suite

Sauvegardes de bases de données et envoi d’email avec SQL Server Express

Windows Server Update Services (WSUS) est une application qui permet de gérer et distribuer les patch que Microsoft publie pour ses produits. Elle est supportée par SQL Server Express (with Adanced Services), et de ce fait :

  • On ne dispose pas de l’Agent SQL Server
  • On ne peut pas utiliser des plans de maintenance pour gérer les sauvegardes
  • On ne peut pas envoyer d’emails
  • La compression des fichiers de backup, introduite avec SQL Server 2008, n’est pas prise en charge

Si donc on souhaite planifier les sauvegardes de base de données, et envoyer un email en cas d’échec, on peut :

  • Remplacer un job de l’Agent SQL Server par une tâche du Planificateur de Tâches de Windows
  • Écrire une procédure stockée d’assembly pour envoyer des emails

Cet article détaille les étapes à suivre pour ce faire.
Lire la suite

Auditer les processus bloqués : l’événement blocked process report

SQL Server 2005 a introduit un évènement capturable par SQL Profiler et par les Notifications d’évènements, qui permet de retrouver les processus qui ont été bloqués. Avec la sortie de SQL Server 2008 et l’introduction des Évènements Étendus, il nous est également possible de capturer cet évènement.

Dans cet article, je vous propose de voir comment paramétrer SQL Server pour capturer cet évènement, puis de vous aider à interpréter le document XML qui décrit la situation de blocage.
Lire la suite

Vous êtes sûr d’avoir les BACKUP avec CHECKSUM parce que vous utilisez l’option COMPRESSION ? Vérifiez une seconde fois !

Après avoir vu comment compresser toutes les sauvegardes de base de données dès SQL Server 2008, il est intéressant de trouver comment activer l’option CHECKSUM de l’instruction BACKUP.

A ce sujet, la documentation indique :

Indique que l’opération de sauvegarde vérifie dans chaque page les informations de somme de contrôle et de page endommagée, si elles sont activées et disponibles, et génère une somme de contrôle pour l’ensemble de la sauvegarde. Ceci est le comportement par défaut pour une sauvegarde compressée.

Vérifions donc si cela est vrai : nous allons créer une base de données de test, et nous allons corrompre une de ses pages afin de vérifier le comportement de la sauvegarde. En effet, l’option CHECKSUM permet de détecter la corruption de données au moment de la sauvegarde. Cela permet en plus de ne pas se retrouver dans l’inconfortable situation de devoir restaurer une base de données à partir d’un fichier de sauvegarde corrompu.
Lire la suite

Rafraîchir les métadonnées des modules SQL

Après un certain temps de vie, ou après que la structure d’une base de données de développement ait été copiée depuis celle de production puis modifiée, il arrive que lorsqu’on recherche les dépendances d’un objet, dans les tables systèmes ou en choisissant l’option Dépendances du menu contextuel proposé par le clic-droit sur un module SQL (une procédure stockée, une fonction, un trigger, ou une vue définis par l’utilisateur), les données ou l’affichage soient incorrects, bien que l’on soit pourtant certain que l’objet que l’on vient de modifier dépend bien d’un autre.
Voici comment remédier à ce désagrément …
Lire la suite

Lister toutes les contraintes de clé étrangère d’une base de données

Voici un petit snippet permettant d’obtenir la liste de toutes les contraintes de clé étrangère d’une base de données avec :
– le nom de la contrainte,
Рle nom de la table r̩f̩ren̤ante,
Рle nom de la colonne r̩f̩ren̤ante dans la table r̩f̩ren̤ante,
Рle nom de la table r̩f̩renc̩e,
Рle nom de la colonne r̩f̩renc̩e dans la table r̩f̩renc̩e.

Lire la suite