Détecter un problème sur SQL Server sur Linux

S’applique à :SQL Server - Linux

Cet article explique comment résoudre les problèmes liés à l’exécution de SQL Server sur Linux ou dans un conteneur Linux. Lorsque vous détectez un problème de SQL Server sur Linux, n’oubliez pas de consulter les fonctionnalités prises en charge et les limitations connues dans les Notes de publication de SQL Server 2017 sur Linux.

Pour obtenir des réponses aux questions fréquemment posées, consultez la FAQ de SQL Server sur Linux.

Dépannage des échecs de connexion

Si vous avez des difficultés à vous connecter à votre instance SQL Server Linux, vous devez vérifier quelques points.

  • Si vous ne parvenez pas à vous connecter localement à l’aide de localhost, essayez d’utiliser plutôt l’adresse IP 127.0.0.1. Il est possible que localhost ne soit pas correctement mappé à cette adresse.

  • Vérifiez que le nom du serveur ou l’adresse IP est accessible à partir de votre machine client.

    Conseil

    Pour trouver l’adresse IP de votre machine Ubuntu, vous pouvez exécuter la commande ifconfig :

    sudo ifconfig eth0 | grep 'inet addr'
    

    Pour Red Hat, vous pouvez utiliser la commande ip addr :

    sudo ip addr show eth0 | grep "inet"
    

    Une exception à cette technique est associée aux machines virtuelles Azure. Pour les machines virtuelles Azure, recherchez l’adresse IP publique de la machine virtuelle dans la Portail Azure.

  • Le cas échéant, vérifiez que vous avez ouvert le port SQL Server (par défaut 1433) sur le pare-feu.

  • Pour les machines virtuelles Azure, vérifiez que vous disposez d’une règle de groupe de sécurité réseau pour le port SQL Server par défaut.

  • Vérifiez que le nom d’utilisateur et le mot de passe ne contiennent pas de fautes de frappe, d’espaces supplémentaires ni de casse incorrecte.

  • Essayez de définir explicitement le protocole et le numéro de port avec le nom du serveur, comme dans l’exemple suivant : tcp:servername,1433.

  • Des problèmes de connectivité réseau peuvent également entraîner des délais d’attente et des erreurs de connexion. Une fois que vous avez vérifié vos informations de connexion et la connectivité réseau, réessayez de vous connecter.

Gérer le service SQL Server

La section suivante montre comment gérer l’exécution des conteneurs Docker SQL Server. Pour gérer les services sur Linux, consultez Démarrage, arrêt et redémarrage des services SQL Server sur Linux.

Gérer l’exécution du conteneur Docker SQL Server

Vous pouvez accéder à l’état et à l’ID de conteneur du dernier conteneur Docker SQL Server créé en exécutant la commande suivante (l’ID se trouve sous la colonne CONTAINER ID) :

sudo docker ps -l

Vous pouvez arrêter ou redémarrer le service SQL Server en fonction des besoins à l’aide des commandes suivantes :

sudo docker stop <container ID>
sudo docker restart <container ID>

Conseil

Pour plus de conseils sur la résolution des problèmes liés à Docker, consultez Résoudre des problèmes de conteneurs Docker SQL Server.

Accéder aux fichiers journaux

Le moteur de base de données SQL Server consigne dans le fichier /var/opt/mssql/log/errorlog dans les installations Linux et de conteneur. Vous devez être en mode superutilisateur pour parcourir ce répertoire.

Le programme d’installation consigne les journaux dans /var/opt/mssql/setup-<time stamp representing time of install>. Parcourez les fichiers du journal des erreurs avec n’importe quel outil compatible à UTF-16, par exemple vim ou cat :

sudo cat errorlog

Si vous préférez, vous pouvez également convertir les fichiers au format UTF-8 pour les lire avec plus ou moins à l’aide de la commande suivante :

sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>

Événements étendus

Les événements étendus peuvent être interrogés à l’aide d’une commande SQL. Pour plus d’informations, consultez Événements étendus.

Vidages sur incident

Recherchez des vidages sur incident dans le répertoire de journaux Linux. Vérifiez dans le répertoire /var/opt/mssql/log les vidages Linux Core (extension .tar.gz2) et les minidumps SQL (extension .mdmp).

Par exemple, procédez comme suit pour afficher les vidages Core :

sudo ls /var/opt/mssql/log | grep .tar.gz2

Pour les dumps SQL, utilisez le script suivant :

sudo ls /var/opt/mssql/log | grep .mdmp

Démarrer SQL Server en mode de configuration minimale ou en mode mono-utilisateur

Démarrer SQL Server en mode de configuration minimale

Ce mode est utile lorsqu’une valeur de configuration définie (espace mémoire insuffisant, par exemple) a empêché le serveur de démarrer.

sudo -u mssql /opt/mssql/bin/sqlservr -f

Démarrer SQL Server en mode mono-utilisateur

Il est parfois nécessaire de démarrer une instance de SQL Server en mode mono-utilisateur à l’aide de l’option de démarrage -m. Pour plus d’informations, consultez Paramètres de démarrage. Vous pouvez par exemple vouloir modifier les options de configuration du serveur ou récupérer une base de données master ou une autre base de données système endommagée.

