Share via


SQL Server sur Linux : problèmes connus

Les sections suivantes décrivent les problèmes connus liés à SQL Server sur Linux.

Général

Le tableau suivant répertorie les problèmes les plus courants liés à SQL Server sur Linux.

Problème Résolution
La longueur du nom d'hôte dans lequel SQL Server est installé doit être inférieure ou égale à 15 caractères. Remplacez le nom dans /etc/hostname par une valeur de 15 caractères maximum.
Le paramétrage manuel de l’heure du système à rebours entraîne l’arrêt de la mise à jour de l’heure du système interne par SQL Server dans le moteur de base de données. Redémarrez SQL Server.
Seules les installations à instance unique sont prises en charge. Si vous souhaitez avoir plusieurs instances sur un hôte donné, envisagez d’utiliser des machines virtuelles ou des conteneurs Linux.
SQL Server Configuration Manager ne peut pas se connecter à SQL Server sur Linux. Aucun.
La langue par défaut de la connexion sa est l'anglais. Modifiez la langue de la connexion sa à l’aide de l’instruction ALTER LOGIN.
Le fournisseur OLE DB journalise l’avertissement suivant :

Failed to verify the Authenticode signature of 'C:\binn\msoledbsql.dll'. Signature verification of SQL Server DLLs will be skipped. Genuine copies of SQL Server are signed. Failure to verify the Authenticode signature might indicate that this isn't an authentic release of SQL Server. Install a genuine copy of SQL Server or contact customer support.
Aucune action n’est requise. Le fournisseur OLE DB est signé avec SHA256. Le moteur de base de données SQL Server ne valide pas correctement le fichier .dll signé.
La commande Réinitialiser le mot de passe à l’aide de mssql-conf génère l’erreur suivante :

Unable to set the system administrator password. Please consult the ERRORLOG in /path for more information.
Le message d’erreur est un faux négatif. La réinitialisation du mot de passe a réussi et vous pouvez continuer à utiliser le nouveau mot de passe.

S’applique uniquement aux images conteneurs de SQL Server 2022 (16.x).

Bases de données

  • La base de données master ne peut pas être déplacée avec l'utilitaire mssql-conf. D'autres bases de données système peuvent être déplacées avec mssql-conf.

  • Lorsque vous restaurez une base de données qui a été sauvegardée sur SQL Server sur Windows, vous devez utiliser la clause WITH MOVE dans l’instruction Transact-SQL. Pour plus d’informations, consultez Migrez une base de données SQL Server de Windows vers Linux à l’aide de la sauvegarde et de la restauration.

  • Certains algorithmes (suites de chiffrement) pour le protocole TLS (Transport Layer Security) ne fonctionnent pas correctement avec SQL Server sur Linux. Cela entraîne des échecs de connexion lors d'une tentative de connexion à SQL Server, ainsi que des problèmes lors de l'établissement de connexions entre les réplicas dans des groupes à haute disponibilité.

    Pour résoudre ce problème, modifiez le script de configuration mssql.conf pour SQL Server sur Linux afin de désactiver les suites de chiffrement problématiques, en procédant comme suit :

    1. Ajoutez la section suivante à /var/opt/mssql/mssql.conf. Le point d’exclamation (!) annule l’expression. Il indique à OpenSSL de ne pas utiliser la suite de chiffrement qui est placée après.

      [network]
      tlsciphers=AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!ECDHE-RSA-AES128-GCM-SHA256:!ECDHE-RSA-AES256-GCM-SHA384:!ECDHE-ECDSA-AES256-GCM-SHA384:!ECDHE-ECDSA-AES128-GCM-SHA256:!ECDHE-ECDSA-AES256-SHA384:!ECDHE-ECDSA-AES128-SHA256:!ECDHE-ECDSA-AES256-SHA:!ECDHE-ECDSA-AES128-SHA:!ECDHE-RSA-AES256-SHA384:!ECDHE-RSA-AES128-SHA256:!ECDHE-RSA-AES256-SHA:!ECDHE-RSA-AES128-SHA:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-DSS-AES256-SHA256:!DHE-DSS-AES128-SHA256:!DHE-DSS-AES256-SHA:!DHE-DSS-AES128-SHA:!DHE-DSS-DES-CBC3-SHA:!NULL-SHA256:!NULL-SHA
      
    2. Démarrez SQL Server avec la commande suivante.

      sudo systemctl restart mssql-server
      
  • Les bases de données SQL Server 2014 (12.x) sur Windows qui utilisent l’OLTP en mémoire ne peuvent pas être restaurées sur SQL Server sur Linux. Si votre base de données SQL Server 2014 (12.x) utilise l’OLTP en mémoire, mettez d’abord à niveau les bases de données vers une version plus récente de SQL Server sur Windows. Vous pouvez ensuite les déplacer vers SQL Server sur Linux avec une sauvegarde/restauration, ou un détachement/attachement.

  • L'autorisation utilisateur ADMINISTER BULK OPERATIONS n'est pas prise en charge sur Linux pour l'instant.

  • Les sauvegardes compressées par TDE effectuées à l’aide de SQL Server 2019 (15.x) CU 16 et versions ultérieures ne peuvent pas être restaurées vers les versions antérieures de CU de SQL Server 2019 (15.x). Pour plus d'informations, consultez CORRECTIF : L'erreur 3241 se produit lors de l'exécution de RESTORE LOG ou RESTORE DATABASE.

    Les sauvegardes compressées Transparent Data Encryption (TDE) effectuées à l'aide des versions CU précédentes de SQL Server 2019 (15.x) peuvent toujours être restaurées à l'aide de SQL Server 2019 (15.x) CU 16 et versions ultérieures.

  • Lorsque vous installez SQL Server 2022 (16.x) sur Ubuntu 22.04, le message d’erreur suivant peut s’afficher : Failed to start Microsoft SQL Server Database Engine. Si vous passez en revue le journal des erreurs, vous voyez un chemin d’accès incorrect pour les bases de données système.

    Pour contourner ce problème, démarrez l’instance en mode mono-utilisateur et utilisez ALTER DATABASE ... MODIFY FILE pour déplacer l’emplacement configuré des bases de données système vers l’emplacement par défaut, /var/opt/mssql/data. Après avoir apporté cette modification, redémarrez le service.

Network (Réseau)

Les fonctionnalités qui impliquent des connexions TCP sortantes à partir du processus sqlservr, telles que les serveurs liés, PolyBase ou les groupes de disponibilité, peuvent ne pas fonctionner si les deux conditions suivantes sont réunies :

  • Le serveur cible est spécifié sous la forme d'un nom d'hôte et non d'une adresse IP.

  • IPv6 est désactivé dans le noyau de l'instance source. Pour vérifier si IPv6 est activé dans le noyau sur votre système, tous les tests suivants doivent réussir :

    • cat /proc/cmdline imprime le cmdline de démarrage du noyau actuel. La sortie ne doit pas contenir ipv6.disable=1.
    • Le répertoire /proc/sys/net/ipv6/ doit exister.
    • Un programme C qui appelle socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) doit réussir : syscall doit retourner un fd != -1 et ne pas échouer avec EAFNOSUPPORT.

L'erreur exacte dépend de la fonctionnalité. Pour les serveurs liés, une erreur de délai d’expiration de connexion apparaît. Pour les groupes de disponibilité, le DDL ALTER AVAILABILITY GROUP JOIN sur le secondaire échouera après cinq minutes avec une erreur download configuration timeout.

Pour contourner ce problème, utilisez l’une des options suivantes :

  • Utilisez des adresses IP au lieu de noms d'hôtes pour spécifier la cible de la connexion TCP.

  • Activez IPv6 dans le noyau en supprimant ipv6.disable=1 de la ligne de commande de démarrage. La méthode dépend de la distribution Linux et du chargeur de démarrage, par exemple le fichier Grub. Si vous ne souhaitez pas que IPv6 soit désactivé, vous pouvez toujours le désactiver en définissant net.ipv6.conf.all.disable_ipv6 = 1 dans la configuration sysctl (par exemple, /etc/sysctl.conf). Bien que ce paramétrage empêche toujours la carte réseau du système d’obtenir une adresse IPv6, il permet aux fonctionnalités de sqlservr de s’exécuter.

TLS 1.3 non pris en charge

S’applique à : SQL Server 2022 (16.x) uniquement.

Bien que TLS 1.3 soit pris en charge sur SQL Server 2022 (16.x) pour Windows, vous devez utiliser TLS 1.2 sur Linux.

NFS (Network File System)

Si vous utilisez des partages distants NFS (Network File System) en production, notez les exigences de support suivantes :

  • Utilisez la version 4.2 ou ultérieure de NFS. Les versions antérieures de NFS ne prennent pas en charge les fonctionnalités requises telles que la création de fichiers fallocate et partiellement alloués, communs aux systèmes de fichiers modernes.

  • Localisez uniquement les répertoires /var/opt/mssql sur le montage NFS. D'autres fichiers, tels que les binaires du système SQL Server, ne sont pas pris en charge.

  • Vérifiez que les clients NFS utilisent l'option nolock lors du montage du partage distant.

Localisation

  • Si vos paramètres régionaux ne sont pas en anglais (en_us) lors de l'installation, vous devez utiliser l'encodage UTF-8 dans votre session/terminal Bash. Si vous utilisez l'encodage ASCII, vous pouvez voir une erreur semblable à la production suivante :

    UnicodeEncodeError : le codec « ascii » ne peut pas encoder le caractère u'\xf1' à la position 8. Ordinal non compris dans la plage(128)

    Si vous ne pouvez pas utiliser l'encodage UTF-8, exécutez le programme d'installation à l'aide de la variable d'environnement MSSQL_LCID pour spécifier votre choix de langue.

    sudo MSSQL_LCID=<LcidValue> /opt/mssql/bin/mssql-conf setup
    
  • Quand vous exécutez mssql-conf setup et que vous effectuez une installation non anglaise de SQL Server, des caractères étendus incorrects peuvent s’afficher après le texte localisé « Configuration de SQL Server... ». Ou, pour les installations non latines, la phrase peut manquer complètement. La phrase manquante doit afficher la chaîne localisée suivante :

    Le PID de gestion des licences a été traité avec succès. La nouvelle édition est [édition <Nom>].

    Cette chaîne est générée uniquement à des fins d’information, et n’affecte pas la réussite de l’installation de SQL Server.