Par exemple, utilisez le script suivant pour démarrer SQL Server en mode mono-utilisateur :

sudo -u mssql /opt/mssql/bin/sqlservr -m

Ce script démarre SQL Server en mode mono-utilisateur avec sqlcmd :

sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd

Démarrez toujours SQL Server sur Linux avec l’utilisateur mssql afin d’éviter les problèmes de démarrage ultérieurs. Par exemple : sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]

Si vous avez démarré accidentellement SQL Server avec un autre utilisateur, vous devez remplacer la propriété des fichiers de base de données SQL Server par l’utilisateur mssql avant de démarrer SQL Server avec systemd. Par exemple, pour changer la propriété de tous les fichiers de base de données sous /var/opt/mssql à l'utilisateur mssql, exécutez la commande suivante :

chown -R mssql:mssql /var/opt/mssql/

Reconstruire des bases de données système

En dernier recours, vous pouvez choisir de régénérer les bases de données master et model vers les versions par défaut.

Avertissement

Ce processus est dangereux, car il implique de supprimer toutes les données système SQL Server que vous avez configurées, y compris les informations relatives à vos bases de données utilisateur (mais pas les bases de données utilisateur elles-mêmes).

Vous devez par la suite attacher les bases de données utilisateur à l’instance. Sont également supprimées d’autres informations stockées dans les bases de données système :

  • Informations sur la clé principale de base de données
  • Tous les certificats chargés dans master
  • le mot de passe pour la connexion SA
  • Informations relatives aux travaux provenant de msdb
  • Informations Database Mail provenant de msdb
  • sp_configure options

Vous ne pouvez rattacher les bases de données utilisateur chiffrées avec transparent data encryption (TDE) que si vos certificats et clés privées sont également sauvegardés.

Ne suivez cette procédure que si vous en comprenez les implications.

  1. Arrêter le moteur de base de données SQL Server

    sudo systemctl stop mssql-server
    
  2. Exécutez sqlservr avec le paramètre force-setup

    sudo -u mssql /opt/mssql/bin/sqlservr --force-setup
    

    Démarrez toujours SQL Server sur Linux avec l’utilisateur mssql afin d’éviter les problèmes de démarrage ultérieurs.

  3. Une fois que vous voyez le message « La récupération est terminée », appuyez sur Ctrl + C. Cela arrête SQL Server.

  4. Reconfigurez le mot de passe.

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    
  5. Démarrez SQL Server et reconfigurez le serveur, en restaurant ou en rattachant toutes les bases de données utilisateur.

    sudo systemctl start mssql-server
    

Améliorer les performances

De nombreux facteurs ont une incidence sur les performances, notamment la conception de bases de données, le matériel et les demandes de charge de travail. Si vous cherchez à améliorer les performances, commencez par consulter les meilleures pratiques dans l’article Meilleures pratiques en matière de performances et lignes directrices de configuration pour SQL Server sur Linux. Explorez ensuite certains des outils disponibles pour résoudre les problèmes de performances.

Problèmes courants

  1. Vous ne pouvez pas vous connecter à votre instance SQL Server distante.

    Consultez la section Résolution des problèmes de l'article Se connecter à SQL Server sur Linux.

  2. Vous rencontrez le message d’erreur : ERROR: Hostname must be 15 characters or less.

    Il s’agit d’un problème connu qui se produit chaque fois que le nom de la machine qui tente d’installer le package SQL Server comporte plus de 15 caractères. Il n’existe actuellement aucune solution de contournement autre que la modification du nom de la machine. Pour ce faire, modifiez les deux /etc/hostname et /etc/hosts, modifiez le nom d’hôte, enregistrez chaque fichier et redémarrez l’ordinateur.

  3. Le mot de passe d’administration de système (AS) doit être réinitialisé, ce qui arrête temporairement le service SQL Server.

    Si vous avez oublié le mot de passe AS ou que vous devez le réinitialiser pour une raison quelconque, procédez comme suit.

    Connectez-vous au terminal hôte, exécutez les commandes suivantes et suivez les invites pour réinitialiser le mot de passe SA :

    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf setup
    
  4. La présence de caractères spéciaux dans les mots de passe de connexion provoque des erreurs ou des échecs de connexion.

    En fonction des caractères utilisés dans le mot de passe de connexion SQL Server, vous devrez peut-être ajouter un caractère d’échappement (barre oblique inverse) pour vous en servir dans une commande Linux. Par exemple, vous devez y ajouter le caractère d’échappement signe dollar ($) chaque fois que vous l’utilisez dans un script de commande/shell de terminal :

    Ne fonctionne pas  :

    sudo sqlcmd -S myserver -U sa -P Test$$
    

    Fonctionne :

    sqlcmd -S myserver -U sa -P Test\$\$
    

Obtenir de l’aide

Contribuer à la documentation SQL

Saviez-vous que vous pouvez modifier le contenu SQL vous-même ? Dans ce cas, non seulement vous nous aidez à améliorer notre documentation, mais vous êtes également cité en tant que contributeur à la page.

Pour plus d’informations, consultez Guide pratique pour contribuer à la documentation SQL Server