Tous les filtres ne sont pas disponibles dans cette mise en production, y compris les filtres pour les documents Microsoft Office. Pour obtenir la liste des filtres pris en charge, consultez Installer la recherche en texte intégral SQL Server sur Linux.

SQL Server Integration Services (SSIS)

Le package mssql-server-is n’est pas pris en charge sur SUSE Linux Enterprise Server (SLES). Il est pris en charge sur Red Hat Enterprise Linux (RHEL) et Ubuntu.

Les packages Integration Services peuvent utiliser des connexions ODBC sur Linux. Cette fonctionnalité a été testée avec les pilotes SQL Server et MySQL ODBC, mais elle devrait également fonctionner avec tout pilote ODBC Unicode conforme à la spécification ODBC. Au moment de la conception, vous pouvez fournir un DSN ou une chaîne de connexion pour vous connecter aux données ODBC ; vous pouvez également utiliser l'authentification Windows. Pour plus d'informations, consultez le billet de blog annonçant le support d'ODBC sur Linux.

Les fonctionnalités suivantes ne sont pas prises en charge dans cette mise en production lorsque vous exécutez des packages SSIS sur Linux :

  • Integration Services Base de données de catalogue
  • Exécution planifiée du package par SQL Server Agent
  • Authentification Windows
  • Composants tiers
  • Capture des changements de données (CDC)
  • Integration Services Scale-out
  • Feature Pack Azure pour SSIS
  • Support Hadoop et HDFS
  • Microsoft Connector pour SAP BW

Pour obtenir la liste des composants SSIS intégrés qui ne sont pas actuellement pris en charge ou qui sont pris en charge avec les limitations, consultez Limitations et problèmes connus pour SSIS sur Linux.

Pour plus d'informations concernant SSIS sur Linux, consultez les articles suivants :

SQL Server Management Studio (SSMS)

Les limitations suivantes s'appliquent à SQL Server Management Studio sur Windows connecté à SQL Server sur Linux.

  • Les plans de maintenance ne sont pas pris en charge.

  • Management Data Warehouse (MDW) et le collecteur de données dans SQL Server Management Studio ne sont pas pris en charge.

  • Les composants d'interface utilisateur SQL Server Management Studio qui ont des options d'authentification Windows ou de journal des événements Windows ne fonctionnent pas avec Linux. Vous pouvez toujours utiliser ces fonctionnalités avec d’autres options, telles que les connexions SQL Server.

  • Il est impossible de modifier le nombre de fichiers journaux à conserver.

Haute disponibilité et récupération d’urgence

S’applique à : SQL Server 2022 (16.x) uniquement.

Pour les packages SQL Server 2022 (16.x) pour RHEL 9 et Ubuntu 22.04, lorsque vous activez la pile HA/DR avec Pacemaker, vous pouvez rencontrer des problèmes avec le basculement automatique et manuel. Ces difficultés sont actuellement limitées à la pile haute disponibilité Pacemaker. D'autres piles haute disponibilité, notamment HPE Serviceguard et DH2i DxEnterprise, ne rencontrent pas ces problèmes.

Le groupe de disponibilité change constamment de rôle principal

Lorsque vous travaillez avec des groupes de disponibilité dans SQL Server 2022 (16.x) sur RHEL 8, Ubuntu 20.04 et versions ultérieures, vous pouvez rencontrer une situation où le rôle principal dans le groupe de disponibilité passe continuellement d’un nœud à un autre. Pour le moment, vous pouvez contourner le problème en procédant comme suit :

  1. Mettez à jour la propriété failure-timeout de la ressource ag_cluster et donnez-lui la valeur 0s :

    pcs resource update ag_cluster meta failure-timeout=0s
    

    Pour en savoir plus, consultez Configurer un cluster Pacemaker pour des groupes de disponibilité SQL Server.

  2. Réinitialisez le nombre d’échecs sur le cluster Pacemaker :

    crm_failcount -r ag_resource_name -delete
    

Machine Learning Services

S’applique à : SQL Server 2022 (16.x) uniquement.

Pour les packages SQL Server 2022 (16.x) pour RHEL 9 et Ubuntu 22.04, il y a quelques prérequis à prendre en compte avec cgroup-v1, avant d'installer Machine Learning Services.

  1. En tant que prérequis, cgroup-v1 doit être activé en fonction de l’utilisation de cgroupfs pour gérer manuellement les groupes cgroups Red Hat Enterprise Linux 9 à partir de Red Hat.

  2. Suivez ensuite les instructions pour installer SQL Machine Learning Services comme documenté.

  3. Désactivez l’isolation de l’espace de noms réseau.

    sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1
    
  4. Redémarrez le service mssql-launchpadd pour que les modifications prennent effet.

    sudo systemctl restart mssql-launchpadd