Vous êtes sur la page 1sur 1037

Contents

Bienvenue
Analysis Services
Calculer la croissance de la période précédente
Ne peut pas se connecter à une instance nommée
Configurer le fournisseur de données MSOLAP pour Excel
Configurer SSAS pour générer des fichiers de vidage mémoire
Déterminer le premier ou le dernier membre avec des données
L’espace disque est épuisé et SSAS se crashe
Activer le niveau d’isolation des transactions de capture instantanée
Erreur 1032 dans le journal des applications
Erreur et échec de la requête MDX dans une instance multidimensionnelle SSAS
Erreur lors de la connexion à une instance nommée
Erreur lors du traitement d’une base de données ou d’un cube
Erreur lors du traitement d’une dimension
Erreur lors de l’utilisation de PowerPivot pour Excel
La requête MDX contient l’erreur De retours agrégés
La requête MDX avec mesure calculée s’exécute lentement
Aucune propriété et aucun membre de la hiérarchie de dimension
Effectuer une requête distribuée avec OLAP Server
Résultat inattendu d’Analysis Services
Problème de performances d’écriture
NA renvoie lorsque vous exécutez une requête multi-sous-sélectionné
Erreur et code de 0x80004005 fournisseur WMI
Machine virtuelle Azure SQL
Échec de l’installation FCI avec erreur sur azure VM
Services de qualité des données
Échec de l’exportation DQS vers un fichier Excel 64 bits avec erreur
DQSInstaller peut ne pas accéder au dossier temp
Erreur lors de l’exécutement de la transformation nettoyage DQS
Moteur de base de données
Administration et gestion
SQL Server de démarrage
SQL Server de démarrage
Erreur de refus d’accès SQL Server’accès ne démarre pas
Erreur 17113 lorsque vous démarrez SQL Server service
Erreur 17182 lorsque vous démarrez SQL Server service
Erreur 1068 lors du démarrage SQL Server
Erreur 1069 lors du démarrage SQL Server
L’ID d’événement 17058 et SQL Server ne démarre pas
L’ID d’événement 1814 et SQL Server ne démarre pas
L’ID d’événement 33565 et SQL Server ne démarre pas
L’ID d’événement 33566 et SQL Server ne démarre pas
L’ID d’événement 7000 et SQL Server ne démarre pas
Erreurs 1450 et 665 lors de l’exécution du DBCC
Erreurs 17053 et 926 lors de l’exécution du DBCC
Erreurs 8967 et 8921 lors de l’exécution du DBCC
Une erreur d’O/S non récoverable lorsque vous utilisez la sauvegarde vers l’URL
Une base de données TDE peut ne pas récupérer
Violations d’accès et fichiers de vidage mémoire
Les tâches d’activation s’exécutent au-dessus de la limite
Le travail de l’agent peut échouer avec l’erreur 65535
Impossible de migrer l’assembly vers SQL Server erreur 2017
Assertion lorsque vous exécutez l’insertion en bloc ou bcp
Échec de l’agent ASR ou de la sauvegarde VSS non-composant
Échec des travaux Azure Site Recovery sur les serveurs hébergeant SQL serveurs
Sauvegarder une base de données à l’aide d’une application de sauvegarde VSS
Résolution des problèmes de sauvegarde et de restauration
Opération de sauvegarde dans la table historique du jeu de sauvegarde
Comportement des sauvegardes compressées
Configuration des autorisations pour accéder aux données distantes
Considérations sur larow automatique et l’autoshrink
Considérations lors de l’utilisation de la Full-Text pour la recherche
Se crashe lorsque vous exécutez une requête de serveur lié Oracle
L’autorisation Créer une base de données est enregistrée
Moteur de base de données Exigences en matière d’entrée/sortie
Tirets ignorés dans la recherche avec SQL Full-Text
Défragmentation des lecteurs de disque de base de données
Erreur 0x80040e97 lors de l’utilisation de la recherche en texte intégral
Erreur 3156 lors de la restauration d’une base de données
Erreur après avoir effectué une rotation de clé ou de certificat TDE
Erreur lors de la backing up in-memory database
Erreur lors de la création d’une capture instantanée
Erreur lorsque vous exécutez un objet CLR ou créez un assembly
L’index de texte intégral n’indexe pas les valeurs d’attribut
Les index de texte intégral cessent de se remplir
Conditions requises pour le sous-système d’I/S pour tempdb
Améliorer les performances des requêtes en texte intégral
Délai d’verrouillage lors de l’exécution du DBCC
Algorithmes de journalisation et de stockage des données
Gérer le journal des erreurs
Transmettre une variable à une requête de serveur lié
Problèmes de performances lors de l’utilisation d’index Columstore avec des pages
de grande taille
La gestion basée sur la stratégie génère des alertes
La restauration ou la récupération peut échouer
Exécuter un objet COM basé sur une DLL
Planifier et automatiser les sauvegardes de bases de données
Configurer et dépanner un serveur lié à une base de données Oracle
L’espace utilisé par un tableau n’est pas libéré
Prise en charge des bases de données sur des volumes compressés
Prise en charge des fichiers de base de données réseau
Prise en charge des composants de technologie iSCSI
La transaction n’est plus valide lors de l’utilisation de la messagerie de base de
données
Le fichier journal des transactions n’augmente pas
Résoudre les erreurs DBCC
Impossible de commencer une transaction distribuée
Les pilotes d’hôte virtuel entraînent des problèmes de cohérence des données
Les mots ne sont pas renvoyés par un décomposeur de mots anglais
Développement d’applications clientes
Ne peut pas désinstaller complètement le pilote ODBC
Problèmes de connexion
Ne peut pas se connecter à distance à l’aide de TCP/IP
Kerberos Configuration Manager est disponible
Résolution des erreurs de connectivité
Erreur d’autorité de certification non valide
Conception et développement de base de données
Can’t make a remote connection from a CLR trigger
Erreur 556 : échec d’insertion exec
L’exécution du CLR échoue avec TypeInitializationException
Index filtré non utilisé dans les requêtes
Améliorations de la gestion de certains types de données et opérations peu
courantes
Itérer dans le jeu de résultats à l’aide de T-SQL
Stratégie pour les assemblys .NET Framework non testés
La requête renvoie des résultats incorrects
Supprimer les lignes en double du tableau
Faire pivoter un tableau
Problèmes de délai d’SQL des objets CLR
Utiliser une procédure stockée étendue ou SP_OA pour charger le CLR
Fonctionnalités de haute disponibilité et de récupération d’urgence
Groupes de disponibilité
Erreur 9002 sur le réplica principal
DB AlwaysOn en attente de récupération ou état suspect
Le temps d’attente de la connexion de l’écoute dans plusieurs sous-réseaux
Dégradation des performances des requêtes sur les réplicas secondaires
Résolution des problèmes deover automatique
Résolution des problèmes AlwaysOn
Mise en miroir de bases de données
Les bases de données en miroir sont déconnectées
Failover Clusters
Ressource de cluster en état d’échec
Échec de la règle de validation de cluster
Créer des bases de données ou modifier des emplacements de fichiers disque
Échec de l’installation SQL Server sur un disque CSV
Re-créer manuellement des clés de Registre pour les ressources de cluster
Stratégie de prise en charge des configurations en cluster
Windows Dépendances de ressources de cluster de failover
Copie des journaux de transaction
Configurer la sécurité pour la livraison des journaux de bord
Le moniteur de connexion lève une erreur 14420
Installation, correction et mise à niveau
Conditions requises de .Net Framework pour SQL Server
Tentative d’effectuer une erreur d’opération non autorisée
Description du dossier Cache de mise à jour
Erreurs différentes lors de l’installation SQL Server 2008 R2
Code d’erreur 1642 si la mise à jour est appliquée
Erreur si vous modifiez le répertoire des composants partagés
La période d’évaluation a expiré lorsque vous utilisez SSMS
Échec de la vérification des règles Fusion ATL
CUS inapplicables répertoriés dans WSUS, MU ou SCM
Échec de l’installation lorsque vous supprimez des droits d’utilisateur
Message d’annuaire d’utilisateurs non valide lors de l’installation de CU ou SP
Nommer des zones de schéma et de correction pour SQL mises à jour
Nouveau modèle de maintenance de mu
Erreur d’autorisation lorsque vous utilisez un point de montage de volume
Supprimer une installation partielle d’SQL serveur
Restaurer les fichiers cache du programme d Windows installer manquants
Le service peut ne pas démarrer après l’installation du correctif
Le programme d’installation cesse de répondre lors de la mise à niveau
SQL sur Windows 7 ou Windows Server 2008 R2
SQL Server 2008 R2 et SQL Server 2008
SQL Server 2012
Installation SxS des versions X64 et X86 de SSRS 2008
Échec de la mise à jour Cluster_IsOnlineIfClustered règle
Mise à jour ou installation slipstream pour SQL Server 2008
Échecs de mise à niveau sur Windows Server 2012
Avertissement concernant l’ordre de liaison réseau
Machine Learning Services (dans la base de données)
Résultats incohérents dans les calculs MKL
Performances
La colonne bloquée est remplie pour les attentes de verrou
L’analyse du pool de mémoire tampon s’exécute lentement sur des ordinateurs
mémoire de grande taille
Diminution des performances lors de l’utilisation de TOP, MAX ou MIN
Les modules externes peuvent entraîner des problèmes de performances
Les pilotes de filtre provoquent des problèmes de performances et de cohérence
Une utilisation élevée de l’UC se produit dans vos requêtes
Moniteur de ressources non rapportant
Dégradation des performances avec le nouveau CE
Réduction de la contention d’allocation dans tempdb
Résoudre les problèmes de blocage causés par l’escalade de verrouillage
Résoudre l’insertion de la dernière page PAGELATCH_EX contention
Les entrées du magasin SchemaMgr dégradent les performances
Résoudre les problèmes de blocage causés par les verrous de compilation
Résoudre les problèmes de requêtes lentes
Comprendre et résoudre les problèmes de blocage
Mises à jour et options de configuration pour les charges de travail hautes
performances (SQL Server 2014 et 2012)
Mises à jour et options de configuration pour les charges de travail hautes
performances (SQL Server 2017 et 2016)
La mise à niveau du niveau de compatibilité dégrade les performances des requêtes
spatiales
Utiliser DBCC MEMORYSTATUS pour surveiller l’utilisation de la mémoire
Winsock LSP entraîne des problèmes de réseau ou de stabilité
Réplication, suivi des changements, capture des données de modification
Erreur de syntaxe 102 et incorrecte avec la réplication d’égal à égal
Erreur 1205 lors de la configuration de la réplication transactionnelle
Erreur 20011 : le processus n’a pas pu s’sp_replcmds
Erreur 20598 : la ligne n’a pas été trouvée dans l’abonné lors de l’application de la
commande répliquée
Erreur 213 lors de l’attachement d’une base de données ACTIVÉE
Une erreur s’est produite lors de la récupération des données de composition
Appliquer SQL correctifs dans une topologie de réplication
Impossible d’utiliser rowguidcol dans la définition de filtre dans la réplication de
fusion
Échec du travail de capture DE LAS lors du traitement des modifications
LASO pour Oracle se traduit par une croissance du journal des transactions
Lignes de touches en double à partir sys.systableau de validation
Message d’erreur lorsque vous exécutez l’agent de distribution
Échec de l’éumation des propriétés d’abonnement
Installer des Service Packs et des correctifs logiciels
Problème avec le handler de logique métier personnalisé
Supprimer manuellement la réplication
La réplication de fusion ne prend pas en charge les topologies d’abonné centralisées
Non-convergence lors du traitement SQL Server générations enfants
ORACDC517E - Échec de la méthode OCI (Oracle Call Interface)
Les déclencheurs de composition Oracle envoient des données pour les colonnes
non publiées
Statistiques de performances pour le lecteur de journaux et les agents de
distribution
Les abonnements Pull ne s’affichent pas dans Windows Synchronization Manager
Les agents de réplication ne peuvent pas s’exécuter
Erreur de script échoué lors de la création d’un instantané de composition de fusion
Paramètre SkipErrors dans l’agent de distribution
Échec des agents Snapshot ou Logreader
Échec de la synchronisation pour la réplication de fusion
L’abonnement n’existe pas
Comprendre l’ordre de traitement de l’article de réplication de fusion
La mise à jour est répliquée en tant que paires DELETE/INSERT
Aspects liés à la sécurité
Bloquer l’utilisation à distance de comptes locaux dans Windows
Erreur d’échec de déchiffrement avec la base de données toujours chiffrée
Erreurs lorsque vous désactivez l’utilisateur invité
Résoudre le problème d’autorisation lorsque vous déplacez la base de données
MSDB
Échec de démarrage avec l’erreur 17182
SQL Le service ne peut pas démarrer après la configuration du certificat SSL
Transférer des connexions et des mots de passe entre instances
Utiliser des certificats au format PFX
Utilisation SQL Server 2014 en mode conforme FIPS 140-2
Utilisation SQL Server 2016 en mode conforme FIPS 140-2
Utilisation SQL Server 2008 en mode conforme FIPS 140-2
Informations générales sur la résolution des problèmes
Réponses aux questions sur le MSDT
Collecteur de diagnostics de connectivité
Déterminer la version, l’édition et le niveau de mise à jour
Les déviations ou des techniques similaires provoquent des problèmes
Fin de la prise en charge SQL Server 2008
Informations sur MATS et SDP
RS Diagnostics Collector collecte des informations
Outil de diagnostic de collecte de données d’installation
SQL Collecteur de diagnostics de base
SQL Server dans Windows d’exploitation
Stratégie de prise en charge du produit de virtualisation du matériel
Stratégie de prise en charge SQL Server
Integration Services
Ag ag reste dans l’état de résolution
Créer un objet dynamique pour la tâche Envoyer un message
Une erreur 0xC0202009 se produit lorsque SSIS convertit le paramètre
Erreur lors du chargement du package
Erreur dans le package SSIS lorsque le UAC est activé
Erreur lors de l’utilisation du gestionnaire de connexion Oracle
Erreur lors de la virtualisation de BIDS ou SSDT
Points de contrôle SSIS non honorés pour les conteneurs de boucle For et Foreach
Le package SSIS ne s’exécute pas lorsqu’il est appelé à partir d’une étape de travail
L’exécution d’un package SSIS cesse de répondre
La Base de connaissances n’existe pas
Utiliser le chiffrement et la taille des paquets réseau
Master Data Services
MDS intermédiaire basé sur une entité peut échouer
MDS Échec de la commande Valider la version
MDAC et ADO
80020009 d’erreur lors de la récupération des données
Ne peut pas traduire correctement les données de caractères
Vérifier la version de MDAC
Erreur lorsque vous utilisez le curseur client pour ajouter un enregistrement
Échec de l’utilisation d’un lot important d’instructions SQL’instructions
L’administrateur ODBC affiche les DSN utilisateur 32 bits et 64 bits
Ouvrir une connexion ADO et des objets Recordset
Récupérer des valeurs dans les procédures stockées avec ADO
SQL Server clients peuvent modifier les protocoles
SQLDescribeCol renvoie une longueur de colonne erronée
Utiliser le paramètre de nom de serveur dans une chaîne de connexion
Parallel Data Warehouse (APS)
Détecter une inclinaison des valeurs des clés de distribution
Erreur 105005 lorsque vous faites ceTAS sur le stockage d’objets blob
Évaluer la précision des statistiques PDW
Msg 104381 lorsque vous exécutez une instruction avec une clause ORDER BY
Operations Manager ne peut pas surveiller APS appliance
Reporting Services
Un appel à AuthzInitializeContextFromSid échoue
Meilleures pratiques pour modifier le compte de service
Ne peut pas démarrer SSRS
Des blocages se produisent lorsque vous affichez un rapport SSRS
Erreur lors du chargement d’extensions personnalisées dans les outils de données
Le rapport exporté contient des lignes et des colonnes masquées
Clé non valide pour une utilisation dans l’état spécifié
Volet de paramètres non visible en mode SharePoint’intégration
Problèmes de rendu dans Internet Explorer
Erreur de récupération des fichiers d’application impossible
Message d’avertissement lors de l’ajout d’un assembly RS
SQL Server sur Linux
Choix d’un modèle de licence à l’aide de mssql-conf
Vidage principal sur RHEL 7.4 lorsque vous exécutez mssql-conf
Échec de l’opération de restauration sur les serveurs Linux
Outils
Management Studio
Impossible de faire basculer le volet de résultats
Erreur lors de la lecture du journal des erreurs
Échec de la récupération des données pour cette demande
L’Explorateur d’objets se crashe par intermittence
OutofMemoryException lors de l’exécution d’une requête
Message d’erreur non autorisé lors de l’enregistrement des modifications
Impossible de mody table - Expiration du délai d’expiration
Désinstaller SQL Server Management Studio
Diverses erreurs lors de la mise à jour de lignes dans un tableau
Autres outils
Impossible de se connecter à une erreur de fournisseur WMI dans configuration
manager
La base de données MSDB augmente
Les nouvelles données ne sont pas téléchargées dans la base de données MDW
après la configuration de l’ensemble de collections
Problème PowerShell lorsque RemoteSigned n’est pas définie
Utilitaires de langage de marques de relecture
La demande a échoué ou le service n’a pas répondu en temps voulu lorsque vous
démarrez SQL Agent
Échec de l’initialisation de l’objet Application SQLDMO lors de l’utilisation de
Sqlmaint
Utiliser Sqldumper pour générer des fichiers de vidage
Utilisation de l’utilitaire SQLIOSim pour simuler l’SQL Server disque
Visual Studio 2010 Shell est installé avec SQL Server 2014 et 2012
SQL Server résolution des problèmes
12/08/2021 • 2 minutes to read

Bienvenue dans SQL Server résolution des problèmes. Ces articles expliquent comment déterminer,
diagnostiquer et résoudre les problèmes que vous pouvez rencontrer lorsque vous utilisez SQL Server.
Pour plus d’informations sur les builds les plus récentes et les mises à jour cumulatives disponibles pour
une version SQL Server spécifique, voir Déterminer la version, l’édition et le niveau de mise à jour de SQL
Server et de ses composants.
Pour plus d’informations sur la façon dont vous pouvez contribuer à SQL Server documentation de
résolution des problèmes, voir Comment contribuer à SQL Server documentation .
Calculer la croissance de la période précédente
dans SQL Server Analysis Services
13/08/2021 • 2 minutes to read

Cet article explique comment calculer la croissance de la période précédente dans SQL Server Analysis Services.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2406745

Résumé
Cet article décrit la procédure que vous pouvez suivre pour calculer la valeur correcte pour la croissance de la
période précédente lorsque vous avez des cubes Analysis Services qui contiennent des résultats négatifs.

Utiliser une formule pour calculer la croissance de la période


précédente
Dans un scénario où vous avez un cube Analysis Services qui contient des résultats négatifs pour lesquels vous
souhaitez calculer les valeurs de croissance de période précédente, vous devez appliquer une formule pour
obtenir les résultats corrects. Par exemple, supposons que vous avez les soldes suivants pour les années 2008,
2009 et 2010 : 10,00 $, (4,00 $), 5,00 $. Entre 2009 et 2010, étant donné que le solde est passé de négatif (4,00
$) à une valeur positive de 5,00 $, la croissance doit être positive. Pour obtenir les résultats corrects, vous devez
appliquer la formule suivante :

IIF (measures.PreviousPeriodCurrentBalance = 0, NULL,


IIF (measures.PreviousPeriodCurrentBalance < 0,
([Measures].[Balance Current] - measures.PreviousPeriodCurrentBalance) /
measures.PreviousPeriodCurrentBalance * -1,
([Measures].[Balance Current] - measures.PreviousPeriodCurrentBalance) /
measures.PreviousPeriodCurrentBalance
))

NOTE
La formule ci-dessus utilise un membre calculé créé sur une hiérarchie PreviousPeriodCurrentBalance de dates avec la
formule suivante :

([Measures].[Balance Current], [Date Balance].[Hierarchy].currentmember.Prevmember)

Pour plus d’informations, reportez-vous à la rubrique IIf SQL Server Books Online : IIf (MDX)
Impossible de se connecter à une instance nommée
d’un service d’analyse en cluster
15/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où vous ne pouvez pas vous connecter à une instance nommée
d’Analysis Services installée sur un cluster deover.
Version du produit d’origine : SQL Server 2008 R2 Enterprise, SQL Server 2008 Enterprise, Microsoft SQL
Server 2005 Êdition Entreprise
Numéro de la ko d’origine : 2429685

Symptômes
Il se peut que vous ne parveniez pas à vous connecter à une instance nommée d’Analysis Services installée sur
un cluster deover. Vous pouvez recevoir un message d’erreur semblable au suivant :

Connexion impossible <server name>


INFORMATIONS SUPPLÉMENTAIRES :
Impossible d’établir une connexion. Vérifiez que le serveur fonctionne.
(Microsoft.AnalysisServices.AdomdClient)
Aucune connexion n’a pu être réalisée car l’ordinateur cible a activement refusé <ip address> :2383
(Système)

Cause
Le problème se produit lorsque vous démarrez l’instance nommée de SQL Server Analysis Services (SSAS) à
l’aide de Gestionnaire de configuration SQL Server ou de l’applet Services dans le panneau de contrôle. Lorsque
vous démarrez une instance SSAS sur un cluster deover à l’aide d’un outil autre que gestion du cluster de
failover (administrateur de cluster sur des systèmes d’exploitation plus anciens), cette instance SSAS s’exécute en
tant qu’instance autonome et écoute sur un port autre que celui par défaut, ce qui entraîne des échecs de
connexion de différentes applications.

Résolution
Arrêtez et redémarrez les services SQL Server Analysis à l’aide de l’outil Gestion du cluster de failover.

Plus d’informations
Une instance SSAS démarrée sur un cluster (instance par défaut ou nommée) commence à écouter toutes les
adresses IP du groupe de clusters à l’aide du port par défaut 2383. La propriété de <Port> paramètre du
serveur ne modifie pas le numéro de port du service SSAS sur un cluster.
Pour plus d’informations, voir l’article de la KB : Comment déterminer et modifier le port d’une instance SSAS
Configurer le fournisseur de données MSOLAP
pour Excel connexion à Analysis Services
14/08/2021 • 2 minutes to read

Cet article explique comment configurer le fournisseur de données MSOLAP correct pour que Excel se connecte
à Analysis Services.
Version du produit d’origine : SQL Server 2017 Enterprise, SQL Server 2016 Enterprise, SQL Server 2014
Enterprise, SQL Server 2012 Enterprise, SQL Server 2008 Enterprise
Numéro de la ko d’origine : 4488253

Résumé
Pour créer une connexion de données à une source de données Analysis Services, Microsoft Excel utilise le
fournisseur OLE DB Microsoft Analysis Services pour Microsoft SQL Server (MSOLAP). Chaque version
d’Analysis Services possède sa propre version de fournisseur MSOLAP. Le tableau suivant répertorie les versions
analysis service et leur version de fournisseur MSOLAP correspondante.

VERSIO N D’A N A LY SIS SERVIC ES VERSIO N DU F O URN ISSEUR M SO L A P

SQL Server 2008 MSOLAP.4

SQL Server 2012 MSOLAP.5

SQL Server 2014 MSOLAP.6

SQL Server 2016 MSOLAP.7

SQL Server 2017 et versions ultérieures MSOLAP.8 (considéré comme persistant)

Pour plus d’informations sur MSOLAP et d’autres bibliothèques clientes pour Analysis Services, examinez les
bibliothèques clientes Analysis Services.
Pour plus d’informations sur l’utilisation de la version correcte de MSOLAP, voirPropriétés de chaîne de
connexion. Pour les versions MSOLAP héritées, reportez-vous à La manière d’obtenir les dernières versions de
MSOLAP. Pour la dernière version MSOLAP, reportez-vous aux bibliothèques clientes Analysis Services.
Excel utilise la version du fournisseur MSOLAP installée sur l’appareil client. Dans l’exemple suivant, Excel a
configuré MSOLAP.5 comme fournisseur de données dans la chaîne de connexion de données.
Sur un appareil client où plusieurs versions du fournisseur MSOLAP sont installées, Excel utilise la version
configurée dans le Registre.
Par exemple, dans le scénario suivant :
MSOLAP.5 est installé et configuré dans le Registre.
Vous avez installé MSOLAP.6 sur votre appareil pour vous connecter à Analysis Services 2014, mais vous
n’avez pas mis à jour le Registre pour référencer MSOLAP.6.
Excel configurer la connexion pour utiliser MSOLAP.5 dans la chaîne de connexion. Cela provoque des
problèmes, car vous ne pouvez pas utiliser les versions MSOLAP antérieures à la version de la source de
données.

Plus d’informations
Pour spécifier la version de MSOLAP Excel, mettez à jour la version dans les clés de Registre. Les clés suivantes
définissent la version MSOLAP Excel pour se connecter à Analysis Services. L’emplacement de la clé de Registre
varie selon que Microsoft Office est une installation MSI ou « Click-to-Run » (C2R) et qu’il s’agit d’une
installation 32 bits ou 64 bits.
Office MSI 32 bits
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{308FF259-8671-4df4-B66C-9851BFACF446}\ProgID\
(Default)

Office MSI 64 bits


HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{308FF259-8671-4df4-B66C-9851BFACF446}\ProgID\(Default)

Office C2R 32 bits


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE\Software\Classes\Wow6432Node\CLSID\
{308FF259-8671-4df4-B66C-9851BFACF446}\ProgID\(Default)

ou
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Classes\Wow6432Node\CLSID\
{DBC724B0-DD86-4772-BB5A-FCC6CAB2FC1A}\ProgID

Office C2R 64 bits


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE\Software\Classes\CLSID\
{308FF259-8671-4df4-B66C-9851BFACF446}\ProgID\(Default)

ou
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Classes\CLSID\
{DBC724B0-DD86-4772-BB5A-FCC6CAB2FC1A}\ProgID\(Default)

Voici un exemple de Office C2R 32 bits configuré pour utiliser MSOLAP.5 :

Pour déterminer si votre installation est MSI ou C2R, dans Excel allez à Compte > de fichier . Si vous voyez une
section Office updates, l’installation est C2R :

S’il n’existe Office section Mises à jour, il s’agit d’une installation MSI :
Pour déterminer si Excel est 32 bits ou 64 bits, cliquez sur À propos de Excel dans le même écran Comptes et
vous affichera dans la boîte de dialogue en haut :
Configurer SQL Server Analysis Services pour
générer des fichiers de vidage mémoire
13/08/2021 • 9 minutes to read

Cet article explique comment configurer SQL Server Analysis Services pour générer automatiquement des
fichiers de vidage mémoire.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 919711

Introduction
Cet article explique comment configurer Microsoft SQL Server Analysis Services (SSAS) 2012 ou des builds
supérieures pour générer automatiquement différents types de fichiers de vidage de mémoire lorsqu’il
rencontre des exceptions. L’article explique également comment utiliser l’utilitaire Sqldumper.exe pour obtenir
manuellement un fichier de vidage mémoire pour le processus SQL Server Analysis Services.

Plus d’informations
Par défaut, SQL Server Analysis Services génère automatiquement des fichiers minidump lorsqu’une exception
se produit. Pour l’installation par défaut, les fichiers minidump sont écrits à l’emplacement par défaut :

VERSIO N D’A N A LY SIS SERVIC ES EM P L A C EM EN T

2019 %ProgramFiles%\Microsoft SQL


Server\MSAS15.InstanceName\OLAP\log

2017 %ProgramFiles%\Microsoft SQL


Server\MSAS14.InstanceName\OLAP\log

2016 %ProgramFiles%\Microsoft SQL Server


MSAS13.InstanceName\OLAP\log

2014 %ProgramFiles%\Microsoft SQL Server


MSAS12.InstanceName\OLAP\log

2012 %ProgramFiles%\Microsoft SQL Server


MSAS11.InstanceName\OLAP\log

NOTE
InstanceName est un espace réservé pour la valeur correspondante pour SQL Server version Analysis Services.

L’emplacement du journal de l’instance analysis services SQL Server peut être modifié après l’installation, afin
que vous pouvez vérifier l’emplacement du journal en vérifiant le fichier msmdsrv.ini pour le fichier SQL Server
Analysis Services installé.
Pour déterminer la valeur correspondante pour le système, déterminez la valeur de la clé d’inscription
ImagePath, elle doit contenir le chemin d’accès au chemin d’accès de la msmdsrv.ini.

VERSIO N D’A N A LY SIS SERVIC ES SO US- C L É DE REGIST RE

Instance par défaut HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerOLAPService\ImageP

Instance nommée HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSOLAP$InstanceName\ImagePath

Les fichiers minidump incluent les informations suivantes :


Toutes les piles de threads
Mémoire de second ordre référencé par des pointeurs sur la pile
Informations sur le bloc d’environnement de processus (PEB)
Informations sur le bloc d’environnement de thread (TEB)
Informations sur les modules récemment déchargés
Informations sur l’état du thread
La section Exception du fichier Msmdsrv.ini contrôle la génération du fichier de vidage mémoire. Le fichier par
défaut se trouve dans le %ProgramFiles%\Microsoft SQL Server\MSASxx.InstanceName\OLAP\Config dossier. MSASxx
est un espace réservé pour la version correspondante pour SQL Server Analysis Service. Lorsque vous ouvrez le
fichier dans Bloc-notes, vous remarquez une section dans la balise XML Exception qui ressemble à ce qui suit :

<Exception>
<CreateAndSendCrashReports>1</CreateAndSendCrashReports>
<CrashReportsFolder/>
<SQLDumperFlagsOn>0x0</SQLDumperFlagsOn>
<SQLDumperFlagsOff>0x0</SQLDumperFlagsOff>
<MiniDumpFlagsOn>0x0</MiniDumpFlagsOn>
<MiniDumpFlagsOff>0x0</MiniDumpFlagsOff>
<MinidumpErrorList>0xC1000000, 0xC1000001, 0xC1000016, 0xC11D0005, 0xC102003F</MinidumpErrorList>
<ExceptionHandlingMode>0</ExceptionHandlingMode>
<CriticalErrorHandling>1</CriticalErrorHandling>
</Exception>

Vous pouvez contrôler le comportement de génération du fichier de vidage mémoire en modifiant les
paramètres de cette section. Vous pouvez également modifier ces paramètres dans SQL Server Management
Studio. Pour plus d’informations sur ces paramètres, visitez le SQL Server Management Studio web de
téléchargement : Propriétés du journal.

Désactiver le fichier de vidage automatique de mémoire pour Analysis


Services
La valeur du paramètre CreateAndSendCrashReports détermine si un fichier de vidage mémoire sera généré. Ce
paramètre peut avoir l’une des valeurs répertoriées dans le tableau suivant.

VA L EUR DESC RIP T IO N

0 Cette valeur indique qu’Analysis Services ne génère aucun


fichier de vidage mémoire. En outre, la valeur des autres
paramètres sous la section Exception est ignorée.

1 Cette valeur par défaut active le fichier de vidage mémoire.


Toutefois, SQL Server Analysis Services n’envoie pas de
rapport d’erreurs à Microsoft.

2 Cette valeur spécifie que SQL Server Analysis Services


génère un fichier de vidage mémoire et envoie un rapport
d’erreurs à Microsoft.

Lorsque le paramètre CreateAndSendCrashReports est 1 ou 2, les autres paramètres de la section Exception


peuvent contrôler le type du fichier de vidage mémoire et les informations à inclure dans le fichier de vidage
mémoire.

Configurer SQL Server Analysis Services pour générer


automatiquement un fichier de vidage complet
Pour configurer SQL Server Analysis Services afin de générer automatiquement un fichier de vidage complet
lorsqu’une exception se produit, vous pouvez définir le paramètre SQLDumperFlagsOn sur 0x34. En outre, si
vous souhaitez configurer SQL Server Analysis Services pour générer un fichier de vidage complet qui inclut les
informations de handle, vous pouvez définir le paramètre SQLDumperFlagsOn sur 0x34 et le paramètre
MiniDumpFlagsOn sur 0x4. Par exemple, la section Exception du fichier Msmdsrv.ini peut ressembler à ce qui
suit :
<Exception>
<CreateAndSendCrashReports>1</CreateAndSendCrashReports>
<CrashReportsFolder/>
<SQLDumperFlagsOn>0x34</SQLDumperFlagsOn>
<SQLDumperFlagsOff>0x0</SQLDumperFlagsOff>
<MiniDumpFlagsOn>0x4</MiniDumpFlagsOn>
<MiniDumpFlagsOff>0x0</MiniDumpFlagsOff>
<MinidumpErrorList>0xC1000000, 0xC1000001, 0xC1000016, 0xC11D0005, 0xC102003F</MinidumpErrorList>
<ExceptionHandlingMode>0</ExceptionHandlingMode>
<CriticalErrorHandling>1</CriticalErrorHandling>
</Exception>

Générer un fichier de vidage complet qui inclut la poignée des


informations manuellement
Pour résoudre des problèmes tels qu’un serveur qui cesse de répondre (se bloque), vous pouvez générer un
fichier de vidage complet qui inclut la poignée des informations manuellement. Pour ce faire, vous pouvez
exécuter l’utilitaire Sqldumper.exe à l’invite de commandes avec les arguments suivants :

Sqldumper.exe PID 0 0x34:0x4 0 PathToDumpFile

NOTE
PiD représente l’ID de processus du processus SQL Server Analysis Services. PathToDumpFile représente le dossier dans
lequel le fichier de vidage est écrit.

Vous devez exécuter cette commande à partir du répertoire partagé où vous avez installé l’instance, ou vous
devez spécifier le chemin d’accès complet du fichier Sqldumper.exe dans la commande.

VERSIO N D’A N A LY SIS SERVIC ES EM P L A C EM EN T

2019 %ProgramFiles%\Microsoft SQL Server\150\Shared

2017 %ProgramFiles%\Microsoft SQL Server\140\Shared

2016 %ProgramFiles%\Microsoft SQL Server\130\Shared

2014 %ProgramFiles%\Microsoft SQL Server\120\Shared

2012 %ProgramFiles%\Microsoft SQL Server\110\Shared

Par exemple, le répertoire par défaut à exécuter sqldumper.exe pour SQL Server Analysis Services 2019 est
C:\Program Files\Microsoft SQL Server\1590\Shared .

Informations supplémentaires
Vous pouvez utiliser le paramètre SQLDumperFlagsOn pour spécifier les différents indicateurs SQLDumper. Le
tableau suivant répertorie les valeurs de masque de bits que vous pouvez utiliser comme valeur pour le
paramètre d’indicateur.

N O M M N ÉM O N IQ UE VA L EUR H EXA DÉC IM A L E DESC RIP T IO N


N O M M N ÉM O N IQ UE VA L EUR H EXA DÉC IM A L E DESC RIP T IO N

SQLDUMPER_DBGBREAK 0x0001 Cet indicateur entraîne


lSqldumper.exe'utilitaire de débogage à
exécuter l’appel de l’API DebugBreak au
début du programme lorsque les
paramètres sont interrogés. En règle
générale, les professionnels des
services de support technique
Microsoft n’utilisent pas cet indicateur,
car l’indicateur est utilisé uniquement
pour déboguer Sqldumper.exe
problèmes utilitaires.
Remarque Cet indicateur s’interrompt
dans Sqldumper.exe processus. Cet
indicateur ne s’insérait pas dans le
processus de débogage
Sqldumper.exe'utilitaire de
développement.

SQLDUMPER_NOMINIDUMP 0x0002 Lorsque vous utilisez cet indicateur,


l’utilitaire Sqldumper.exe ne génère pas
de fichier de vidage. Cet indicateur est
utilisé pour tester l’utilitaire
Sqldumper.exe de test.

SQLDUMPER_NOWATSON 0x0004 En règle générale, cet indicateur est


utilisé lorsque vous générez
manuellement des fichiers de vidage.
Cet indicateur remplace le
comportement de rapport d’erreurs
par défaut. Par défaut, le fichier de
vidage est envoyé au site de rapports
d’erreurs configuré dans le Registre.

SQLDUMPER_REFERENCED_MEMORY 0x0008 Cet indicateur entraîne la


Sqldumper.exe à définir l’indicateur
MiniDumpWithIndirectlyReferencedMe
mory pour le paramètre
MiniDumpType lorsqu’il appelle la
fonction MiniDumpWritedump. La
mémoire des pointeurs (un niveau
uniquement) qui sont basés sur une
pile (paramètres ou variables locales)
sera stockée dans le fichier de vidage.
Le test révèle que certains paramètres
locaux basés sur des données TLS
(Thread Local Storage), telles que les
structures PSS (Probabilistic Signature
Scheme) et EC, ne semblent pas
fonctionner même lorsque vous
définissez cet indicateur.

SQLDUMPER_ALL_MEMORY 0x0010 Cet indicateur entraîne la


Sqldumper.exe à définir
l’indicateurMiniDumpWithFullMemory
pour MiniDumpType lorsque l’utilitaire
appelle la fonction
MiniDumpWriteDump. Ce
comportement est identique à
l’utilisation de la commande .dump /mf
sous le déboguer. Toutefois, vous devez
également avoir l’indicateur
SQLDUMPER_DUMP_ALL_THREADS
sur pour vous assurer que toutes les
piles de threads sont incluses.
N O M M N ÉM O N IQ UE VA L EUR H EXA DÉC IM A L E DESC RIP T IO N

SQLDUMPER_DUMP_ALL_THREADS 0x0020 Cet indicateur n’est pas requis lorsque


vous exécutez manuellement l’utilitaire
Sqldumper.exe et que vous spécifiez
une valeur de paramètre ThreadId de
0. Une valeur de paramètre ThreadId
de 0 indique que tous les threads
doivent être vidés. Si vous spécifiez
une valeur de paramètre ThreadId
spécifique non nulle, mais que vous
utilisez également cet indicateur, tous
les threads sont écrits dans le fichier de
vidage. Cet indicateur existe, car le
comportement classique dans le
processus Sqlservr.exe consiste à
transmettre la valeur de propriété
ThreadId actuelle du thread qui
engendre le processus Sqlservr.exe jour.
Lorsque ce comportement se produit,
l’indicateur est nécessaire comme
option pour vider tous les threads.

SQLDUMPER_MATCH_FILE_NAME 0x0040 Vous pouvez utiliser cet indicateur


pour essayer de forcer l’utilitaire
Sqldumper.exe à générer un nom de
fichier de vidage qui ressemble à une
convention d’attribution de noms
spécifique. Cette convention
d’attribution de noms spécifique peut
être basée sur un nom de fichier
existant. Étant donné que vous devez
configurer une structure de mémoire
spéciale qui contient le nom de fichier
existant dans votre propre
programme, puis transmettre ce
pointeur à l’utilitaire Sqldumper.exe en
tant que paramètre SqlInfoPtr, cet
indicateur n’est pas utile lorsque vous
exécutez manuellement l’utilitaire
Sqldumper.exe.

SQLDUMPER_SKIP_DW_REG_READ 0x0080 Cet indicateur permet à


lSqldumper.exe'utilitaire de ne pas
utiliser le Registre comme chemin
d’accès pour l’exécution Dw15.exe
programme. Le Dw15.exe est utilisé
pour télécharger les fichiers de vidage
sur le site de rapports d’erreurs.

SQLDUMPER_VERBOSE 0x0100 Cet indicateur peut être utile si vous


n’êtes pas sûr des paramètres que
l’utilitaire Sqldumper.exe pense être
utilisés comme entrée. Lorsque vous
utilisez cet indicateur, l’utilitaire
Sqldumper.exe affiche les valeurs des
paramètres et le nombre de valeurs de
paramètre spécifiées à partir de la ligne
de commande.
N O M M N ÉM O N IQ UE VA L EUR H EXA DÉC IM A L E DESC RIP T IO N

SQLDUMPER_WAIT_AT_EXIT 0x0200 Vous pouvez utiliser cet indicateur


pour attacher un débogger à
lSqldumper.exe utilitaire. Vous pouvez
utiliser ce débompeur pour résoudre
les problèmes liés à l’utilitaire
Sqldumper.exe de l’outil. Ces problèmes
peuvent notamment se produire
lorsque l’utilitaire Sqldumper.exe est
généré par Sqlservr.exe ou par un
autre programme. Lorsque vous
définissez cet indicateur, l’utilitaire
Sqldumper.exe appelle la fonction
SleepEx pendant 15 secondes juste
avant l’existence du programme
Sqldumper.exe et une fois toutes les
autres opérations terminées.

SQLDUMPER_FILTERED 0x0800 Vous pouvez utiliser cet indicateur


pour générer un fichier de vidage filtré.
SQL Server Analysis Services ne prend
pas encore en charge cet indicateur.

Vous pouvez utiliser le paramètre MiniDumpFlagsOn pour fournir des indicateurs minidump. Le tableau suivant
répertorie les indicateurs minidump disponibles :

O P T IO N VA L EUR DESC RIP T IO N

MiniDumpNormal 0x00000000 Créez un fichier de mini-vidage


classique qui utilise la réécriture.

MiniDumpWithDataSegs 0x00000001 Inclure un segment de données pour


tous les modules chargés. L’indicateur
que les modules chargés récupèrent
les variables globales.

MiniDumpWithFullMemory 0x00000002 Créez un fichier de vidage utilisateur


complet. Un fichier de vidage filtré est
désactivé lorsque l’indicateur est
définie.

MiniDumpWithHandleData 0x00000004 Inclure les informations de handle.

MiniDumpFilterMemory 0x00000010 La mémoire de la pile et du magasin


de documents doit être analysée pour
les références de pointeur aux modules
de la liste des modules. L’utilisateur ne
doit pas utiliser cet indicateur pour
SQL Server Analysis Services.

MiniDumpWithUnloadedModules 0x00000020 Cet indicateur fournit des informations


sur les modules récemment déchargés.
Seuls Microsoft Windows XP et
Microsoft Windows Server 2003 la
prise en charge de cet indicateur. Le
système d’exploitation ne conserve pas
les informations pour les modules
déchargés avant Windows Server 2003
Service Pack 1 (SP1) et Windows XP
Service Pack 2 (SP2).

MiniDumpWithIndirectlyReferencedMe 0x00000040 Inclure les pages qui comportent des


mory données référencés par des données
locales ou par d’autres mémoires de
pile.
O P T IO N VA L EUR DESC RIP T IO N

MiniDumpFilterModulePaths 0x00000080 Si le chemin d’accès du module est


retiré des informations du module,
n’utilisez pas cet indicateur.

MiniDumpWithProcessThreadData 0x00000100 Cet indicateur fournit des informations


sur le bloc d’environnement de
processus (PEB) et le bloc
d’environnement de thread (TEB).

MiniDumpWithPrivateReadWriteMemo 0x00000200 Analysez l’espace d’adressa visite


ry virtuel pour trouver d’autres types de
mémoire à inclure.

MiniDumpWithoutOptionalData 0x00000400 Réduisez les données qui sont vidées


en éliminant les régions de mémoire
qui ne sont pas requises. Faites-le pour
répondre aux critères spécifiés pour le
fichier de vidage. L’utilisation de cet
indicateur permet d’éviter toute
mémoire mémoire contenant des
données privées pour l’utilisateur.
Toutefois, cela ne garantit pas
qu’aucune information privée ne sera
présente. N’utilisez pas cet indicateur.

MiniDumpWithFullMemoryInfo 0x00000800 Inclure des informations descriptives


sur la région de mémoire éumée.

MiniDumpWithThreadInfo 0x00001000 Inclure les informations sur l’état du


thread.

MiniDumpWithCodeSegs 0x00002000 Incluez des sections de code et de


code pour tous les modules chargés.

Références
Utilisation de l’utilitaire Sqldumper.exe pour générer un fichier de vidage dans SQL Server
Déterminer le premier ou le dernier membre avec
des données
13/08/2021 • 2 minutes to read

Résumé
Dans certaines applications, il est utile de rechercher le premier ou la dernière dimension membre qui a des
données associées à celui-ci. Cet article montre comment utiliser les fonctions et les fonctions pour renvoyer les
premier et dernier membres d’une HEAD() dimension qui ont des TAIL() UNION() données. L’article illustre
également l’utilisation de la NonEmptyCrossJoin() fonction.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 301934

Plus d’informations
Supposons que votre tâche consiste à rechercher les premiers et derniers membres de la dimension de temps
avec les données de l’exemple FoodMart 2000. Pour de nombreux utilisateurs, la première idée de trouver le
premier membre avec des données serait d’utiliser la FirstChild() fonction comme suit :

SELECT {[Time].FirstChild} ON COLUMNS


FROM SALES

De même, la première idée de trouver le dernier membre de la dimension de temps avec des données serait
d’utiliser la LastChild() fonction comme suit :

SELECT {[Time].[1998].[Q4].LastChild} ON COLUMNS


FROM SALES

Toutefois, la première requête MDX renvoie la valeur associée à [1997]. [Q1] et non la valeur associée à [1997],
qui est le premier membre avec des données. La deuxième requête MDX renvoie la valeur associée à [1997].
[Q4]. [12], qui est le dernier membre de la dimension, mais pas le dernier membre avec des données.
En alternative, la fonction renvoie le premier nombre spécifié d’éléments dans un ensemble et peut être utilisée
pour renvoyer le HEAD() premier membre de la dimension. De même, la fonction renvoie un sous-ensemble à
partir de la fin d’un ensemble et peut être utilisée pour renvoyer le TAIL() dernier membre de la dimension. La
requête MDX pour renvoyer le premier membre de la dimension de temps aurait la forme suivante :

SELECT HEAD([Time].Members,1) ON COLUMNS


FROM SALES

Cette requête retourne 1997 en tant que premier membre de la dimension avec des données.
La requête MDX pour renvoyer le dernier membre de la dimension doit prendre la forme suivante :

SELECT TAIL([Time].Members,1) ON COLUMNS


FROM SALES
Cette requête MDX renvoie [1998]. [Q4]. [12] en tant que dernier membre de la dimension. Toutefois, le membre
renvoyé n’est pas le dernier membre de la dimension avec des données. Afin d’éliminer les membres sans
données, la fonction doit être utilisée pour filtrer tous les membres de la dimension qui ne sont pas associés
NonEmptyCrossJoin() à des données.

La requête MDX pour rechercher le premier membre avec des données prend ensuite la forme

SELECT HEAD(NonEmptyCrossJoin([Time].Members,1),1) ON COLUMNS


FROM SALES

et la requête MDX pour rechercher le dernier membre avec des données prend ensuite la forme :

SELECT TAIL(NonEmptyCrossJoin([Time].Members,1),1) ON COLUMNS


FROM SALES

La fonction peut ensuite être utilisée pour combiner les deux requêtes UNION() MDX en une seule requête :

SELECT
UNION(HEAD(NonEmptyCrossJoin([Time].Members,1),1), TAIL(NonEmptyCrossJoin([Time].Members,1),1)) ON COLUMNS
FROM SALES
La panne de l’espace disque pendant la
récupération d’un travail de traitement en échec
entraîne l’incident de SSAS
13/08/2021 • 2 minutes to read

Cet article décrit une erreur de Microsoft SQL Server Analysis Services (SSAS) qui se produit lorsque l’espace
disque est épuisé sur le système hébergeant l’instance SSAS.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 4088924

Symptômes
Toute version de SSAS se crashe lorsqu’elle subit une erreur d’I/S pendant la récupération d’un travail de
traitement qui a échoué. Lorsque ce problème se produit, le message d’erreur suivant peut être consigné dans le
journal des applications :

Erreur du système de fichiers : l’erreur suivante s’est produite lors de l’écriture dans le fichier « LazyWriter
Stream » : il n’y a pas suffisamment d’espace sur le disque. .
Erreur du système de fichiers : le thread d’arrière-plan exécutant le rédacteur différé a rencontré une erreur
d’E/S.

Plus d’informations
Ce problème peut se produire si l’espace disque disponible est épuisé. Ce problème peut entraîner un arrêt
d’urgence du service. L’arrêt ressemble à un blocage, bien qu’il soit initié en interne.
Pendant l’opération de rollback, certaines opérations d’opération d’ouverture de projet sont nécessaires pour
terminer la transaction. L’épuisement du disque peut provoquer une défaillance des E/S. Ainsi, il est impossible
de revenir à un état cohérent pour la transaction de manière déterministe. Le serveur ne doit pas continuer à
servir des données alors qu’il est dans un état incohérent. Dans ce cas, la seule façon de récupérer est d’arrêter
le serveur, puis de le forcer à redémarrer.
Lorsque le serveur redémarre, une opération de nettoyage se produit avant que des données ne sont
disponibles pour l’interrogation. Cette opération peut émaner en toute sécurité tous les fichiers du répertoire de
données. Le nettoyage supprime tous les fichiers qui ne sont pas confirmés comme valides et font partie des
données attendues.

S’applique à
SQL Server 2017 sur Windows (toutes les éditions)
SQL Server 2017 sur Linux (toutes éditions)
SQL Server 2016 Enterprise
SQL Server 2014 Enterprise
SQL Server 2012 Enterprise
Activer le niveau d’isolation des transactions
instantanées dans SQL Server 2005 Analysis
Services
13/08/2021 • 3 minutes to read

Cet article décrit les étapes à suivre pour activer le niveau d’isolation des transactions instantanées dans
Analysis Services.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 919160

Introduction
Cet article explique comment activer le niveau d’isolation des transactions instantanées dans Microsoft SQL
Server Analysis Services. En outre, cet article explique comment tester si le niveau d’isolation des transactions
instantanées est activé.

Activer le niveau d’isolation des transactions de capture instantanée


Dans Analysis Services, vous pouvez utiliser le niveau d’isolation des transactions instantanées pour vous
connecter à SQL Server source de données. Pour activer le niveau d’isolation de transaction de capture
instantanée, suivez les étapes suivantes :
1. Dans SQL Server Management Studio, exécutez les instructions suivantes.

ALTER DATABASE <DatabaseName>


SET READ_COMMITTED_SNAPSHOT ON
GO
ALTER DATABASE <DatabaseName>
SET ALLOW_SNAPSHOT_ISOLATION ON
GO

NOTE
Dans ces instructions, il s’agit d’un espace réservé pour une base de données dans la source de données que vous
souhaitez <DatabaseName> utiliser dans Analysis Services.

2. Dans Business Intelligence Development Studio, créez un projet Analysis Services.


Vous pouvez également ouvrir un projet Analysis Services existant.
3. Si vous avez créé un projet Analysis Services à l’étape 2, suivez les étapes suivantes :
a. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur Sources de données, puis cliquez sur
Nouvelle source de données.
b. Dans la boîte de dialogue Sélectionner comment définir la connexion, cliquez sur Nouveau. La
boîte de dialogue Gestionnaire des connexions s’affiche.
Si vous avez ouvert un projet Analysis Services existant à l’étape 2, suivez les étapes suivantes :
a. Sous le dossier Sources de données, double-cliquez sur la source de données existante.
b. Dans la boîte de dialogue Concepteur de source de données, cliquez sur Modifier. La boîte de
dialogue Gestionnaire des connexions s’affiche.
4. Dans la boîte de dialogue Gestionnaire des connexions, cliquez sur Native OLE DB\SQL Native
Client dans la liste Des fournisseurs.
5. Spécifiez le nom du serveur et l’authentification.
6. Pour tester la connexion, cliquez sur Tester la connexion.
7. Dans le volet gauche, cliquez sur Tout.
8. Dans le volet droit, cliquez sur True dans la liste connexion MARS, puis cliquez sur OK.
9. Dans la boîte de dialogue Concepteur de source de données, cliquez sur Instantané dans la liste
Isolation, puis cliquez sur OK .

Tester si le niveau d’isolation des transactions instantanées est activé


Pour tester si le niveau d’isolation des transactions instantanées est activé, suivez les étapes suivantes :
1. Démarrez SQL Server Profiler.
2. Créez un suivi pour vous connecter à la source de données que vous avez spécifiée dans le projet
Analysis Services.
3. Dans la boîte de dialogue Propriétés de suivi, cliquez sur l’onglet Sélection des événements.
4. Dans la colonne TransactionID, cliquez pour cocher les cases à cocher de la ligne de l’événement et de
la SQL:BatchCompleted ligne de SQL:BatchStarting l’événement.

NOTE
Pour afficher la colonne TransactionID, cochez la case Afficher toutes les colonnes.

5. Cliquez sur Exécuter pour démarrer le suivi.


6. Dans Business Intelligence Development Studio, traiter le projet Analysis Services.
7. Dans SQL Server Profiler, recherchez les événements et les événements qui ont la même valeur
SQL:BatchCompleted SQL:BatchStarting dans la colonne TransactionID. En règle générale, ces
événements SELECT contiennent l’instruction dans la colonne TextData. Pour ces événements, obtenez
l’ID de session dans la colonne SPID.
8. Pour vous connecter à la source de données, démarrez SQL Server Management Studio.
9. Créez une requête, puis exécutez l’instruction Transact-SQL suivante.

select session_id,Transaction_Isolation_Level from sys.dm_exec_sessions


where session_id=<SPID>

NOTE
Dans cette instruction, <SPID> il s’agit d’un espace réservé pour l’ID de session que vous avez obtenu à l’étape
7.

10. Sous l’onglet Résultats, notez la valeur dans la Transaction_Isolation_Level colonne. Cette valeur
indique le niveau d’isolation des transactions que vous utilisez dans le projet Analysis Services. Lorsque
le niveau d’isolation de transaction de capture instantanée est activé, la valeur dans la colonne
Transaction_Isolation_Level est 5 . Le tableau suivant indique les valeurs de la colonne
Transaction_Isolation_Level et les niveaux d’isolation des transactions correspondants.

VA L EUR N IVEA U D’ISO L AT IO N DES T RA N SA C T IO N S

0 Non spécifié.

1 ReadUncommitted

2 ReadCommitted

3 Répétable

4 Sérialisable

5 Capture instantanée

Références
Pour plus d’informations sur le niveau d’isolation des transactions instantanées, consultez les rubriques
suivantes dans SQL Server 2005 Books Online :
DÉFINIR LE NIVEAU D’ISOLATION DES TRANSACTIONS (Transact-SQL)
Activation des niveaux d’isolation basés sur le système de version de ligne
Niveaux d’isolation dans le Moteur de base de données
Erreur 1032 messages dans le journal d’application
Windows Server 2012
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’exécuter des instances de
SQL Server ou SQL Server Analysis Services sur un ordinateur qui exécute Windows Server 2012.
Version du produit d’origine : SQL Server Analysis Services, SQL Server
Numéro de la ko d’origine : 2811566

Symptômes
Prenons l’exemple du scénario suivant :
Vous installez Microsoft SQL Server ou SQL Server Analysis Services sur un ordinateur qui s’exécute
Windows Server 2012.
Vous utilisez le compte par défaut comme compte de service pour ces applications pendant l’installation.
L’installation a réussi.
Après l’installation, les services de ces programmes démarrent correctement.
Dans ce scénario, vous pouvez trouver dans le journal des applications des messages d’erreur semblables à ce
qui suit :
Pour les instances de SQL Server (SQLServr.exe)

sqlservr (3472) Une tentative d’ouverture du fichier « C:\Windows\system32\LogFiles\Sum\Api.log »


pour l’accès en lecture seule a échoué avec l’erreur système 5 (0x00000005) : « L’accès est refusé. ".
L’opération d’ouverture de fichier échoue avec l’erreur -1032 (0xfffffbf8).
sqlservr (3472) L’erreur -1032 (0xfffffbf8) s’est produite lors de l’ouverture du fichier journal
C:\Windows\system32\LogFiles\Sum\Api.log.

Pour les instances de SQL Server Analysis Services (Msmdsrv.exe)

msmdsrv (4680) Une tentative d’ouverture du fichier « C:\Windows\system32\LogFiles\Sum\Api.chk


» pour l’accès en lecture/écriture a échoué avec l’erreur système 5 (0x00000005) : « L’accès est refusé.
". L’opération d’ouverture de fichier échoue avec l’erreur -1032 (0xfffffbf8).
Msmdsrv (4680) Error -1032 (0xfffffbf8) occurred while opening logfile
C:\Windows\system32\LogFiles\Sum\Api.log.

Cause
Ce problème se produit en raison d’autorisations insuffisantes pour les comptes de démarrage de service pour
SQL Server et SQL Server Analysis Services lorsque les services accèdent au dossier suivant pour la
journalisation dans le cadre de la fonctionnalité Mesures d’utilisation des logiciels :
C:\Windows\System32\LogFiles\Sum

Solution de contournement
Pour contourner ce problème, ajoutez manuellement des autorisations de lecture/écriture aux comptes de
service utilisés par SQL Server (sqlservr.exe) et SQL Server Analysis Services (msmdsrv.exe) pour accéder au
\Windows\System32\LogFiles\Sum dossier.

Plus d’informations
La fonctionnalité Mesures de l’utilisation des logiciels utilise le service de journalisation de l’accès utilisateur
Windows Server 2012. Pour plus d’informations, voir Vue d’ensemble de la journalisation de l’accès utilisateur.
Erreur (l’optimiseur de requête a généré trop de
sous-ressources) et la requête MDX échoue dans
l’instance multidimensionnelle SSAS
15/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous exécutez une requête MDX
(Multidimensional Expressions) sur une instance multidimensionnelle Microsoft SQL Server Analysis Services
(SSAS).
S’applique à : SQL Server 2012 Analysis Services, SQL Server 2014 Analysis Services, SQL Server 2016
Analysis Services, SQL Server 2017 Analysis Services Windows, SQL Server 2019 Analysis Services Windows
Numéro de la ko d’origine : 4533057

Symptômes
Lorsque vous exécutez une requête MDX (Multidimensional Expressions) sur une instance multidimensionnelle
Microsoft SQL Server Analysis Services (SSAS), la requête MDX échoue et renvoie le message d’erreur suivant :

L’optimiseur de requête a généré trop de sous-ressources dans le plan de requête

Cette erreur se produit si les conditions suivantes sont vraies :


Trop de membres calculés sont définis sur un seul niveau hiérarchique ou attribut.
De nombreux champs ou membres d’attribut sont placés sur chaque axe. Ou bien, de nombreux champs sont
rassemblés sur les lignes ou les colonnes d’un tableau croisé dynamique Microsoft Excel.
Tous les membres des hiérarchies sélectionnées sont inclus dans l’axe.
Les totaux et sous-totaux sont allumés dans le tableau Excel tableau croisé dynamique.

Cause
Le moteur de formule SSAS (FE) doit générer tous les ensembles MDX pertinents pour le sous-cube de requête
Stockage Engine (SE) ou sonar. Il existe une limite au nombre de sous-SE de requête par requête qui peuvent
être générés. Ce comportement est voulu par la conception même du produit. Actuellement dans le plan de
requête, une erreur se produit si la fe génère trop de sous-cubes de requête pour la requête.

Résolution
Pour éviter cette erreur, suivez les recommandations suivantes :
Dans le Excel tableau croisé dynamique, éteinez les totaux et les sous-totaux.
Supprimez la hiérarchie de l’axe Lignes ou Colonnes du tableau croisé dynamique dans Excel’interface
utilisateur.
Ne définissez pas trop de membres calculés (par exemple, plus de 500) sur la hiérarchie de dimension. Au
lieu de cela, vous devez avoir des membres réguliers dans la hiérarchie de dimension et utiliser des
expressions d’attribution d’étendue MDX (également appelées cellules calculées) pour remplacer les
expressions de ces membres calculés.
Erreur lors de la connexion à une instance nommée
de SQL Server Analysis Services à l’aide d’IPv6
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre un problème qui peut se produire lorsque vous vous connectez à une instance
nommée de SQL Server Analysis Services qui est configurée pour utiliser IPv6.
Version du produit d’origine : SQL Server Entreprise
Numéro de la ko d’origine : 2658571

Symptômes
Dans Microsoft SQL Server, vous recevez une erreur ressemblant à ce qui suit lorsque vous essayez de vous
connecter à une instance nommée de SQL Server Analysis Services (SSAS) à l’aide d’IPv6 :

Aucune connexion n’a pu être réalisée car l’ordinateur cible l’a activement refusée [:: n ]: nnnnn (System)

NOTE
Dans cette erreur, n est un integer.

Cause
Ce problème peut se produire si le serveur qui héberge l’instance nommée de SSAS a été configuré pour utiliser
IPv4 et IPv6 lors de SQL Server été installé. Ensuite, le serveur a été reconfiguré pour utiliser uniquement IPv6.

Résolution
Pour résoudre ce problème, suivez les étapes suivantes :
1. Arrêtez le service SQL Server Analysis Services.
2. Ouvrez leMsmdredir.ini dans Bloc-notes.

NOTE
Par défaut, le Msmdredir.ini se trouve dans le dossier suivant
%ProgramFiles%\Microsoft SQL Server\90\Shared\ASConfig :

3. Dans la section Instances, vérifiez que les valeurs de la propriété Por t et de la propriété IPv6 sont
différentes pour l’instance nommée.
4. Supprimez la propriété Por tIPV6.
5. Enregistrez leMsmdredir.ini, puis quittez Bloc-notes .
6. Démarrez le SQL Server service Analysis Services.

Plus d’informations
Lorsque SSAS détecte que le serveur hôte est configuré pour écouter sur IPv4 et IPv6, SSAS crée deux entrées
dans le fichierMSmdredir.ini. Toutefois, si le serveur est configuré pour écouter sur un protocole, <Port> l’entrée
est utilisée.
Prenons le scénario dans lequel le serveur qui héberge l’instance nommée de SSAS a été configuré pour utiliser
IPv4 et IPv6 lors de l’installation de SQL Server, puis le serveur a été reconfiguré pour utiliser uniquement IPv6.
Dans ce scénario, le fichier Msmdredir.ini peut contenir des entrées obsolètes qui ne pointent pas vers les ports
sur lesquels l’instance nommée SSAS est à l’écoute.
Lorsque le service SQL Server Analysis Services démarre, il détecte les protocoles utilisés et met à jour
Msmdredir.ini fichier. Si le serveur a été configuré pour utiliser IPv4 et IPv6, il existe deux entrées dans
Msmdredir.ini fichier. Toutefois, si le service SQL Server Analysis Services détecte qu’un protocole est utilisé,
seule la propriété Port est mise à jour. Par conséquent, la propriété PortIPv6 peut contenir des informations
obsolètes.
Lorsque le service SQL navigateur lit les informations obsolètes, il peut rediriger les demandes vers l’instance
nommée et provoquer des échecs de connexion. Lorsque les informations obsolètes contenues dans la propriété
PortIPv6 sont supprimées, les informations de la propriété Port sont utilisées.
Messages d’erreur lorsque vous essayez de traiter
une base de données ou un cube
14/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème où vous recevez des messages d’erreur lorsque vous essayez de
traiter une base de données ou un cube dans SQL Server Analysis Services.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 922673

Symptômes
Dans SQL Server Analysis Services, vous essayez de traiter une base de données ou un cube à l’aide SQL Server
Business Intelligence Development Studio ou SQL Server Management Studio. Toutefois, l’opération de
processus échoue et vous recevez les messages d’erreur suivants :
Message d’erreur 1

Erreurs dans le moteur de stockage OLAP La clé d’attribut : : : TableName, Column :


ColumnName1, Value Value1 est in trouver : la clé d’attribut. Table : TableName, Column :
ColumnName2, Value: Value2.

Message d’erreur 2

Erreurs dans le moteur de stockage OLAP : l’enregistrement a été ignoré car la clé d’attribut est in
trouvée. Attribut : attribut généré X de dimension : DimensionName à partir de la base de données :
DatabaseName, Cube: CubeName, Measure Group: MeasureGroupName, Partition: PartitionName,
Record: RecordNumber.

Cause
Ce problème se produit car une table de faits pour un cube possède un ou plusieurs enregistrements qui
contiennent une clé d’attribut, et cette clé d’attribut n’existe pas dans la table de dimension correspondante. Ce
comportement peut se produire lorsque vous n’avez pas traitée la dimension correspondante avant de traiter le
cube ou lorsque les tables sous-jacentes ne correspondent pas. Si le champ « Valeur : » dans le message n’a pas
de numéro après, la table de faits doit contenir des données null.

Résolution
Pour résoudre ce problème, vous devez vérifier que votre source de données pointe vers les emplacements
suivants :
L’instance de source de données sous-jacente correcte, telle qu’une instance de SQL Server.
Base de données correcte.
Ensuite, corrigez les enregistrements sous-jacents qui contiennent la clé d’attribut problématique. Pour ce faire,
utilisez l’une des méthodes suivantes.
Utiliser une clé d’attribut existante
Mettez à jour les enregistrements pour utiliser une clé d’attribut existante en exécutant une instruction
semblable à ce qui suit :

Update <TableName> set <KeyName>=<ExistingKeyValue> where <KeyName>=<BadKeyValue> or <KeyName> IS NULL

Faire correspondre les valeurs clés dans la table de faits


Insérez des lignes supplémentaires dans la table de dimension pour qu’elle corresponde aux valeurs clés du
tableau de faits. S’il existe des valeurs null, utilisez l’une des méthodes suivantes :
Remplacez les valeurs null par des valeurs réelles.
Configurez la ou les dimensions pour qu’ils ont un membre inconnu en configurant les UnknownMember
propriétés et les UnknownMemberName dimensions. Vous pouvez rendre le membre inconnu visible ou
masqué en fonction de vos besoins.
Utilisez tous les paramètres suivants dans la boîte de dialogue Paramètres modification :
Définissez KeyErrorAction la propriété sur Conver tToUnknown .
Définissez NullKeyNotAllowed la propriété sur IgnoreError ou Repor tAndContinue .
Définissez NullKeyConvertedtoUnknown la propriété sur IgnoreError ou Repor tAndContinue .
Cliquez sur Ignorer le nombre d’erreurs.
Vous pouvez définir ces paramètres à l’échelle de l’instance ou utiliser une configuration personnalisée
pour chaque dimension.
Ignorer l’erreur
Si vous souhaitez traiter la base de données ou le cube sans corriger les données, vous pouvez définir la
configuration d’erreur pour l’opération de processus de manière à ignorer l’erreur. Vous ne devez le faire qu’en
tant que solution de contournement temporaire lorsque vous corrigez les données sous-jacentes. Dans le cas
contraire, vous risquez de recevoir des résultats inattendus de vos requêtes MDX (Multidimensional
Expressions). Pour ignorer les erreurs, suivez les étapes suivantes :
1. Dans la boîte de dialogue Base de données de processus - DatabaseName**** ou cube processus -
CubeName****, cliquez sur Modifier Paramètres .
2. Dans la boîte de dialogue Modifier Paramètres, cliquez sur l’onglet Erreurs de la touche Dimension.
3. Cliquez sur Utiliser la configuration d’erreur personnalisée.
4. Dans la liste Clé in trouvée, modifiez la valeur par défaut de Repor t et continuez à Ignorer l’erreur .
5. Cliquez sur Ignorer le nombre d’erreurs.
6. Cliquez sur OK pour fermer la boîte de Paramètres modifier.
7. Cliquez sur OK pour traiter la base de données ou le cube.
En outre, vous pouvez définir la configuration d’erreur pour le cube ou la partition de manière à ignorer l’erreur.
Pour plus d’informations, voir Error Configuration for Cube, Partition, and Dimension Processing.

Statut
Ce comportement est inhérent au produit.
Message d’erreur lors du traitement d’une
dimension
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous traitez une dimension dans SQL Server
Analysis Service.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2002757

Symptômes
Dans SQL Server Analysis Service, le traitement des dimensions et vous pouvez recevoir un message d’erreur
semblable à ce qui suit :

Erreurs dans le moteur de stockage OLAP : une clé d’attribut en double a été trouvée lors du traitement :
Tableau : 'TABLE_NAME', Colonne : 'ATTRIBUTE_COLUMN_NAME, Valeur : 'ATTRIBUTE_VALUE'. L’attribut est «
ATTRIBUTENAME ».

Cause
Le comportement est de par sa conception. SQL Server Les services d’analyse détectent la clé d’attribut en
double pendant le traitement.
L’erreur ci-dessus peut également être déclenchée lorsque la base de données relationnelle est sensible à la cas
et que les valeurs de données sont en cas mixte. Dans Analysis Services, lors de la création d’une dimension et
de ses attributs, le classement par défaut de l’attribut ne fait pas l’affaire. La dimension par défaut a
ErrorConfiguration | KeyDuplicate définie sur Repor tAndStop . Ainsi, si vous avez une base de données
relationnelle qui, par exemple, contient des valeurs de données BOOKNAME et Bookname, pendant le
traitement des dimensions, si les données BOOKNAME ont d’abord été traitées en tant que clé d’attribut, le
traitement suivant échouera avec l’erreur suivante :

Une clé d’attribut en double a été trouvée lors du traitement : Table : 'TABLE_NAME', Column:
'ATTRIBUTE_COLUMN_NAME, Value: 'Bookname'. L’attribut est « ATTRIBUTENAME ».

Résolution
Lors de la conception de dimensions, d’attributs de dimension et de relations d’attributs, vous devez vérifier les
valeurs de données relationnelles pour les doublons et, si elles existent, utilisez l’une des procédures suivantes
pour résoudre le problème :
Option 1 : modifiez la requête nommée en affichage source de données pour sélectionner uniquement
les données avec le cas souhaité.
Par exemple, vous pouvez utiliser ou UPPER utiliser la fonction de cas dans la requête LOWER nommée.
Option 2 : vous pouvez contourner le problème à l’aide de l’une des options suivantes :
NOTE
Ces options ne sont généralement pas recommandées, car elles peuvent entraîner des données inattendues, mais
peuvent être utilisées à des fins de dépannage.

Définissez la valeur de l’élément KeyDuplicate sur Repor tAndContinue et


KeyErrorLimitAction sur StopLogging dans ErrorConfiguration .
À l’aide de l’éditeur de dimension dans Business Intelligence Development Studio (BIDS), ouvrez la
dimension à qui appartient l’attribut et définissez le classement approprié pour l’attribut à l’aide de
la propriété Collation de la dimension.

NOTE
La dimension aura alors une clé d’attribut en double (différentes valeurs de cas) une fois le traitement
terminé.
Message d’erreur lorsque vous utilisez un
PowerPivot pour Excel de travail en tant que source
de données dans SQL Server Analysis Services
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’utiliser un PowerPivot pour
un Excel comme source de données dans SQL Server Analysis Services.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2607106

Symptômes
Prenons l’exemple du scénario suivant :
Vous configurez Microsoft PowerPivot pour Excel sur un serveur intermédiaire.
Vous configurez le serveur pour qu’il utilise l’authentification Kerberos, puis vous connectez au serveur.
Vous essayez d’utiliser une PowerPivot pour Excel de travail en tant que source de données dans Microsoft
SQL Server Analysis Services.
Dans ce scénario, vous pouvez recevoir un message d’erreur semblable à ce qui suit :

Erreur HTTP 401.

Cause
Ce problème se produit car les liaisons personnalisées pour le service de redirection sont configurées pour
utiliser l’authentification Microsoft NTLM. En outre, les liaisons personnalisées sont configurées pour ne pas
négocier.

Résolution
Pour résoudre ce problème, activez l’authentification Kerberos pour le service de redirection. Pour cela, procédez
comme suit :
1. Back up the Web.config file for the Redirector service.

NOTE
Par défaut, le Web.config se trouve dans le dossier :
%SystemDrive%\program files\common files\web service extensions\14\ISAPI\powerpivot .

2. Ouvrez leWeb.config pour le service de redirection dans Bloc-notes.


3. Recherchez <binding name="RedirectorBinding"> la balise, puis modifiez authenticationScheme la valeur
comme suit :
Original
<binding name="RedirectorBinding">
<webMessageEncoding
webContentTypeMapperType="Microsoft.AnalysisServices.SharePoint.Integration.Redirector.RawCont
entTypeMapper, Microsoft.AnalysisServices.SharePoint.Integration" />
<httpTransport manualAddressing="true" authenticationScheme="Ntlm" transferMode="Streamed"
maxReceivedMessageSize="9223372036854775807"/>
</binding>

Mis à jour

<binding name="RedirectorBinding">
<webMessageEncoding
webContentTypeMapperType="Microsoft.AnalysisServices.SharePoint.Integration.Redirector.RawCont
entTypeMapper, Microsoft.AnalysisServices.SharePoint.Integration" />
<httpTransport manualAddressing="true" authenticationScheme="Negotiate"
transferMode="Streamed" maxReceivedMessageSize="9223372036854775807"/>
</binding>

4. Recherchez la>,puis modifiez la valeur <binding name="RedirectorSecureBinding"


authenticationScheme comme suit :
Original

<binding name="RedirectorSecureBinding">
<webMessageEncoding
webContentTypeMapperType="Microsoft.AnalysisServices.SharePoint.Integration.Redirector.RawCont
entTypeMapper, Microsoft.AnalysisServices.SharePoint.Integration" />
<httpsTransport manualAddressing="true" authenticationScheme="Ntlm" transferMode="Streamed"
maxReceivedMessageSize="9223372036854775807"/>
</binding>

Mis à jour

<binding name="RedirectorSecureBinding">
<webMessageEncoding
webContentTypeMapperType="Microsoft.AnalysisServices.SharePoint.Integration.Redirector.RawCont
entTypeMapper, Microsoft.AnalysisServices.SharePoint.Integration" />
<httpsTransport manualAddressing="true" authenticationScheme="Negotiate"
transferMode="Streamed" maxReceivedMessageSize="9223372036854775807"/>
</binding>

5. Dans le menu Fichier , cliquez sur Enregistrer .


6. Quittez Bloc-notes.
Une requête MDX qui contient une fonction
Aggregate renvoie une erreur pour les valeurs de
cellule dans SQL Server Analysis Services
14/08/2021 • 2 minutes to read

Cet article décrit un problème qui se produit si l’ensemble dans la Aggregate fonction contient un membre
calculé.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 942981

Symptômes
Vous avez une requête MDX (Multidimensional Expressions) qui utilise la Aggregate fonction. L’ensemble
spécifié dans la fonction Aggregate contient un membre calculé. Lorsque vous exécutez la requête MDX sur une
instance de Microsoft SQL Server Analysis Services, la requête renvoie #Error valeurs des cellules. Si vous
cliquez sur une cellule, vous recevez le message d’erreur suivant dans la boîte de dialogue Propriétés de la
cellule :

Un ensemble a été rencontré et ne peut pas contenir de membres calculés

NOTE
Vous recevez le message d’erreur dans la colonne Valeur de la VALUE propriété et de la FORMATTED_VALUE propriété.

Cause
Ce problème se produit parce qu’un membre calculé contient la fonction et que cette fonction possède un
ensemble de membres Aggregate non aggrégables.
Par exemple, considérez la requête MDX mentionnée dans la section Étapes pour reproduire le problème. Dans
l’exemple de base de données [Adventure works DW], le [Scénario]. Le membre [Scénario] n’est pas aggrégable.
La propriété IsAggregatable de cet attribut de dimension est définie sur False . Si vous exécutez cette requête
MDX, vous recevrez le message d’erreur mentionné dans la section Symptômes.

Étapes pour reproduire le problème


1. Dans SQL Server Business Intelligence Development Studio, ouvrez l’exemple de projet Adventure Works
DW Êdition Entreprise projet.

NOTE
L’exemple de projet Adventure Works DW Êdition Entreprise est inclus dans le projet de base de données Analysis
Services. Pour télécharger le projet de base de données Analysis Services, voir les exemples de bases de données
AdventureWorks.

2. Déployez l’exemple de projet sur une instance de SQL Server Analysis Services.
3. Ouvrez SQL Server Management Studio, puis connectez-vous à l’instance d’Analysis Services.
4. Cliquez sur Nouvelle requête .
5. Dans la fenêtre de requête, exécutez la requête MDX suivante :

WITH MEMBER
[Scenario].[Scenario].[MyMember]
AS
AGGREGATE(
{[Scenario].[Scenario].&[1],
[Scenario].[Scenario].&[2],
[Scenario].[Scenario].&[3],
[Scenario].[Scenario].[Budget Variance]
})

SELECT
{[Measures].[Amount]} ON AXIS(0)
FROM
[Adventure Works]
WHERE [Scenario].[Scenario].[MyMember]
Les requêtes MDX avec mesure calculée à l’aide de
l’opérateur « / » s’exécutent lentement dans SSAS
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème lorsqu’une requête MDX (Multidimensional Expressions) est
exécutée avec une mesure calculée dans les instances tabulaires SSAS 2016, 2017 et 2019.
S’applique à : Analysis Services, SQL Server 2016, SQL Server 2019, SQL Server 2017 Windows, Analysis
Cubes
Numéro de la ko d’origine : 4560494

Symptômes
Lorsqu’une requête MDX (Multidimensional Expressions) est exécutée avec une mesure calculée dans les
instances tabulaires SSAS 2016, 2017 et 2019, la mesure calculée s’exécute lentement et consomme beaucoup
d’activités si elle utilise / l’opérateur.

Cause
Une fonction DIVIDE améliorée permettant d’accélérer les performances est disponible dans MDX et DAX.

Résolution
Utilisez la fonction DIVIDE au lieu de / l’opérateur dans le calcul.

Références
terminDescription of the standard terminology that is used to describe Microsoft software updatesology
Aucun résultat pour la requête de script XMLA pour
les propriétés/membres d’une hiérarchie de
dimension
14/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème qui se produit lorsque vous essayez d’obtenir les propriétés et les
membres d’une hiérarchie de dimensions à l’aide du script XML for Analysis (XMLA).
Version du produit d’origine : SQL Server 2016 Business Intelligence, SQL Server 2016 Analysis Services
Numéro de la ko d’origine : 4038458

Symptômes
Supposons que vous Microsoft SQL Server 2016 Analysis Services (SSAS 2016) soit installé. Lorsque vous
essayez d’obtenir les propriétés d’une hiérarchie de dimensions spécifique et de ses membres à l’aide du script
XMLA dans SSAS 2016, aucun résultat n’est renvoyé.

NOTE
Le même script XMLA fonctionne dans SQL Server 2014 Analysis Services ou des versions antérieures de SQL Server
Analysis Services.
This issue only occurs when HierarchyUniqueNameStyle is set to ExcludeDimensionName .

Cause
Ce problème se produit car la valeur ExcludeDimensionName était destinée uniquement à la prise en charge
d’anciennes bases de données, telles que SQL Server 2000 ou 2005. Si HierarchyUniqueNameStyle elle est définie
sur ExcludeDimensionName , toute demande XMLA qui inclut dans le produit DIMENSION_UNIQUE_NAME des
résultats RestrictionList vides.

Solution de contournement
Pour contourner ce problème, définissez la valeur HierarchyUniqueNameStyle sur IncludeDimensionName
dans l’objet de dimension de cube.
Comment effectuer une requête distribuée SQL
Server avec OLAP Server
12/08/2021 • 6 minutes to read

Cet article explique comment effectuer une requête distribuée SQL Server avec OLAP Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 218592

Résumé
Cet article explique comment effectuer une requête distribuée SQL Server pour récupérer des données à partir
d’un cube OLAP Services (ou Analysis Services). Avec Microsoft SQL Server, vous pouvez effectuer des requêtes
auprès de fournisseurs OLE DB. Pour ce faire, vous pouvez utiliser l’une des suivantes :
Utilisez les OPENQUERY fonctions OPENROWSET Transact-SQL.
Utilisez une requête avec des noms en quatre partie, y compris un nom de serveur lié.
Par exemple :

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location',


'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')

Vous pouvez utiliser la ou la fonction dans une instruction SQL Server pour transmettre des requêtes au serveur
OPENROWSET OPENQUERY SELECT OLAP lié. La requête est limitée à la syntaxe abrégée prise en charge par OLAP
Services ; toutefois, la requête peut inclure la SELECT syntaxe MDX (Multidimensional Expressions). Une requête
qui inclut MDX renvoie des jeux de lignes aplatis, comme décrit dans la documentation OLE DB. Pour plus
d’informations sur la syntaxe prise en charge par SQL Server OLAP Services, voir la rubrique Syntaxe SQL
SELECT prise en charge dans la bibliothèque en ligne des SELECT services OLAP.
Pour interroger une base de données de serveur OLAP locale ou distante à partir de SQL Server, vous devez
installer le fournisseur OLE DB MSOLAP sur l’ordinateur qui exécute SQL Server. Le fournisseur MSOLAP OLE
DB est installé lorsque vous installez les composants clients OLAP à partir du SQL Server.

Exemple OPENROWSET et OPENQUERY


L’exemple de code Transact-SQL montre comment configurer et utiliser des requêtes distribuées avec un serveur
OLAP avec les OPENQUERY OpenRowset fonctions et les fonctions. Vous devez modifier les noms de source de
données et le nom de catalogue, le cas échéant.
------------------------------------------
--OPENROWSET for OLAP Server
------------------------------------------

SELECT a.*
FROM OpenRowset('MSOLAP','DATASOURCE=myOlapServer; Initial Catalog=FoodMart;',
'SELECT Measures.members ON ROWS,
[Product Category].members ON COLUMNS
FROM [Sales]') as a
go

-- Example of MDX with slicing --

SELECT a.*
FROM OpenRowset('MSOLAP','DATASOURCE=myOlapServer; Initial Catalog=FoodMart;',
'SELECT
{ Time.Year.[1997] } ON COLUMNS,
NON EMPTY Store.MEMBERS ON ROWS
FROM Sales
WHERE ( Product.[Product Category].[Dairy] )') as a

--------------------------------------------------
-- Linked Server Examples with OPENQUERY
--------------------------------------------------

EXEC sp_addlinkedserver
@server='olap_server',
@srvproduct='',
@provider='MSOLAP',
@datasrc='server',
@catalog='foodmart'

go

-- MDX in OPENQUERY --

SELECT *
FROM OPENQUERY(olap_server,
'SELECT
{ Time.Year.[1997] } ON COLUMNS,
NON EMPTY Store.MEMBERS ON ROWS
FROM Sales
WHERE ( Product.[Product Category].[Dairy])' )

NOTE
La rubrique Transmission de requêtes de SQL Server à un serveur OL AP lié, dans la documentation en ligne des services
OLAP, présente un bogue de documentation dans l’exemple de code :

SELECT *
FROM OPENQUERY(olap_server, 'SELECT [customer], [quantity] FROM sales')

Seule une forme limitée de SQL est prise en charge, et seuls les noms de niveau ou de mesure peuvent être
spécifiés. Lorsque vous exécutez la requête, vous recevez ce message d’erreur :

Serveur : Msg 7399, Level 16, State 1, Line 1 OLE DB provider 'MSOLAP' reported an error. [Message
renvoyé par le fournisseur OLE/DB : Le nom de colonne « client » n’est pas valide. Seuls les noms de
niveau ou de mesure peuvent être spécifiés.]

L’une des façons de résoudre la requête consiste à utiliser ce qui suit :


SELECT *
FROM OPENQUERY(olap_server, 'SELECT [unit sales] FROM sales')

Toutefois, le SQL instructions de ce formulaire à OLAP Server peut être lent et vous pouvez recevoir une erreur
de délai d’SQL sur certains ordinateurs :

Le fournisseur OLE DB « MSOLAP » a signalé une erreur. [Message renvoyé par le fournisseur OLE/DB :
impossible d’ouvrir la base de données « foodmart » ] [Message renvoyé par le fournisseur OLE/DB : erreur
de serveur OLAP : l’opération demandée a échoué en raison du délai d’échéance.]

Exemples de serveurs liés avec des noms en quatre partie


L’exemple de code SQL transact dans cette section illustre l’utilisation d’un serveur lié avec un nom en quatre
parties pour interroger un cube OLAP. Dans le code, le serveur lié nommé Olap_server a été créé dans
l’exemple précédent :

Select [Store:Store Name]


from Olap_server.FoodMart..[sales]
WHERE [Store:Store State]='WA'
go
Select [Product:Product Category], count ([Store:Store Name])
from Olap_server.FoodMart..[sales]
WHERE [Store:Store State]='WA'
GROUP BY [Product:Product Category]

Bien que les exemples de serveur liés avec un nom en quatre partie fonctionnent bien, ils peuvent prendre
beaucoup de temps pour renvoyer un résultat au client. La syntaxe de nom en quatre SQL Server concept ; Il est
utilisé dans une commande Transact-SQL pour faire référence à une table dans un serveur lié et sa syntaxe est
limitée pour les requêtes OLAP. SQL Server peut déterminer qu’il doit lire la table de faits entière à partir
d’OLAP Server et effectuer l’opération proprement dite, ce qui peut prendre beaucoup de temps GROUP BY et de
ressources.
Microsoft recommande d’envoyer une instruction MDX par le biais d’une fonction ou d’une fonction, comme
illustré dans OPENROWSET OPENQUERY les exemples précédents. Cette méthode permet SQL Server envoyer la
commande directement au fournisseur OLAP lié, sans essayer de l’essayer. La commande peut être MDX ou le
sous-ensemble de SQL que le fournisseur OLAP prend en charge. Vous pouvez utiliser le jeu de lignes renvoyé
par la OPENQUERY fonction dans d’SQL opérateurs. Pour les requêtes MDX de base et les requêtes qui retournent
une quantité de données relativement faible (comme un écran), le jeu de résultats doit toujours être créé en
moins de GROUP BY 10 secondes, généralement en 5 secondes, quelle que soit la taille du cube. Si les requêtes
prennent plus de temps, vous pouvez créer davantage d’agrégations à l’aide de l’Assistant Analyse basée sur
l’utilisation.
Conseils de performances
Voici quelques conseils de performances :
SQL Server ouvre deux connexions au fournisseur OLAP pour chaque requête. L’une de ces requêtes est
réutilisée pour les requêtes ultérieures ; Par conséquent, si vous exécutez à nouveau la commande, la
deuxième requête peut s’exécuter plus rapidement.
Pour augmenter la vitesse, groupez par une autre dimension (car vous avez moins de données).
Dans le pire des cas, le cube est stocké par le biais d’olap relationnels (ROLAP) et il n’y a pas d’agrégation.
Ensuite, le serveur OLAP ouvre une connexion à SQL Server pour obtenir les lignes de table de faits.
N’utilisez pas SQL Server requête distribuée dans ce cas.
Si vous avez simplement besoin d’un jeu de résultats provenant d’un serveur OLAP ou d’un fichier cube,
essayez d’utiliser une application SQL Server OLE DB C++ ou ADO(ADO*MD) directement sur le serveur
OLAP ou sur un fichier de cube.
SQL Server installe certains fournisseurs OLE DB et les configure pour qu’ils se chargent in-process. Étant
donné que le fournisseur MSOLAP n’est pas installé par SQL Server, il est configuré pour charger hors
processus. Microsoft recommande vivement de modifier les options de chargement in-process du
fournisseur OLAP, car cette configuration améliore les performances de vos requêtes OLAP. Pour apporter
la modification, suivez les étapes suivantes :
1. Dans le dossier Sécurité, cliquez avec le bouton droit sur Ser veurs liés, puis cliquez sur Nouveau
ser veur lié.
2. Pour le nom du fournisseur, cliquez pour sélectionner le fournisseur OLE DB pour les ser vices
OL AP.
3. Cliquez sur Options .
4. Cliquez pour sélectionner Autoriser InProcess .
5. Cliquez sur OK .

Références
Pour obtenir une description détaillée des paramètres de procédure sp_addlinkedserver stockée, voir
SQL Server Books Online.
Pour plus d’informations sur la configuration et l’utilisation de requêtes distribuées, recherchez sur , et
sur les sp_addlinkedserver OPENQUERY OPENROWSET rubriques connexes, dans SQL Server Books Online.
Pour en savoir plus sur la technologie OLAP et la syntaxe MDX, consultez la bibliothèque en ligne des
services OLAP.
Résultat inattendu d’Analysis Services lorsque
Dimension DefaultMember n’est pas Tout et qu’un
filtre de rapport est appliqué Excel
14/08/2021 • 4 minutes to read

Cet article vous aide à contourner le problème dans lequel vous obtenez un résultat inattendu d’Analysis
Services lorsque Dimension n’est pas tout et qu’un filtre de rapport est appliqué DefaultMember Excel.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2607575

Résumé
Lorsque la hiérarchie d’attributs dimension est définie sur un membre autre que le membre ALL et que vous
exécutez une requête MDX qui utilise un , qui renvoie un ensemble qui exclut le , les valeurs renvoyées dans le
plus à l’extérieur sont les valeurs d’agrégat associées aux membres de l’ensemble défini dans DefaultMember
sub-select le DefaultMember SELECT sub-select . Si la requête MDX (Multidimensional Expressions) utilise un
, qui renvoie un ensemble qui inclut les , les valeurs renvoyées dans le SELECT le plus extérieur sont les valeurs
sub-select DefaultMember associées à DefaultMember la .

Le comportement conçu est que, le plus à l’extérieur, les membres par défaut sur les axes sont déterminés en
fonction de ce qui est disponible dans l’espace du sous-cube défini par les SELECT SELECT instructions internes.
S’il se trouve dans le slicer, mais pas sur un axe, les valeurs associées à DefaultMember DefaultMember l’axe sont
renvoyées. Si l’objet est exclu du slicer, les valeurs renvoyées sont écrasées par les valeurs DefaultMember
d’agrégation sous un membre « ALL ».

Plus d’informations
Lorsque vous utilisez Excel 2007 ou Excel 2010 pour interroger une base de données Analysis Services, une
pratique relativement courante et une nécessité fréquente consiste à découper le cube en setting un filtre à l’aide
d’une ou plusieurs des dimensions dans la zone « Filtre de rapport » du contrôle Tableau croisé dynamique.
Lorsque cette action est effectuée, le client Excel génère une requête MDX qui inclut une clause ou interne pour
filtrer les données et limiter l’espace SELECT sub-select du cube. Par exemple, en utilisant Excel 2010 et en se
connectant à la base de Adventure Works DW 2008 données, en plaçant [Mesures].[ Montant des ventes Internet]
dans la section Valeurs du tableau croisé dynamique, en ajoutant la hiérarchie, y compris
[Customer].[Customer Geography] uniquement le [Client].[ Géographie du client]. [Pays]. Membre [Canada] et
ajout de la dimension à la zone Filtre de lignes, puis définition d’un filtre qui inclut uniquement et , la valeur
renvoyée est [Product].[Category] [Product].[Category].[Accessories] [Product].[Category].[Bikes] $1 924
680,24 . Dans ce cas, la requête générée par le Excel est :

SELECT
NON EMPTY Hierarchize(AddCalculatedMembers(
{DrilldownLevel({[Customer].[Customer Geography].[All Customers]})}))
DIMENSION PROPERTIES PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME ON COLUMNS
FROM (SELECT ({[Customer].[Customer Geography].[Country].&[Canada]}) ON COLUMNS
FROM (SELECT ({[Product].[Category].&[1], [Product].[Category].&[4]}) ON COLUMNS
FROM [Adventure Works]))
WHERE ([Measures].[Internet Sales Amount])
CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS
Si les conditions filter sont modifiées afin que le filtre de lignes contienne désormais les membres et que la
valeur renvoyée est [Product].[Category].[Accessories] [Product].[Category].[Clothing] $156 542,47 et que
la requête générée par Excel est :

SELECT
NON EMPTY Hierarchize(AddCalculatedMembers(
{DrilldownLevel({[Customer].[Customer Geography].[All Customers]})}))
DIMENSION PROPERTIES PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME ON COLUMNS
FROM (SELECT ({[Customer].[Customer Geography].[Country].&[Canada]}) ON COLUMNS
FROM (SELECT ({[Product].[Category].&[3], [Product].[Category].&[4]}) ON COLUMNS
FROM [Adventure Works]))
WHERE ([Measures].[Internet Sales Amount])
CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS

Si la conception de la hiérarchie d’attributs est modifiée pour définir la propriété sur , et que le tableau croisé
dynamique est définie pour utiliser la condition de filtre suivante, le membre sur les colonnes, avec
[Product].[Category] DefaultMember le [Product].[Category].&[2]
[Customer].[Customer Geography].[Country].[Canada] [Produit].[ Dimension Category] de la zone De filtrage des
lignes, y compris uniquement et , la requête générée par Excel est identique à la première et la valeur renvoyée
est [Product].[Category].[Accessories] [Product].[Category].[Bikes] $1 821 302,39 bien que la valeur
agrégée pour les deux et à l’intersection avec est [Product].[Category].[Accessories]
[Product].[Category].[Bikes] [Customer].[Customer Geography].[Country].&[Canada] $1 924 680,24 . Si le
[Produit]. [Category] attribute hierarchy is moved to either the Rows or Columns axis, the value displayed for the
'Grand Total' is $1,924,680.24 . Si la hiérarchie d’attributs est déplacée vers la zone De filtre de ligne et que les
conditions de filtre sont de nouveau modifiées afin que le filtre de ligne contienne maintenant les membres et ,
la valeur renvoyée est [Product].[Category] [Product].[Category].[Accessories] $156 542,47 et la requête
MDX générée par Excel est identique à la deuxième requête [Product].[Category].[Clothing] MDX ci-dessus.
Ce comportement est inhérent au produit. Les membres par défaut sont déterminés lors de l’exécution de la
requête en fonction des membres disponibles dans l’espace de cube. Si le membre par défaut d’une hiérarchie
se trouve dans le slicer qui définit l’espace de cube utilisé pour l’exécution des requêtes et que la hiérarchie n’est
pas explicitement incluse sur l’un des axes, les valeurs associées au membre par défaut sont renvoyées. Si le
membre par défaut d’une hiérarchie se trouve dans le slicer qui définit l’espace de cube utilisé pour l’exécution
des requêtes et que la hiérarchie est explicitement incluse sur l’un des axes, les valeurs des membres individuels
sont renvoyées et la valeur agrégée des membres s’affiche sous la forme d’un total général . Si le membre par
défaut d’une hiérarchie n’est pas dans le slicer qui définit l’espace de cube utilisé pour l’exécution des requêtes et
que la hiérarchie n’est pas explicitement incluse sur l’un des axes, les valeurs agrégées des membres du slicer
sont renvoyées en tant que membre « ALL ».

Solution de contournement
Pour contourner ce comportement, filtrez les hiérarchies avec DefaultMembers définies sur un membre autre
que le membre « ALL » sur lignes ou colonnes.
Problème de performances d’écriture écriture
lorsque la sécurité des cellules est activée dans SQL
Server Analysis Services
15/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème de performances d’écriture écriture qui se produit lorsque la
sécurité des cellules est activée dans SQL Server Analysis Services.
Version du produit d’origine : SQL Server 2012 Analysis Services
Numéro de la ko d’origine : 2747616

Symptômes
Supposons que vous exécutez Microsoft SQL Server Analysis Services (SSAS) sous un rôle pour lequel la
sécurité des cellules est activée. Lorsque vous essayez d’exécuter une instruction MDX (Multidimensional
Expressions) UPDATE CUBE, l’exécution de l’instruction peut prendre plus de temps que pour un rôle pour lequel
la sécurité des cellules n’est pas activée.

Cause
Ce comportement est inhérent au produit. Lorsque la sécurité des cellules est activée, le moteur Analysis
Services exécute les requêtes en mode cellule par cellule. Si l’opération d’écriture écriture/écriture effectue une
allocation à un niveau élevé, l’espace des cellules de niveau feuille est important.

NOTE
L’espace n’est pas le nombre de lignes dans la table de faits. L’espace est l’espace complet entre les jointeurs de tous les
attributs de granularité de dimension. Il faut beaucoup de temps pour éumer ces cellules une par une afin de vérifier la
sécurité des cellules.

Solution de contournement
Pour contourner ce problème, appliquez l’une des méthodes ci-dessous.
Méthode 1
Placez les mesures qui doivent être sécurisées dans un cube distinct et implémentez la sécurité d’écriture
au niveau du cube sous votre rôle.

NOTE
Les performances lorsque vous utilisez cette méthode sont aussi rapides que lorsque la requête s’exécute sous un
rôle d’administrateur. Toutefois, la conception de votre cube devient complexe et vous devez créer des cubes
virtuels pour utiliser des groupes de mesures liés afin de retourner les différentes mesures dans une seule requête
MDX. En outre, lorsque vous effectuez l’opération d’écriture écriture, vous devez créer une requête MDX qui utilise
le nom de cube correct en fonction de la mesure d’écriture.

Méthode 2
Effectuez l’opération d’écriture en écriture avec le niveau de granularité le plus bas d’un membre. Vous ne
pouvez pas allouer de nombreux membres de granularité détaillés.

NOTE
Vous de devez peut-être créer des membres factices dans les tables de dimension qui sont marqués comme
membres d’ajustement dans chaque dimension, pour prendre en charge l’opération d’écriture.
« #N/A » renvoie lorsque vous exécutez une
requête à plusieurs sous-SQL Server Analysis
Services
15/08/2021 • 2 minutes to read

Cet article présente un problème qui se produit lorsque vous exécutez une requête à plusieurs sous-sous-SQL
Server Analysis Services.
Version du produit d’origine : SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012
Numéro de la ko d’origine : 4100766

Symptômes
Prenons l’exemple du scénario suivant :
Vous installez Analysis Services en mode sur une instance de Multidimensional SQL Server 2012, SQL
Server 2014, SQL Server 2016 ou SQL Server 2017.
Il existe une base de données dans cette instance.
Vous créez un rôle avec une autorisation de lecture de sécurité des cellules pour cette base de données.
Vous exécutez une requête qui contient un sous-choix avec plusieurs membres.
Dans ce cas, vous obtenez des valeurs de cellule #N/A pour la mesure si le sous-contrôle multi-membres est
inférieur ou inférieur à la granularité et si les membres de niveau supérieur dont les valeurs sont affectées par
les autorisations de lecture de sécurité des cellules leur sont appliquées.

Cause
Ce comportement est inhérent au produit. Cette conception permet de s’assurer que la base de données
n’expose pas de valeurs de cellules réelles qui sont sécurisées par la sécurité des cellules.

S’applique à
SQL Server 2012
SQL Server 2012 Analysis Services
SQL Server 2014
SQL Server 2014 Business Intelligence
SQL Server 2016
SQL Server 2017 sur Windows
Can’t start SQL Server Analysis Services clustered
instance after changing service account
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous modifiez le compte de service qui a été
spécifié lors de la configuration SQL Server à un nouveau compte de domaine à l’aide de Gestionnaire de
configuration SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 4041637

Symptôme
Supposons que vous avez des instances en cluster dans Microsoft SQL Server 2008 ou dans SQL Server 2008
R2. Lorsque vous modifiez le compte de service dans Gestionnaire de configuration SQL Server du compte
spécifié lors de la configuration d’SQL Server à un nouveau compte de domaine, vous recevez un message
d’erreur semblable au suivant dans Gestionnaire de configuration SQL Server :

Erreur de fournisseur WMI


Erreur non spécifiée [0x80004005]

En outre, vous ne pouvez pas démarrer l’instance SQL Server cluster Analysis Services. Lorsque vous vérifiez le
journal des événements système, vous voyez le message d’erreur suivant :

Le service MSSQLServerOLAPService n’a pas pu se connecter comme avec le mot de passe actuellement
configuré en raison de <Domain> <New account> l’erreur suivante :
Échec de la logon: l’utilisateur n’a pas reçu le type de logon sur cet ordinateur.
Service : MSSQLServerOLAPService
Domaine et compte :<Domain><New account>
Ce compte de service n’a pas le droit d’utilisateur requis « Se connecter en tant que service ».
Action de l'utilisateur
Affectez « Se connecter en tant que service » au compte de service sur cet ordinateur. Vous pouvez utiliser
l’Paramètres de sécurité locale (Secpol.msc) pour ce faire. Si cet ordinateur est un nœud dans un cluster,
vérifiez que ce droit d’utilisateur est affecté au compte de service de cluster sur tous les nœuds du cluster.
Si vous avez déjà affecté ce droit d’utilisateur au compte de service et que le droit d’utilisateur semble être
supprimé, vérifiez auprès de votre administrateur de domaine si un objet de stratégie de groupe associé à ce
nœud peut supprimer le droit.

NOTE
Le service indiqué précédemment est pour l’instance par défaut. Pour une instance nommée, le nom du service est
MSOLAP$ <instance name> .
Cause
Ce problème se produit car lorsque vous définissez l’instance en cluster d’Analysis Services, le SID du service
n’est pas autorisé à se connecter en tant que droit utilisateur de stratégie locale de ser vice
(SeServiceLogonRight).

Résolution
Pour résoudre ce problème, accordez au service Analysis Services SQL Server sid l’utilisateur de la stratégie
locale se connecter en tant que service.
Pour une instance par défaut de SQL Server Analysis Services, le nom du SID de service est
NT SERVICE\MSSQLServerOLAPService .
Pour une instance nommée, le nom est NT SERVICE\MSOLAP$\<instance name> .
Pour accorder au siD de ser vice le droit d’ouvrir une session en tant que service, suivez les étapes suivantes :
1. Ouvrez la stratégie de sécurité locale en exécutant la commande Secpol.msc.
2. Développez les stratégies locales.
3. Cliquez sur Attribution des droits d’utilisateur.
4. Dans le volet droit, cliquez avec le bouton droit sur Ouvrir une session en tant que ser vice, puis cliquez
sur Propriétés.
5. Cliquez sur Ajouter un utilisateur ou un groupe.
6. Cliquez sur le bouton Emplacements, sélectionnez le nom du serveur, puis cliquez sur OK.
7. Dans Entrez les noms d’objets à sélectionner, tapez NT SERVICE\MSSQLServerOLAPService, puis
cliquez sur OK .

NOTE
Pour une instance nommée, utilisez plutôt MSOLAP$\<instance name> .

8. Cliquez sur OK .
Vous devez répéter ces étapes pour tous les nodes dans le cluster.

Plus d’informations
This issue only affects clustered instances of Analysis Services for SQL Server 2008 and SQL Server 2008 R2.
Pour SQL Server 2012 et les versions ultérieures du programme, vous ne pouvez pas reproduire ce problème.
Erreur (la clé donnée n’était pas présente dans le
dictionnaire) et l’installation SQL Server FCI échoue
sur une VM Azure dans Server 2019
13/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’installer une instance de
cluster de Microsoft SQL Server (FCI) dans Windows Server 2019 sur une machine virtuelle (VM) Microsoft
Azure.
S’applique à : SQL Server VM - Windows, Windows Server 2019
Numéro de la ko d’origine : 4525647

Symptômes
Lorsque vous essayez d’installer une instance en cluster de Microsoft SQL Server (FCI) dans Windows Server
2019 sur une machine virtuelle Microsoft Azure, l’installation échoue et vous recevez le message d’erreur
suivant :

La clé donnée n’était pas présente dans le dictionnaire.

Dans ce cas, vous pouvez voir les informations supplémentaires suivantes dans le fichier journal Details.txt dans
le dossier SQL Server’installation :

Données d’action : Fonctionnalité = SQL_Engine_Core_Inst_sql_engine_core_inst_Cpu64 Scenario = install


Timing = ConfigNonRC ConfigObjectType = Microsoft.SqlServer.Configuration.
ClusterConfiguration.FailoverClusterNamePrivateConfigObject FeatureName = SQL_Engine_Core_Inst
FeatureCpuType = Cpu64 FeaturePackageId = sql_engine_core_inst FeatureClusterState =
CompleteFailoverCluster Configuration action failed for feature SQL_Engine_Core_Inst during timing
ConfigNonRC and scenario ConfigNonRC. La clé donnée n’était pas présente dans le dictionnaire. La
catégorie d’échec de configuration de l’exception actuelle est l’échec de l’action de configuration
ConfigurationFailure pour la fonctionnalité SQL_Engine_Core_Inst lors du minutage ConfigNonRC et du
scénario ConfigNonRC. System.Collections.Generic.KeyNotFoundException : la clé donnée n’était pas
présente dans le dictionnaire. at System.ThrowHelper.ThrowKeyNotFoundException() at
System.Collections.Generic.Dictionary
2.get_Item(TKey key) at
Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePubli
pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionar
2 actionData, PublicConfigurationBase spcb) at
Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario
scenario, ConfigActionTiming timing, Action ConfigBaseAction, Dictionary
2 actionData, PublicConfigurationBase spcbCurrent) at
Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario
scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBase spcbCurrent) at
Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) at
Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter
errorStream) The following is an exception stack listing the exceptions in outermost to innermost inner
order Inner exceptions are being indented Exception type:
System.Collections.Generic.KeyNotFoundException Message: The given key was not present in the
dictionary. HResult : 0x80131577 données : SQL. Setup.FailureCategory = ConfigurationFailure
WatsonConfigActionData = INSTALL@CONFIGNONRC @SQL_ENGINE_CORE_INST
WatsonExceptionFeatureIdsActionData = System.String[] Stack: at
System.ThrowHelper.ThrowKeyNotFoundException() at System.Collections.Generic.Dictionary
2.get_Item(TKey key) at
Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePubli
pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionar
2 actionData, PublicConfigurationBase spcb) at
Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario
scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBase spcbCurrent) at
Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario
scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBase spcbCurrent) at
Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) at
Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter
errorStream)

Cause
Un nouveau commutateur, ManagementPointNetworkType , qui peut être appelé par les cmdlets PowerShell
pour FailoverClusters est introduit dans Windows Server 2019. Vous pouvez utiliser les options suivantes pour
le nouveau commutateur.

PA RA M ÈT RE SW ITC H UT IL ISAT IO N

Singleton Utilise la méthode traditionnelle d’adresse IP statique ou


DHCP.

Distribué Utilisez un nom de réseau distribué à l’aide d’adresses IP de


nœud.

Automatique Utilise la détection pour déterminer le paramètre approprié.


Si SQL Server est en cours d’exécution dans Azure, utilise
Distributed . Si SQL Server est en cours d’exécution en local,
utilise Singleton (paramètre par défaut).

Si vous créez le cluster Windows à l’aide de l’outil Windows Cluster Manager, l’outil définit le paramètre de
commutateur sur Automatique . Étant donné que vous travaillez sur une VM Azure, le commutateur utilise
plutôt un nom de réseau distribué.
Vous pouvez le vérifier en exécutant la commande PowerShell suivante :

C:\windows\system32> Get-clusterresource

La sortie renvoyée par cette commande ressemble à ceci :

Name State OwnerGroup ResourceType


Cloud Witness Online Cluster Group Cloud Witness
Cluster Name Online Cluster Group Distributed Network Name
Cluster Pool 1 Online 45d8f3c2-e8df-4a01-87b8-f3c383801f3f
Storage Pool
Cluster Virtual Disk
(ClusterPerformanceHistory) Online Cluster Group Physical Disk
Health Online Cluster Group Health Service
SDDC Management Online Cluster Group SDDC Management
Storage QoS Resource Online Cluster Group Storage QoS Policy Manager

La CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) fonction vérifie le nom


de la ressource dont le type estNetworkName. Cela consiste à vérifier que le nom du serveur virtuel que vous
avez entré existe déjà.
Toutefois, l’installation SQL Server FCI sur un cluster Windows qui ne possède qu’un nom de réseau distribué
n’est pas prise en charge. Le message d’erreur mentionné dans la section Symptômes indique qu’il n’existe
aucune ressource disponible dans Windows Server 2019 dont le type estNetworkName.

Résolution
Pour résoudre ce problème, vous pouvez supprimer le cluster actuel, puis le créer à nouveau à l’aide d’une
commande PowerShell qui a le paramètre suivant :

managementpointnetworktype singleton
SQL Server 2012 DQS Export to 64-bit .xls Excel file
fails with error
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où le téléchargement de fichier a échoué, vérifiez que le fichier de
destination d’exportation n’existe pas déjà une erreur se produit.
S’applique à : SQL Server 2012 Business Intelligence, SQL Server 2012 Developer, SQL Server 2012 Enterprise
Numéro de la ko d’origine : 2712972

Symptômes
Lorsque vous utilisez SQL Server Services de qualité des données 2012, sur un ordinateur sur lequel Microsoft
Excel 64 bits est installé, envisagez le scénario suivant :
Vous utilisez Data Quality Client pour exécuter un projet nettoyage ou mise en correspondance des
données.
Vous devez effectuer les étapes nécessaires pour accéder à la page d’exportation finale du projet de
qualité des données.
Vous tentez d’exporter des résultats nettoyés, vers le fichier de Excel de destination.
Cliquez sur le bouton Parcourir pour spécifier un fichier Excel existant vers le fichier à exporter.
Vous spécifiez le type de fichier d’exportation et pointez vers Excel 97-2003 Workbook (*.xls) un
fichier avec l’extension .xls exporter.
Cliquez sur le bouton Ouvrir pour choisir le fichier de destination.
Cliquez sur le bouton Expor ter pour exécuter l’action d’exportation.
Une erreur s’affiche :

Échec du téléchargement du fichier, vérifiez que le fichier de destination d’exportation n’existe pas déjà.

Cause
Dans ce scénario, l’exportation vers Excel type de fichier 2003-2007 *.xls échoue, ce qui est un bogue.
DQS doit être en mesure d’exporter vers *.xls lorsque Microsoft Excel 64 bits est installé sans erreur.

Résolution
Informations sur le Service Pack SQL Server 2012
Pour résoudre ce problème, obtenez le dernier Service Pack pour SQL Server 2012. Pour plus d’informations,
voir KB2755533 -Comment obtenir le dernier Service Pack pour SQL Server 2012 .
Vous pouvez désormais parcourir et spécifier le fichier d’exportation qui possède l’extension *.xls et exécuter
l’action Exporter sans l’erreur, lorsque Excel 64 bits est installé sur l’ordinateur.

Plus d’informations
Lorsque vous utilisez Microsoft Excel 2007 ou 2010 64 bits sur l’ordinateur sur lequel Data Quality Client est
installé, vous pouvez exporter uniquement vers le format de fichier *Excel 2003-2007 *.xls à compatibilité avec
les rétrogradations, ou choisir un autre type de destination tel que SQL Server ou CSV (fichier texte délimité par
des virgules).
Il est attendu que SQL Server 2012 Data Quality Client ne puisse pas exporter des projets de données vers le
nouveau format de fichier *.xlsx lorsque la version Microsoft Excel installée est 64 bits. Ce comportement est
voulu par la conception même du produit.
Lorsque vous utilisez Microsoft Excel 2007 ou 2010 32 bits sur l’ordinateur sur lequel Data Quality Client est
installé, vous pouvez exporter vers.xlsx*.xls ou choisir un autre type de destination tel que SQL Server ou * CSV.
Données d’analyse à l’aide de connaissances DQS (internes)
Exécuter une Project
Pour afficher la version de Excel et détecter s’il s’agit d’une version 64 bits ou 32 bits.
Dans Excel 2007
Cliquez sur le bouton Office forme circulaire dans le coin supérieur gauche. Choisissez le bouton
Options, affichez la page références. Afficher la section à propos de.
Dans Excel 2010
Cliquez sur l’onglet Fichier sur le ruban, cliquez sur la page d’aide et notez la version dans le volet droit
sous l’en-tête À propos Microsoft Excel.
Le numéro de version et l’architecture seront répertoriés, par exemple (32 bits) ou (64 bits).
SQL Server 2012 DQSInstaller.exe'accès au dossier
TMP peut échouer
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où le chemin d’accès du dossier temporaire contient un caractère
ANSI accentué ou spécial.
S’applique à : SQL Server 2012 Business Intelligence, SQL Server 2012 Developer, SQL Server 2012 Enterprise
Numéro de la ko d’origine : 2702283

Symptômes
Le programme d SQL Server du programme d’installation des services de qualité des données 2012
DQSInstaller.exe peut échouer sur les ordinateurs dont le chemin d’accès au dossier temporaire contient un
caractère ANSI accentué ou spécial.
Par exemple, pour Windows utilisateurs avec des caractères accentués dans le nom d’utilisateur, le dossier
temporaire peut contenir des caractères é accentués, tels que C:\Users\Us é rNam é\AppData\Local\Temp\ .
Vous pouvez noter les erreurs suivantes sur la console lors de l’exécution de DQSInstaller.exe, ou dans le journal
de sortie DQSInstaller.exe (l’emplacement par défaut est ) CREATE ASSEMBLY a échoué, car il n’a pas pu ouvrir le
fichier physique Enregistrer les assemblys
C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Log\DQS_install.log Microsoft.Practices :

Msg 6501, Level 16, State 7, Server DOMAIN\SERVERNAME, Line 2


CREATE ASSEMBLY a échoué car il n’a pas pu ouvrir le fichier physique « C:\Users <username>
\AppData\Local\Temp\Microsoft.Practices.ObjectBuilder2.dll » : 3(Le système ne peut pas trouver le chemin
d’accès <random folder> spécifié.)
ERREUR - Une erreur s’est produite, le message de vérification ci-dessus le processus de script a renvoyé un
code de sortie inattendu : '1'.
Action « Enregistrer les assemblys de qualité des données et les procédures stockées » terminée par des
erreurs, abandon de l’installation.
Démarrage de la rollback d’installation...
La mise à l’installation a été correctement effectuée.
Le programme d’installation DQS a terminé avec des erreurs. Consultez le fichier journal d’installation à
l’Microsoft SQL Server\MSSQL11. InstanceName\MSSQL\Log\DQS_install.log
Appuyez sur n’importe quelle touche pour continuer...

Cause
Le dossier temporaire utilisé par DQSInstaller.exe est spécifié par la variable d’environnement TMP.
DQSInstaller extrait les fichiers d’assembly et les scripts dans un dossier temporaire avec un nom aléatoire sous
le dossier temporaire. Si ce chemin d’accès temporaire contient des caractères spéciaux, DQSInstaller n’exécute
pas correctement les caractères accentués ou spéciaux lors de l’exécution de scripts et d’assemblys.

Résolution
Le moyen le plus simple de résoudre le problème consiste à lancer l’invite de commandes en tant
qu’administrateur (l’élever si le contrôle UAC est activé), à remplacer temporairement l’emplacement TMP par
une variable TMP locale, puis à exécuter le DQSInstaller.exe.
Dans cet exemple de syntaxe d’invite de commandes, nous allons créer un répertoire (md) c:\temp, puis définir
la variable TMP sur cet emplacement, puis modifier le répertoire dans le dossier où DQSInstaller.exe est présent,
puis exécuter le DQSInstaller.exe (sans commutateurs supplémentaires).

md c:\temp
SET tmp=c:\temp
cd "c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLServer\MSSQL\Binn\"
DQSInstaller.exe

Plus d’informations
Pour visiter le dossier TMP dans l’Explorateur Windows, vous pouvez ouvrir l’espace réservé %tmp% :
Démarrer >'> %tmp%
Pour tester la variable d’environnement TMP actuelle, vous pouvez utiliser la syntaxe SET à partir de l’invite de
commandes ou la syntaxe d’écho :

SET TMP

echo %tmp%

Pour modifier définitivement les variables d’environnement TMP et TEMP, voir Comment déplacer les répertoires
TEMP et TMP.
Erreur (échec de la phase de pré-exécution du
nettoyage DQS) lors de l’exécution de la
transformation nettoyage DQS SQL Server 2012
13/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème où une erreur est consignée dans le journal SSIS SQL Server
2012.
S’applique à : SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012 Standard
Numéro de la ko d’origine : 2715968

Symptômes
Prenons l’exemple du scénario suivant :
Vous utilisez la transformation nettoyage des services de qualité des données (DQS) dans une Flow de
données du service SQL Server-Integrated (SSIS) pour s’en servir dans Microsoft SQL Server 2012.
Vous définissez le paramètre « Configurer la sortie d’erreur » de la transformation nettoyage DQS sur « Ligne
de redirection ». Toutefois, vous ne spécifiez pas d’emplacement pour enregistrer la sortie d’erreur.
Vous exécutez le package SSIS.
Dans ce scénario, le message d’erreur suivant est consigné dans le journal SSIS :

Le nettoyage DQS a échoué à la phase de pré-exécution et le code d’erreur renvoyé 0x80070057.


System.ArgumentException : la valeur ne se trouve pas dans la plage attendue.
at Microsoft.SqlServer.Dts.pipeline.Wrapper.IDTSBufferManager100.FindColumnByLineageID(Int32
hBufferType, Int32 nLineageID)
at Microsoft.Ssdqs.Component.DataCorrection.Logic.DataCorrectionComponent.PreExecute() at
Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapp
er100 wrapper)

Cause
Ce problème se produit parce qu’une destination n’est pas définie pour la sortie d’erreur générée pour les lignes
qui ne répondent pas aux critères et règles de domaine DQS.

Solution de contournement
Pour résoudre ce problème, utilisez l’une des méthodes suivantes.
Méthode 1
Si vous ne souhaitez pas rediriger les lignes d’erreur, suivez les étapes suivantes pour résoudre le
problème :
1. Ouvrez le composant DQS dans l’Éditeur de transformation de nettoyage DQS.
2. Sélectionnez Composant d’échec dans la liste de listes de listes de sortie d’erreur Configurer en bas de
l’Éditeur de transformation de nettoyage DQS.
Méthode 2
Si vous devez rediriger vos lignes d’erreur, vous devez vous assurer que vous avez un emplacement de
destination pour les erreurs à rediriger.
SQL Server de démarrage sur un serveur autonome
13/08/2021 • 3 minutes to read

Il existe plusieurs raisons pour lesquelles SQL Server service peut ne pas démarrer. À un niveau élevé, les causes
peuvent être classées dans les catégories suivantes :
Problèmes qui affectent le compte configuré pour exécuter le service SQL Server service
Bases de données système inaccessibles
Dépendances manquantes
Configuration incorrecte du service SQL Server service
Problèmes affectant la configuration du certificat
Cette rubrique vous aide à résoudre les problèmes les plus SQL Server de démarrage dans ces catégories sur un
serveur autonome.
S’applique à : SQL Server

Résumé
SQL Server pouvez pas démarrer et vous recevez un message d’erreur lorsque vous utilisez l’un des outils
suivants pour démarrer le service SQL Server service :
Gestionnaire de configuration SQL Server
SQL Server Management Studio
Windows Gestionnaire de contrôle de service
Windows invite de commandes

NOTE
Le message d’erreur peut varier légèrement en fonction de l’outil que vous utilisez. Toutefois, en général, les ID
d’événement, les numéros d’erreur et les descriptions sont très similaires.

Étapes pour résoudre ces problèmes


1. Notez le message d’erreur que vous recevez de l’outil lorsque vous démarrez le service.
2. Notez l’ID d’événement correspondant et sa description associée qui est consignée dans les journaux
système et Windows application.
3. Utilisez le tableau suivant pour rechercher la rubrique correspondante qui contient des informations de
dépannage supplémentaires sur l’erreur, l’ID d’événement et la description.

NOTE
Tous ces dépannages utilisent le Gestionnaire de contrôle de service pour identifier l’erreur de démarrage et utilisent
Gestionnaire de configuration SQL Server pour fournir une résolution.
En règle générale, vous devez être administrateur sur l’ordinateur SQL Server résoudre les problèmes.

SQL Server messages d’erreur de démarrage


M ESSA GE D’ERREUR P RO VEN A N T DE SERVIC ES A P P L ET RÉVISIO N

Le service ou le groupe de dépendances n’a pas réussi à Le service SQL Server et le service d’agent SQL Server ne
démarrer. parviennent pas à démarrer sur un serveur autonome

Windows n’a pas pu démarrer SQL Server service Échec de l’SQL Server de l’SQL Server ne démarre pas
(MSSQLSERVER) sur l’ordinateur local. correctement
Erreur 1069 : le service n’a pas commencé en raison d’un
échec d’accès.

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) SQL Server ne peut pas démarrer si tous les protocoles sont
sur l’ordinateur local. Pour plus d’informations, examinez le désactivés
journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le
fournisseur du service et reportez-vous au code d’erreur
spécifique au service 13.

Windows n’a pas pu démarrer SQL Server service L’ID d’événement 17058 et SQL Server ne démarre pas
(MSSQLSERVER) sur l’ordinateur local.
Erreur 1067 : Le processus s’est terminé de manière
inattendue.

Windows n’a pas pu démarrer SQL Server service L’ID d’événement 7000 et SQL Server ne démarre pas
(MSSQLSERVER) sur l’ordinateur local.
Erreur 2 : le système ne peut pas trouver le fichier spécifié.

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) Erreur spécifique au service 17113 lorsque vous démarrez
sur l’ordinateur local. Pour plus d’informations, examinez le SQL Server service
journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le
fournisseur du service et reportez-vous au code d’erreur
spécifique au service 17113

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) L’ID d’événement 1814 et SQL Server ne démarre pas
sur l’ordinateur local. Pour plus d’informations, examinez le
journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le
fournisseur du service et reportez-vous au code d’erreur
spécifique au service 1814.

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) L’ID d’événement 33565 et SQL Server ne démarre pas
sur l’ordinateur local. Pour plus d’informations, examinez le après l’activer
journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le
fournisseur du service et reportez-vous au code d’erreur
propre au service 2146885628.

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) L’ID d’événement 33566 et SQL Server ne démarre pas
sur l’ordinateur local. Pour plus d’informations, examinez le après l’activer
journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le
fournisseur du service et reportez-vous au code d’erreur
spécifique au service 13.

Windows n’a pas pu démarrer SQL Server service Erreur « Accès refusé » et SQL Server ne démarre pas
(MSSQLSERVER) sur l’ordinateur local.
Erreur 5 : l’accès est refusé.
Référence
SQL Server service ne peut pas démarrer après avoir configuré une instance pour utiliser un certificat Secure
Sockets Layer
Erreur « Accès refusé » et SQL Server ne démarre
pas
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Lorsque vous configurez le service Microsoft SQL Server pour qu’il s’exécute sous un compte qui ne contient
pas suffisamment de privilèges sur le dossier d’installation de SQL Server, SQL Server ne démarre pas et
renvoie un message d’erreur semblable à ce qui suit, en fonction de la façon dont vous essayez de démarrer le
service :
À l’aide de l’applet services :

Windows n’a pas pu démarrer SQL Server service (MSSQLSERVER) sur l’ordinateur local.
Erreur 5 : l’accès est refusé.

À l’aide d’une invite de commandes :

C:\Users\username>NET START MSSQLSERVER


L’erreur système 5 s’est produite.
L’accès est refusé.

Résolution
1. Ouvrez le journal système et vérifiez que vous voyez une entrée de message d’erreur semblable à ce qui
suit :

Log Name: System


Source: Service Control Manager
Date: <Datetime>
Event ID: 7000
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The SQL Server (MSSQLSERVER) service failed to start due to the following error:
Access is denied.

2. À l’Microsoft SQL Server Configuration Manager ou service Control Manager, notez le compte de service
pour SQL Server service.
3. Accédez au dossier SQL Server d’installation (par exemple) et faites les choses suivantes pour vérifier
l’accès effectif C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Binn au compte SQL
service :
a. Cliquez avec le bouton droit sur le fichier ou le dossier, sélectionnez Propriétés, puis sélectionnez
l’onglet Sécurité.
b. Sélectionnez Avancé, sélectionnez l’onglet Accès effectif, puis sélectionnez Un utilisateur à taper dans
le compte SQL Service ou sélectionnez-le dans la liste.
c. Sélectionnez Afficher un accès efficace pour comprendre et résoudre le problème d’autorisations.
Par exemple, si l’autorisation Refuser est ajoutée à l’utilisateur ou au groupe dont le compte de service
SQL Server est membre, supprimez l’autorisation Refuser et redémarrez le service SQL Server.

NOTE
Vous pouvez également utiliser l’outil Process Monitor pour identifier et isoler les problèmes d’autorisation. La
capture d’écran suivante d’un exemple de sortie du moniteur de processus montre le compte de service
\sqlsrvlogin SQL Server générant une erreur <DomainName> d’accès refusé.

Référence
Autorisations de service
Erreur spécifique au service 17113 lorsque vous
démarrez SQL Server service
13/08/2021 • 3 minutes to read

S’applique à : SQL Server

Symptômes
Dans Microsoft SQL Server, la base de données maître enregistre toutes les informations au niveau du système.
La base de données maître enregistre également l’existence de toutes les autres bases de données,
l’emplacement de ces fichiers de base de données et les informations d’initialisation de SQL Server. Par
conséquent, SQL Server ne peut pas démarrer si la base de données maître n’est pas disponible.
Lorsque vous essayez de démarrer SQL Server dans ce scénario, le service SQL Server ne démarre pas et vous
recevez le message d’erreur suivant, en fonction de la façon dont vous essayez de démarrer le service :
À l’aide de l’applet services :

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) sur l’ordinateur local. Pour plus
d’informations, examinez le journal des événements système. S’il s’agit d’un service autre que
Microsoft, contactez le fournisseur du service et reportez-vous au code d’erreur spécifique au service
17113.

À l’aide d’une invite de commandes :

C : \>NET START MSSQLSERVER


Le SQL Server service (MSSQLSERVER) démarre.
Le service SQL Server (MSSQLSERVER) n’a pas pu être démarré.
Une erreur spécifique au service s’est produite : 17113.
Une aide plus utile est disponible en tapant NET HELPMSG 3547.

Résolution
1. Vérifiez SQL Server journal des erreurs et vérifiez que la cause est l’inaccessibilité de la base de données
maître. Par exemple, vous pouvez voir une entrée de journal qui ressemble à ce qui suit :

<Datetime> Server Error: 17113, Severity: 16, State: 1.


<Datetime> Server Error 2(The system cannot find the file specified.) occurred while opening
file
'C:\Program Files\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf' to obtain configuration information at startup.
An invalid startup option might have caused the error. Verify your startup
options, and correct or remove them if necessary.

2. Vérifiez l’emplacement du fichier master.mdf. Si le chemin d’accès est incorrect, corrigez-le à l’aide
Gestionnaire de configuration SQL Server’Éditeur du Registre.
a. À l’aide Gestionnaire de configuration SQL Ser ver :
Sélectionnez Démarrer, pointez sur Tous les programmes, pointez sur Microsoft SQL Ser ver,
pointez sur Outils de configuration, puis sélectionnez Gestionnaire de configuration SQL
Ser ver .

NOTE
Comme Gestionnaire de configuration SQL Server est un logiciel en snap-in pour le programme Microsoft
Management Console et non un programme autonome, Gestionnaire de configuration SQL Server
n’apparaît pas en tant qu’application dans les nouvelles versions de Windows. Pour ouvrir Gestionnaire de
configuration SQL Server dans Windows 10 ou 8, suivez les étapes de votre version de Windows.

Windows 10 :
a. Sélectionnez Page de démarrage, entrez SQLServerManager13.msc (pour SQL Server
2016 (13.x)). Pour les versions précédentes SQL Server, remplacez 13 par le nombre
approprié.
b. Sélectionnez SQLSer verManager13.msc pour ouvrir Configuration Manager. Pour
épingler le Gestionnaire de configuration à la page de démarrage ou à la barre des
tâches, cliquez avec le bouton droit sur SQLSer verManager13.msc, puis sélectionnez
Ouvrir l’emplacement du fichier.
c. Dans la Windows’Explorateur de fichiers, cliquez avec le bouton droit sur
SQLSer verManager13.msc, puis sélectionnez Épingler à l’démarrer ou épingler à la
barre des tâches.
Windows 8 :
Appuyez Windows touche de logo +Q pour ouvrir l’icône Rechercher. Sous Applications,
entrez SQLServerManager <version_number> .msc (par exemple,
SQLServerManager13.msc), puis appuyez sur Entrée.
a. Dans Gestionnaire de configuration SQL Server, sélectionnez SQL Ser ver Ser vices.
b. Dans le volet droit, cliquez avec le bouton droit sur SQL Ser ver ( <instance_name> ),
puis sélectionnez Propriétés.
c. Sous l’onglet Paramètres de démarrage, sélectionnez la ligne qui commence par -d dans
la section Paramètres existants. La valeur actuelle est modifiable. Spécifiez une zone de
paramètre de démarrage. Corrigez le chemin d’accès pour refléter la valeur correcte,
sélectionnez Mettre à jour, puis sélectionnez OK pour enregistrer les modifications.
d. Redémarrez le service SQL Server service.
Pour plus d’informations sur la configuration des options de démarrage, voir Configure
Server Startup Options (Gestionnaire de configuration SQL Server).
Pour plus d’informations sur les options de démarrage du service de moteur de base de
données, voir Moteur de base de données Options de démarrage du service.
b. À l’aide de l’Éditeur du Registre :
a. Accédez à la HKLM\Software\Microsoft\MicrosoftSQL Server\MSSQL{nn}.MyInstance ruche pour
votre instance SQL serveur.
b. Recherchez la valeur SQL Arg0 sous MSSQLServer\Parameters .
c. Modifiez la valeur pour refléter le chemin d’accès correct de la base de données maître.
d. Redémarrez le SQL Server service.
3. Si la base de données maître existe mais qu’elle est inutilisable, vous pouvez la renvoyer à un état
utilisable à l’aide de l’une des méthodes suivantes :
Vérifiez les autorisations du compte de service sur le dossier où se trouve le fichier.
Restituer la base de données maître à partir d’une sauvegarde de base de données complète si
vous pouvez démarrer l’instance du serveur.
Si les dommages du serveur sur la base de données principale vous empêchent de démarrer SQL
Server, ré reconstruire la base de données maître.
Cau t i on

La reconstruction de la base de données principale ré reconstruit toutes les bases de données


système. Par conséquent, toutes les modifications apportées par l’utilisateur à ces bases de
données seront perdues.
SQL Server ne peut pas démarrer si tous les
protocoles sont désactivés
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Si tous les protocoles réseau d’une instance Microsoft SQL Server sont désactivés, SQL Server ne démarre pas
et vous recevez le message d’erreur suivant, en fonction de la façon dont vous essayez de démarrer le service :
À l’aide de l’applet services :

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) sur l’ordinateur local. Pour plus
d’informations, examinez le journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le fournisseur du service et reportez-vous au
code d’erreur spécifique au service 13.

À l’aide d’une invite de commandes :

C:\Users\username>NET START MSSQLSERVER


Le SQL Server service (MSSQLSERVER) démarre.
Le service SQL Server (MSSQLSERVER) n’a pas pu être démarré.
Une erreur spécifique au service s’est produite : 13. Une aide plus utile est disponible en tapant NET
HELPMSG 3547.

Résolution
Voici comment résoudre ce problème :
1. Vérifiez le journal des événements système et vérifiez que vous voyez l’entrée d’événement suivante :

Event ID: 7024


The SQL Server (MSSQLSERVER) service terminated with the following service-specific error:
The data is invalid.

2. Consultez le SQL Server des erreurs et vérifiez que vous voyez des entrées de message d’erreur
semblables à ce qui suit :
<Datetime> spid9s Server name is '<ServerName>'. This is an informational message only. No user
action is required.
<Datetime> spid17s Error: 17182, Severity: 16, State: 1.
<Datetime> spid17s TDSSNIClient initialization failed with error 0xd, status code 0x4. Reason:
**All protocols are disabled. The data is invalid**.
<Datetime> spid17s Error: 17182, Severity: 16, State: 1.
<Datetime> spid17s TDSSNIClient initialization failed with error 0xd, status code 0x1. Reason:
Initialization failed with an infrastructure error. Check for previous errors. The data is invalid.
.
.
<Datetime> spid17s Error: 17826, Severity: 18, State: 3.
<Datetime> spid17s Could not start the network library because of an internal error in the
network library. To determine the cause, review the errors immediately preceding this one in the
error log.
<Datetime> spid17s Error: 17120, Severity: 16, State: 1.
<Datetime> spid17s SQL Server could not spawn FRunCommunicationsManager thread. Check the SQL
Server error log and the operating system error log for information about possible related problems.

3. Après avoir vérifié le problème mentionné dans la section Symptômes, utilisez le nœud configuration
réseau SQL Server de Gestionnaire de configuration SQL Server pour activer les protocoles réseau
requis. Ensuite, redémarrez le service SQL Server service.

NOTE
Si vous ne souhaitez pas activer les connexions distantes à votre instance SQL Server, vous pouvez activer
uniquement le protocole Mémoire partagée, puis redémarrer le service SQL Server.
Vous pouvez également valider les paramètres de la bibliothèque réseau à l’aide des clés de Registre
suivantes
Si la Enabled valeur est définie sur zéro, la bibliothèque réseau correspondante est désactivée.
Mémoire partagée :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Sm\Enabled
TCP/IP :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp\Enabled
Canaux nommés :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Np\Enabled
Le service SQL Server et le service d’agent SQL
Server ne parviennent pas à démarrer sur un
serveur autonome
15/08/2021 • 2 minutes to read

Cet article vous aide à résoudre les problèmes où le service SQL Server et le service d’agent SQL Server
peuvent ne pas démarrer sur un serveur autonome.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 307288

Symptômes
Problème 1 : sur un serveur autonome, le démarrage du service MSSQLSERVER peut échouer et vous
recevez le message d’erreur suivant :

Une erreur 1068 (le service ou le groupe de dépendances n’a pas réussi à démarrer)) s’est produite
lors de l’opération de service sur le service MSSQLServer.

Problème 2 : de même, le service SQLServerAgent peut également ne pas démarrer et vous recevez le
message d’erreur suivant :

Une erreur 1068 (le service ou le groupe de dépendances n’a pas réussi à démarrer)) s’est produite
lors de l’opération de service sur le service SQLServerAgent.

Les problèmes 1 et 2 se produisent lorsque les deux conditions suivantes sont vraies :
L’ordinateur serveur se trouve dans un groupe de travail et ne fait pas partie d’un domaine.
Les services MSSQLSERVER et SQLServerAgent sont tous deux définies pour utiliser un compte de
domaine pour le démarrage.
Problème 3 : sur un serveur membre du domaine, le service MSSQLSERVER peut ne pas démarrer au
démarrage du serveur et vous recevez le message d’erreur suivant :

Le service MSSQLSERVER n’a pas pu se connecter en tant que domaine\mssqlsvc avec le mot de
passe actuellement configuré en raison de l’erreur suivante : Source : NetLogon Description : Il n’existe
actuellement aucun serveur de connexion disponible pour le service de demande de connexion. Le
service MSSQLSERVER s’est terminé de manière inattendue.

Ce problème se produit lorsque toutes les conditions suivantes sont vraies :


Le serveur fait partie d’un domaine.
Les services MSSQLSERVER et SQLServerAgent sont tous deux définies pour utiliser un compte de domaine
pour le démarrage.
Le mode de démarrage pour MSSQLSERVER et SQLServerAgent est automatique.

Cause
Le problème 1 et le problème 2 se produisent parce que le serveur est un ordinateur autonome, que le service
NetLogon ne démarre pas sur le serveur, de ce fait, aucune authentification d’authentification à l’échelle du
domaine n’est possible.
Le problème 3 se produit car SQL Server services tentent de démarrer avant le démarrage du service NetLogon.

Résolution
Pour résoudre les problèmes 1 et 2, suivez les étapes suivantes :
Modifiez le compte de démarrage de MSSQLSERVER et de SQLServerAgent pour utiliser le compte
système local.
Redémarrez le serveur.
Pour résoudre le problème 3, utilisez les solutions de contournement suivantes :
Configurez le démarrage SQL Server sur un démarrage différé pour des serveurs Windows particuliers,
d’autres services Windows tels que NetLogon s’achèvent en premier et SQL Server démarre sans
problème.
Configurez le démarrage SQL Server pour qu’il réessaye, le démarrage peut être terminé lors de la
deuxième tentative de démarrage.
Modifiez la valeur de détection d’adresses en double (-Transmits) sur 1 pour toutes les interfaces réseau
sur le serveur. Pour plus d’informations, voir la commande Set-NetIPInterface.
Modifiez les options de récupération pour SQL Server et SQL Server services d’agent. Spécifiez
redémarrer le ser vice en tant qu’action pour les options de défaillance. Vous pouvez effectuer cette
option à partir de l’applet services des outils d’administration à l’aide des interfaces familières du
Gestionnaire de contrôle de service.
Si l’option de démarrage différé ne peut pas résoudre ce problème 3, vous pouvez ajouter les dépendances
suivantes au service SQL Server service :
Service d’aide Ip
Service serveur
Service de liste réseau
Vous pouvez ajouter les dépendances à l’aide de la commande suivante :

sc.exe qc MSSQLSERVER ::view dependencies sc.exe config MSSQLSERVER depend=iphlpsvc/LanmanServer/netprofm


::add service dependencies

Plus d’informations
Sur un ordinateur autonome, le service NetLogon doit être définie pour le démarrage manuel.
Échec de l’SQL Server de l’SQL Server ne démarre
pas
13/08/2021 • 7 minutes to read

Ce problème se produit en raison d’un problème avec le compte de service lui-même ou les informations
actuellement enregistrées pour le compte de service.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 282254

Symptômes
Lorsque vous essayez de redémarrer Microsoft SQL Server ou l’agent SQL Server, le service ne démarre pas et
vous recevez le message d’erreur suivant, en fonction de la façon dont vous essayez de démarrer le service :
À l’aide de l’applet services :

Windows n’a pas pu démarrer SQL Server service (MSSQLSERVER) sur l’ordinateur local.
Erreur 1069 : le service n’a pas commencé en raison d’un échec d’accès.

À l’aide d’une invite de commandes :

L’erreur système 1069 s’est produite.


Le service n’a pas commencé en raison d’une défaillance de l’accès.

Conditions préalables
Pour utiliser cet dépannage, ouvrez le journal des événements système et notez l’ID d’événement et la
description de l’événement associé à l’échec. Ensuite, utilisez les informations suivantes pour résoudre le
problème.

ID d’événement : 7041, échec de l’accès : l’utilisateur n’a pas reçu le


type d’accès demandé sur cet ordinateur
L’entrée de message complète dans le journal des événements doit ressembler à ce qui suit :
Log Name: System
Source: Service Control Manager
Date: <Datetime>
Event ID: 7041
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The MSSQLSERVER service was unable to log on as NT Service\MSSQLSERVER with the currently configured
password due to the following error:
Logon failure: the user has not been granted the requested logon type at this computer.

Service: MSSQLSERVER
Domain and account: <Account name>

This service account does not have the required user right "Log on as a service."

User Action

Assign "Log on as a service" to the service account on this computer. You can use Local Security Settings
(Secpol.msc) to do this.
If this computer is a node in a cluster, check that this user right is assigned to the Cluster service
account on all nodes in the cluster.

If you have already assigned this user right to the service account, and the user right appears to be
removed,
check with your domain administrator to find out if a Group Policy object associated with this node might
be removing the right.

Action de l’utilisateur
Vérifiez les autorisations attribuées au compte de service à l’aide de l’Paramètres de sécurité <Account Name>
locale (Secpol.msc).
1. Vérifiez ces droits selon les autorisations du serveur. Pour plus d’informations, voir Windows droits et
privilèges. Attribuez manuellement les autorisations manquantes.
2. Examinez le compte de service pour savoir s’il a reçu des autorisations Deny*. Supprimez les
autorisations Deny* du compte SQL service service, puis testez à nouveau. Par exemple, si le compte de
service a été affecté à l’insaisissable « Deny Service Logon » avec , révoquez le droit
SeDenyServiceLogonRight d’SQL Server. SeServiceLogonRight SeDenyServiceLogonRight

ID d’événement : 7038, cet utilisateur ne peut pas se connecter car ce


compte est actuellement désactivé
L’entrée de message complète dans le journal des événements doit ressembler à ce qui suit :
Log Name: System
Source: Service Control Manager
Date: <Datetime>
Event ID: 7038
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The MSSQLSERVER service was unable to log on as .\sqlsrvlogin with the currently configured password due to
the following error:
This user can't sign in because this account is currently disabled.

To ensure that the service is configured properly, use the Services snap-in in Microsoft Management Console
(MMC).

Action de l'utilisateur
1. Si SQL Server compte de démarrage est un compte d’utilisateur local sur l’ordinateur, ouvrez Gestion de
l’ordinateur (compmgmt.msc) et vérifiez que le compte de service est désactivé dans Groupes
d’utilisateurs & locaux. S’il est désactivé, activez le compte et redémarrez le service SQL Server service.
2. Si SQL Server de démarrage est un compte Windows domaine, vérifiez si le compte est désactivé dans
Utilisateurs et ordinateurs Active Directory. S’il est désactivé, activez le compte et redémarrez le service
SQL Server service.

ID d’événement : 7038, le mot de passe de l’utilisateur doit être


modifié avant la signature
L’entrée de message complète dans le journal des événements doit ressembler à ce qui suit :

Log Name: System


Source: Service Control Manager
Date: <Datetime>
Event ID: 7038
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The MSSQLSERVER service was unable to log on as .\sqlsrvlogin with the currently configured password due to
the following error:
The user's password must be changed before signing in.

To ensure that the service is configured properly, use the Services snap-in in Microsoft Management Console
(MMC).

Action de l'utilisateur
1. Si le compte de démarrage SQL Server est un compte d’utilisateur local sur l’ordinateur, ouvrez Gestion
de l’ordinateur (compmgmt.msc) et clear the User Must change the password at next logon
property for SQL Server Startup Account under Local Users & Groups . Ensuite, sélectionnez OK, puis
redémarrez le service SQL Server service.
2. Si le compte de démarrage SQL Server est un compte de domaine Windows, ouvrez Utilisateurs et
ordinateurs Active Directory, puis vérifiez que l’utilisateur doit modifier le mot de passe sur le compte de
démarrage SQL Server à la prochaine propriété d’ouverture de site activée.
3. Si la propriété de l’étape 2 est activée, vous devez effacer cette option ou vous connecter de manière
interactive à un client Windows, puis définir un nouveau mot de passe, puis mettre à jour le nouveau mot
de passe pour le service SQL Server à l’aide de l’outil Gestionnaire de configuration SQL Server.

ID d’événement : 7038, le nom d’utilisateur ou le mot de passe est


incorrect
L’entrée de message complète dans le journal des événements doit ressembler à ce qui suit :

Log Name: System


Source: Service Control Manager
Date: <Datetime>
Event ID: 7038
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The MSSQLSERVER service was unable to log on as .\sqlsrvlogin with the currently configured password due to
the following error:
The user name or password is incorrect.

To ensure that the service is configured properly, use the Services snap-in in Microsoft Management Console
(MMC).

Action de l'utilisateur
1. L’entrée du message d’erreur indique que le nom de connexion actuel ou le jeu de mots de passe est
incorrect. Pour vérifier la même chose, vous pouvez utiliser l’option Run-As Windows pour ouvrir une
fenêtre Windows invite de commandes, puis fournir les mêmes informations d’identification. Si cela
fonctionne sans problème, tapez soigneusement les informations d’identification dans Gestionnaire de
configuration SQL Server.
2. Si l’étape 1 échoue et signale le même problème, vous devez réinitialiser le mot de passe de la
Windows’utilisateur. Si le compte SQL Server démarrage est un compte d’utilisateur local sur l’ordinateur,
ouvrez Gestion de l’ordinateur (compmgmt.msc) et réinitialisez le mot de passe de l’utilisateur local. Si le
compte SQL Server de démarrage est un compte Windows domaine, ouvrez Utilisateurs et ordinateurs
Active Directory, puis modifiez les informations d’identification. Une fois les informations d’identification
mises à jour, revenir à Gestionnaire de configuration SQL Server, entrez les mêmes informations
d’identification, puis démarrez le service.
Tapez le mot de passe correct dans le compte SQL Server service sur l’ordinateur SQL Server hôte. Pour ce faire,
suivez les procédures de SCM Services - Modifierle mot de passe des comptes utilisés.

ID d’événement : 7038, le compte référencé est actuellement


verrouillé et peut ne pas être connecté
L’entrée de message complète dans le journal des événements doit ressembler à ce qui suit :
Log Name: System
Source: Service Control Manager
Date: <Datetime>
Event ID: 7038
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The MSSQLSERVER service was unable to log on as .\sqlsrvlogin with the currently configured password due to
the following error:
The referenced account is currently locked out and may not be logged on to.

To ensure that the service is configured properly, use the Services snap-in in Microsoft Management Console
(MMC).

Action de l'utilisateur
1. Si SQL Server compte de démarrage est un compte d’utilisateur local sur l’ordinateur, ouvrez Gestion de
l’ordinateur (compmgmt.msc) et clear the Account is Locked Out checkbox for the SQL Server Startup
Account under Local Users & Groups . Ensuite, sélectionnez OK, puis redémarrez le service SQL Server
service.
2. Si SQL Server compte de démarrage est un compte de domaine Windows, ouvrez Utilisateurs et
ordinateurs Active Directory et vérifiez que la propriété Compte de démarrage SQL Server est verrouillée.
3. Si la propriété de l’étape 2 est activée, vous devez effacer cette option, définir un mot de passe fort et
utiliser les mêmes informations d’identification pour la configuration du compte de démarrage SQL
Server à l’aide de Gestionnaire de configuration SQL Server.
L’ID d’événement 17058 et SQL Server ne démarre
pas
15/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Si le service Microsoft SQL Server ne trouve pas le chemin d’accès configuré pour créer des journaux d’erreurs,
le service ne démarre pas et vous recevez le message d’erreur suivant, en fonction de la façon dont vous essayez
de démarrer le service :
À l’aide de l’applet services :

Windows n’a pas pu démarrer SQL Server service (MSSQLSERVER) sur l’ordinateur local.
Erreur 1067 : Le processus s’est terminé de manière inattendue.

À l’aide d’une invite de commandes :

Le SQL Server service (MSSQLSERVER) démarre.


Le service SQL Server (MSSQLSERVER) n’a pas pu être démarré.
Une erreur spécifique au service s’est produite : 13.
Une aide plus utile est disponible en tapant NET HELPMSG 3523.

Résolution
1. Consultez le journal des applications et vérifiez que vous voyez une entrée de message d’erreur
ressemblant à ce qui suit :

Log Name: Application


Source: MSSQLSERVER
Date: <Datetime>
Event ID: 17058
Task Category: Server
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
initerrlog: Could not open error log file 'C:\Program Files\Microsoft SQL
Server\MSSQL15.MSSQLSERVR\MSSQL\Log\ERRORLOG'.
Operating system error = 3(The system cannot find the path specified.).

2. Vérifiez le chemin d’accès qui est définie pour le fichier ErrorLog à l’aide de Gestionnaire de configuration
SQL Server.
Vous pouvez également vérifier le chemin d’accès dans l’entrée de Registre suivante :

SO US- C L É DO N N ÉES

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL -eC:\Program Files\Microsoft SQL Server\MSSQL15.


Server\MSSQL15.MSSQLSERVER\MSSQLServer\Parameters\SQLArg1
MSSQLSERVR\MSSQL\Log\ERRORLOG

3. Essayez de copier le chemin d’accès, puis vérifiez manuellement dans Windows Explorer ou à l’invite de
commandes que vous pouvez accéder à la cible dans le chemin d’accès. (N’ignorez pas les fautes de
frappe, les caractères spéciaux et les problèmes de copier-coller.)
Voici un exemple de commande incorrect qui inclut une faute de frappe :

C:\>dir "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVR\MSSQL\Log"

Le système ne peut pas trouver le chemin d’accès spécifié.

Voici une commande correcte :

C:\>dir "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log"

Le volume du lecteur C est Windows


Numéro de série de volume 40B5-7ED1
Répertoire de C:\Program Files\Microsoft SQL Server\MSSQL15. MSSQLSERVER\MSSQL\Log
<Datetime> <DIR> .
<Datetime> <DIR> ..
<Datetime> 20 640 ERRORLOG
<Datetime> 14 082 ERRORLOG.1

4. Mettez à jour le chemin d’accès à un dossier valide dans lequel le compte de démarrage SQL Server des
autorisations pour créer, lire, écrire et mettre à jour des fichiers.
5. Redémarrez le service SQL Server service.
L’ID d’événement 1814 et SQL Server ne démarre
pas
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Si le service Microsoft SQL Server ne peut pas créer le fichier Tempdb au démarrage, le service ne démarre pas
lorsque vous utilisez le Gestionnaire de contrôle de service et vous recevez le message d’erreur suivant :

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) sur l’ordinateur local. Pour plus d’informations,
examinez le journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le fournisseur du service et reportez-vous au code
d’erreur spécifique au service 1814.

Cause
Ce problème peut se produire pour les raisons suivantes :
Le disque dur qui hébergeait Tempdb a été supprimé ou la lettre de lecteur a été modifiée pour une raison
quelconque.
Il existe des contraintes d’espace au niveau de la couche du système d’exploitation.

Résolution
1. Ouvrez le journal des applications et vérifiez que vous voyez des entrées de message d’erreur semblables
à ce qui suit :
Log Name: Application
Source: MSSQLSERVER
Date: <Datetime>
Event ID: 5123
Task Category: Server
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
CREATE FILE encountered operating system error 3(The system cannot find the path specified.)
while attempting to open or create the physical file <FilePath>.

Log Name: Application


Source: MSSQLSERVER
Date: <Datetime>
Event ID: 17204
Task Category: Server
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
FCB::Open failed: Could not open file <FilePath> for file number 1. OS error: 3(The system cannot
find the path specified.).

Log Name: Application


Source: MSSQLSERVER
Date: <Datetime>
Event ID: 1814
Task Category: Server
Level: Information
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
Could not create tempdb. You may not have enough disk space available.
Free additional disk space by deleting other files on the tempdb drive and then restart SQL Server.
Check for additional errors in the operating system error log that may indicate why the tempdb files
could not be initialized.

2. Pour résoudre le problème, déplacez le fichier Tempdb vers un autre emplacement à l’aide de la
procédure mentionnée dans la section Procédure de récupération d’échec de Move System Databases.
L’ID d’événement 33565 et SQL Server ne démarre
pas après l’activer
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Dans Microsoft SQL Server Configuration Manager, vous devez fournir un certificat côté serveur et activer le
chiffrement. Lorsque vous utilisez le Gestionnaire de contrôle de service pour démarrer le service SQL Server, le
service ne démarre pas et vous recevez le message d’erreur suivant :

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) sur l’ordinateur local. Pour plus d’informations,
examinez le journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le fournisseur du service et reportez-vous au code
d’erreur propre au service 2146885628.

Résolution
1. Consultez le journal des événements d’application et vérifiez que vous voyez deux entrées d’événement
semblables à ce qui suit :

Log Name: Application


Source: MSSQLSERVER
Date: <Datetime>
Event ID: 26010
Task Category: Server
Level: Information
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The server could not load the certificate it needs to initiate an SSL connection.
It returned the following error: 0x8009030d. Check certificates to make sure they are valid.

Log Name: Application


Source: MSSQLSERVER
Date: <Datetime>
Event ID: 33565
Task Category: Server
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
Found the certificate [Cert Hash(sha1) "<Cert Hash number>"] in the local computer store but the SQL
Server service account does not have access to it.

2. Si vous voyez les événements 26010 et 33565, suivez les étapes suivantes :
NOTE
Les deux événements indiquent que le compte de service SQL Server n’a pas d’autorisations sur le certificat qui
est provisioné dans Configuration Manager. Vous devez attribuer les autorisations requises au compte de
service pour résoudre ce problème.
Si vous ne voyez pas les événements 26010 et 33565, vous rencontrez peut-être un autre problème qui n’est
pas résolu dans cet article.

a. Sélectionnez > Démarrer l’exécuter, entrez mmc, puis ouvrez le logiciel en snap-in certificat
dans la console MMC.
b. Dans le menu Console, sélectionnez Ajouter/Supprimer un logiciel en un clin d’œil.
c. Sélectionnez > Ajouter des cer tificats, puis sélectionnez Ajouter à nouveau.

NOTE
Vous êtes invité à ouvrir le logiciel en snap-in pour l’utilisateur, le service ou le compte d’ordinateur actuel.

d. Sélectionnez le compte d’ordinateur.


e. Sélectionnez l’ordinateur local, puis sélectionnez Terminer.
f. Dans la boîte de dialogue Ajouter un logiciel en un clin d’œil autonome, sélectionnez Fermer.
g. Dans la boîte de dialogue Ajouter/Supprimer un logiciel en snap-in, sélectionnez OK.

NOTE
Vos certificats installés sont dans le dossier Certificats dans le conteneur Personnel.

h. Cliquez avec le bouton droit sur le certificat, sélectionnez Toutes les tâches gérer les clés privées,
puis accordez des > autorisations complètes au compte SQL Server service.

Référence
Activer les connexions chiffrées au Moteur de base de données
L’ID d’événement 33566 et SQL Server ne démarre
pas après l’activer
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Dans Microsoft SQL Server Configuration Manager, vous devez fournir un certificat côté serveur et activer le
chiffrement. Toutefois, le service SQL Server ne démarre pas et vous recevez le message d’erreur suivant :

Windows n’a pas pu démarrer SQL Server (MSSQLSERVER) sur l’ordinateur local. Pour plus d’informations,
examinez le journal des événements système.
S’il s’agit d’un service autre que Microsoft, contactez le fournisseur du service et reportez-vous au code
d’erreur spécifique au service 13.

Résolution
1. Consultez le journal des applications et vérifiez que vous voyez deux entrées d’événement semblables à
ce qui suit :

Log Name: Application


Source: MSSQLSERVER
Date: <Datetime>
Event ID: 33556
Task Category: Server
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
Invalid character in the thumbprint [Cert Hash(sha1) " \<Cert Hash number"].
Please provide a certificate with a valid thumbprint.

NOTE
Cette erreur indique généralement que le certificat n’est pas provisionn par le biais de Configuration Manager. Elle
est mise en service en copiant manuellement la valeur d’empreinte numérique dans la clé de Registre suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Certificate

Cette erreur se produit si des caractères non valides sont copiés dans la valeur de Registre.

2. Pour résoudre ce problème, utilisez l’une des méthodes suivantes.


Méthode 1 : fournir le cer tificat à l’aide de Gestionnaire de configuration SQL Ser ver
a. Supprimez manuellement la valeur d’impression miniature de la sous-clé de Registre suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Certificate

b. Utilisez Configuration Manager pour mettre à nouveau en service le certificat.


c. Redémarrez le service SQL Server service.
Méthode 2 : Corriger les caractères non valides dans la valeur Thumbprint
a. Sélectionnez > Démarrer l’exécuter, entrez mmc, puis ouvrez le logiciel en snap-in certificat
dans la console MMC.
b. Cliquez avec le bouton droit sur le certificat, puis copiez la valeur Thumbprint dans un fichier
texte. Assurez-vous qu’aucun espace n’existe avant et après la valeur de l’empreinte numérique.
c. Supprimez manuellement la valeur Thumbprint de la sous-clé de Registre suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL15.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Certificate

d. Collez manuellement la nouvelle valeur ou retapez la valeur que vous avez provenant du fichier
texte.
e. Redémarrez le service SQL Server service.
L’ID d’événement 7000 et SQL Server ne démarre
pas
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Lorsque le fichier binaire Microsoft SQL Server (Sqlservr.exe) est renommé sur le système qui héberge le service
SQL Server, le service ne démarre pas et vous recevez le message d’erreur suivant, en fonction de la façon dont
vous essayez de démarrer le service :
À l’aide de l’applet services :

Windows n’a pas pu démarrer SQL Server service (MSSQLSERVER) sur l’ordinateur local.
Erreur 2 : le système ne peut pas trouver le fichier spécifié.

À l’aide d’une invite de commandes :

L’erreur système 2 s’est produite.


Le fichier spécifié est introuvable.

Résolution
1. Vérifiez le Windows système et vérifiez que vous voyez une entrée de message d’erreur semblable à ce
qui suit :

Log Name: System


Source: Service Control Manager
Date: <Datetime>
Event ID: 7000
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <Server name>
Description:
The SQL Server (MSSQLSERVER) service failed to start due to the following error:
The system cannot find the file specified.

2. Go to the SQL Server installation folder and verify that it doesn’t contain the Sqlservr.exe file.
3. Résolvez le problème en réparant l’installation SQL Server’installation selon la procédure documentée
dans La réparation d’une installation SQL Server échec.
Les erreurs du système d’exploitation 1450 et 665
sont signalées pour les fichiers de base de données
lors de la création de DBCC CHECKDB ou de
capture instantanée de base de données
13/08/2021 • 4 minutes to read

Cet article vous aide à résoudre le problème où les erreurs de système d’exploitation 1450 et 665 sont signalées
pour les fichiers de base de données pendant ou la création d’une capture instantanée de DBCC CHECKDB base de
données.
Version du produit d’origine : SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL
Server 2008
Numéro de la ko d’origine : 2002606

Symptômes
Sur un SQL Server, supposons que vous effectuez l’une des actions suivantes :
Vous créez une capture instantanée de base de données sur une base de données de grande taille. Après cela,
vous effectuez de nombreuses opérations de modification de données ou de maintenance dans la base de
données source.
Vous créez une capture instantanée de base de données sur une base de données miroir.
Vous exécutez une famille de commandes pour vérifier la cohérence d’une base de données de grande taille
et vous effectuez également un grand nombre de modifications de données DBCC CHECKDB dans cette base de
données.
Dans ce scénario, vous remarquez les erreurs suivantes signalées dans le journal des erreurs SQL Server en
fonction de l’environnement SQL Server’exécution.
Windows Ser ver 2003

Le système d’exploitation a renvoyé l’erreur 1450 (des ressources système insuffisantes existent pour
terminer le service demandé.) à SQL Server lors d’une écriture au décalage 0x00002a3ef96000 dans un
fichier avec gestion 0x0000000000000D5C. Il s’agit généralement d’une condition temporaire et le SQL
Server va continuer à réessayer l’opération. Si la condition persiste, une action immédiate doit être prise
pour la corriger.

Windows Ser ver 2008, Windows Vista et les versions ultérieures des systèmes d’exploitation
ser veur et client

Le système d’exploitation a renvoyé l’erreur 665 (L’opération demandée n’a pas pu être terminée en raison
d’une limitation du système de fichiers) à SQL Server pendant une écriture au 0x00002a3ef96000 de
décalage dans le fichier « Sam.mdf:MSSQL_DBCC18 ».

En plus de ces erreurs, vous pouvez également remarquer des erreurs de délai d’accès, comme illustré ci-
dessous :

Le délai d’attente s’est produit pendant l’attente du verrou : classe « DBCC_MULTIOBJECT_SCANNER »,


id 000000002C61DF40, type 4, 0x00000000038089B8 de tâche : 16, temps d’attente 600, indicateurs
0x1a, propriétaire de 0x0000000006A09828. Continue d’attendre.

Le délai d’attente s’est produit pendant l’attente du verrou : classe «


ACCESS_METHODS_HOBT_COUNT» , id 000000002C61DF40, type 4, 0x00000000038089B8 de
tâche : 16, temps d’attente 600, indicateurs 0x1a, propriétaire de 0x0000000006A09828. Continue
d’attendre.

En outre, vous pouvez également remarquer le blocage lorsque vous affichez différents affichages de gestion
dynamique (DMV) comme sys.dm_exec_requests , sys.dm_os_waiting_tasks etc.

Cause
Ce problème se produit si un grand nombre d’instances sont nécessaires pour gérer un fichier
ATTRIBUTE_LIST_ENTRY fortement fragmenté dans NFTS. Ce comportement est expliqué dans l’article de la Ko
suivant :
Un fichier fortement fragmenté dans un volume NTFS peut ne pas dépasser une certaine taille
Les fichiers fragmentés créés par SQL Server pour les captures instantanées de base de données peuvent être
fragmentés à ces niveaux lorsque de grandes quantités de modifications de données se produisent pendant la
durée de vie de ces fichiers instantanés.
Pour obtenir un arrière-plan complet de la façon dont SQL Server Engine utilise des fichiers peu nombreux
NTFS et d’autres flux de données, reportez-vous aux liens suivants :
How It Works: SQL Server 2005 Database Snapshots (Replica)
SQL Server signale l’erreur de système d’exploitation 1450, 1452 ou 665 (nouvelles tentatives)
Fonctionnement : nouveau SQL Server de fichiers dispersés (bases de données DBCC et capture
instantanée)
Fonctionnement des captures instantanées de base de données
DBCC CHECKDB (Transact-SQL) [Voir la section « Capture instantanée de base de données interne » ]
Nouvel événement étendu pour suivre les écritures dans le fichier de capture instantanée dispersée

Résolution
1. Décomposez la base de données de grande taille en fichiers plus petits. Par exemple, si vous avez un
fichier de données de 8 To, vous pouvez le décomposer en huit fichiers de données de 1 To. Voici les
étapes à suivre pour effectuer cette tâche :
a. Ajoutez les 7 nouveaux fichiers de 1 To au même groupe de fichiers.
b. Reconstruire les index en cluster des tables existantes, ce qui répartira automatiquement les données
de chaque table entre les 8 fichiers. Si une table ne comprend pas d’index en cluster, créez-en un, puis
déposez-le pour accomplir la même opération.
c. Réduire le fichier d’origine de 8 To, maintenant qu’il est plein d’environ 12 à 15 %.
2. Envisagez de placer les fichiers de base de données sur un volume ReFS qui n’a pas les mêmes limites
ATTRIBUTE_LIST_ENTRY que NTFS présente. Vous devez reformater le volume NTFS actuel à l’aide de
ReFS.
3. Envisagez de défragmenter le volume dans lequel résident les fichiers de base de données. Pour plus
d’informations, voir Erreur du système d’exploitation (665 - Limitationdu système de fichiers) Et pas
seulement pour DBCC.
4. Formatez le volume à l’aide de l’option /L pour obtenir un frS de grande taille.

NOTE
Pour les systèmes exécutant Windows Server 2008 R2 et Vista, vous devez d’abord appliquer le correctif à partir
de l’article de la base de données 967351 avant d’utiliser l’option /L avec la commande de format.

5. CORRECTIF : Erreur du système d’exploitation 665 lorsque vous exécutez la commande DBCC CHECKDB
pour la base de données qui contient l’index columnstore dans SQL Server 2014
6. Réduisez la durée de vie des commandes DBCC CHECK à l’aide des améliorations des performances et
évitez par conséquent les erreurs 665 : les améliorations apportées à la commande DBCC CHECKDB
peuvent accélérer les performances lorsque vous utilisez l’option PHYSICAL_ONLY
Dans certaines conditions, il se peut que vous rencontriez toujours les erreurs mentionnées ci-dessus même
après avoir appliqué ces correctifs. Dans ce scénario, vous pouvez évaluer certaines des solutions de
contournement abordées dans le billet de blog suivant :
Erreurs de fichier fragmentées : 1450 ou 665 en raison de la fragmentation des fichiers : correctifs et solutions
de contournement
Pour plus d’informations, voir comportement DBCC CHECKDBlorsque la base de données SQL Server est située
sur un volume ReFS.
L’erreur 17053 peut être enregistrée dans le journal
des erreurs après avoir exécuté une commande
DBCC dans SQL Server
13/08/2021 • 8 minutes to read

Cet article explique comment interpréter « Erreur : 17053 » et d’autres messages d’erreur qui peuvent être
signalés lorsque vous exécutez une commande DBCC dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 926070

Symptômes
Vous exécutez l’une des commandes DBCC suivantes dans Microsoft SQL Server :
DBCC CHECKDB
DBCC CHECKALLOC
DBCC CHECKTABLE
DBCC CHECKCATALOG
DBCC CHECKFILEGROUP

Après cela, les messages d’erreur semblables à ce qui suit peuvent être enregistrés dans SQL Server journal des
erreurs :

2006-09-01 17:33:24.48 spid54 35 transactions rolled forward in database 'ProductionData' (11). This is an
informational message only. No user action is required.
2006-09-01 17:35:39.16 spid54 4 transactions rolled back in database 'ProductionData' (11). This is an
informational message only. No user action is required.
2006-09-01 17:36:31.76 spid53 Error: 17053, Severity: 16, State: 1.
2006-09-01 17:36:31.76 spid53 E:\SQLData\ProductionData.mdf:MSSQL_DBCC11: Operating system error 112(There
is not enough space on the disk.) encountered.
2006-09-01 17:36:31.76 spid53 Error: 17053, Severity: 16, State: 1.
2006-09-01 17:36:31.76 spid53 E:\ SQLData \ProductionData.mdf:MSSQL_DBCC11: Operating system error 112(There
is not enough space on the disk.) encountered.
2006-09-01 17:36:31.77 spid53 Error: 17053, Severity: 16, State: 1.
2006-09-01 17:36:31.77 spid53 E:\ SQLData \ProductionData.mdf:MSSQL_DBCC11: Operating system error 112(There
is not enough space on the disk.) encountered.
2006-09-01 17:36:31.80 spid54 DBCC CHECKDB (ProductionData) executed by DomainName \ UserName found 0 errors
and repaired 0 errors. Elapsed time: 0 hours 3 minutes 19 seconds.
2006-09-01 17:36:31.90 spid53 Error: 17053, Severity: 16, State: 1.
2006-09-01 17:36:31.90 spid53 E:\ SQLData \ProductionData.mdf:MSSQL_DBCC11: Operating system error 112(There
is not enough space on the disk.) encountered.
2006-09-01 17:36:31.90 spid53 Error: 17053, Severity: 16, State: 1.
2006-09-01 17:36:31.90 spid53 E:\ SQLData \ProductionData.mdf:MSSQL_DBCC11: Operating system error 112(There
is not enough space on the disk.) encountered.
2006-09-01 17:36:32.30 spid54 Error: 926, Severity: 21, State: 6.
2006-09-01 17:36:32.30 spid54 Database 'ProductionData' cannot be opened. It has been marked SUSPECT by
recovery. See the SQL Server errorlog for more information.

Cause
Dans SQL Server, les commandes DBCC utilisent des captures instantanées de base de données en lecture seule
internes. Ces captures instantanées de base de données sont créées sur le même lecteur que les fichiers de
données de base de données correspondants. Les captures instantanées de base de données grossissent en
proportion de la quantité de données modifiées dans la base de données sur laquelle s’exécutent les
commandes DBCC. Si l’activité transactionnelle se poursuit sur cette base de données, les captures instantanées
de base de données créées par les commandes DBCC peuvent être à l’origine de problèmes d’espace disque.
Étant donné que les fichiers instantanés de base de données et les fichiers de données réels résident sur le
même lecteur de disque, les deux ensembles de fichiers sont en concurrence pour l’espace disque. Dans ce cas,
les transactions d’application ou les transactions utilisateur sont privilégiées. La capture instantanée de base de
données interne utilisée par le DBCC est marquée comme suspecte. Par conséquent, les commandes DBCC sont
à l’expérience d’erreurs et ne peuvent pas se terminer.
L’espace disque est l’une des raisons pour laquelle les écritures dans la capture instantanée de base de données
interne peuvent échouer. D’autres raisons telles que les codes d’erreur du système d’exploitation 1450 et 665
peuvent également contribuer à des problèmes similaires et rendre la capture instantanée de base de données
interne dans un état suspect.

Statut
Ce comportement est inhérent au produit.

Plus d’informations
Les informations importantes suivantes s’appliquent aux messages d’erreur mentionnés dans la section
Symptômes :
Ces messages d’erreur sont issus de différents identificateurs de processus de serveur actif (SPID). SPID
54 est l’ID de session qui exécute la commande DBCC. SPID 53 est l’ID de session qui exécute une
transaction utilisateur.
Ces messages d’erreur indiquent la fin des transactions et l’opération de revenir en arrière. Ces messages
sont générés lors de la phase initiale de l’exécution de la commande DBCC. Lorsque vous exécutez une
commande DBCC, la commande DBCC tente d’abord de créer une capture instantanée interne. Lorsque la
capture instantanée est créée, la récupération de base de données est effectuée par rapport à cette
capture instantanée pour mettre l’instantané dans un état cohérent. Les messages d’erreur reflètent cette
activité.
Le message d’erreur 926 indique que la base de données est marquée comme suspecte. Ce message
d’erreur fait référence à la capture instantanée interne et non à la base de données réelle. L’état de la base
de données est « en ligne » et la base de données est fonctionnelle.
Le message d’erreur 17053 contient le nom des flux de flux de remplacement du système de fichiers
NTFS utilisés pour la capture instantanée interne. Ce message d’erreur indique la raison réelle du
problème.
La capture instantanée de base de données interne utilise le même nom que la base de données réelle.
Par conséquent, ces messages d’erreur contiennent le nom de la base de données.
Même si le message du journal des erreurs indique que DBCC CHECKDB est terminé, il doit être considéré
comme un arrêt anormal. Vous devez réexécuter la commande DBCC CHECKDB pour permettre son
exécuter jusqu’à ce qu’elle soit terminée pour accéder à la cohérence de la base de données. Dans ces
situations, reportez-vous à la sortie de la commande DBCC CHECKDB renvoyée au client pour
comprendre quels objets ont été vérifiés et signalés comme nettoyés.
Pour plus d’informations sur ce problème, consultez les rubriques suivantes dans SQL Server Books Online :
Utilisation des captures instantanées de base de données internes DBCC
Comprendre les tailles de fichiers peu nombreuses dans les captures instantanées de base de données.
Suivez les étapes documentées dans ces rubriques pour éviter les problèmes d’utilisation de l’espace.
Après avoir corrigez un problème, réexécutez les commandes DBCC.
Outre les messages d’erreur mentionnés dans la section Symptômes, vous pouvez recevoir le message d’erreur
suivant :

Msg 5128, Niveau 17, État 2, Ligne 6

Échec de l’écriture dans le fichier E:\CreateFile\ProductionData.mdf:MSSQL_DBCC11 dispersé en raison d’un


manque d’espace disque.
Dans ce cas, l’application cliente qui exécute les commandes DBCC aura les entrées suivantes dans le jeu de
résultats de l’application :

Résultats DBCC pour « ProductionData ».


CHECKDB a trouvé 0 erreur d’allocation et 0 erreur de cohérence dans la base de données « ProductionData
».
Msg 926, Level 21, State 6, Line 1
La base de données « ProductionData » ne peut pas être ouverte. Il a été marqué SUSPECT par récupération.
Pour plus d’informations, SQL Server lelog des erreurs de la recherche.
Msg 0, Niveau 20, État 0, Ligne 0
Une erreur grave s’est produite sur la commande actuelle. Les résultats, s’il y en a, doivent être ignorés.

Si la capture instantanée n’a pas pu être créée, vous recevez des messages d’erreur semblables à ce qui suit dans
l’application cliente qui émettre les commandes DBCC :

Msg 1823, Niveau 16, État 1, Ligne 1


Impossible de créer une capture instantanée de base de données car elle n’a pas réussi à démarrer.
Msg 7928, Niveau 16, État 1, Ligne 1
La capture instantanée de base de données pour les vérifications en ligne n’a pas pu être créée. La raison est
donnée dans une erreur précédente ou l’un des volumes sous-jacents ne prend pas en charge les fichiers
rares ou les flux de remplacement. Tentative d’accès exclusif pour exécuter des vérifications hors connexion.
Msg 5030, Niveau 16, État 12, Ligne 1
La base de données n’a pas pu être verrouillée exclusivement pour effectuer l’opération.
Msg 7926, Niveau 16, État 1, Ligne 1
Instruction Check abandonnée. La base de données n’a pas pu être vérifiée car une capture instantanée de
base de données n’a pas pu être créée et la base de données ou la table n’a pas pu être verrouillée. Pour plus
d’informations sur le moment où ce comportement est attendu et les solutions de contournement
existantes, voir Books Online. Consultez également les erreurs précédentes pour plus d’informations.
Msg 5106, Niveau 17, État 2, Ligne 1
L’écriture dans le fichier « E:\Data\LogFUllTest_Data.mdf:MSSQL_DBCC10 » a échoué en raison d’un manque
d’espace disque.

Si la capture instantanée de base de données interne s’exécute en erreurs 1450 ou 665, voici une séquence
classique que vous remarquerez dans le journal des SQL Server’erreurs :

2008-05-21 13:03:45.67 spid500 272 transactions rolled forward in database 'MYDATABASE' (12). This is an
informational message only. No user action is required.
2008-05-21 13:03:45.84 spid500 2 transactions rolled back in database 'MYDATABASE' (12). This is an
informational message only. No user action is required.
2008-05-21 13:03:46.97 spid500 Recovery completed for database MYDATABASE (database ID 12) in 5 second(s)
(analysis 602 ms, redo 3954 ms, undo 105 ms.) This is an informational message only. No user action is
required.
2008-05-21 13:36:48.25 spid480 The operating system returned error 665(The requested operation could not be
completed due to a file system limitation) to SQL Server during a write at offset 0x00001b35138000 in file
'I:\MSSQL\DATA\mscrm_data1.ndf:MSSQL_DBCC12'.
2008-05-21 13:36:48.26 spid480 Error: 17053, Severity: 16, State: 1.
2008-05-21 13:36:48.26 spid480 C:\MSSQL\DATA\MyDatabase.mdf:MSSQL_DBCC12: Operating system error 665(The
requested operation could not be completed due to a file system limitation) encountered.
2008-05-21 13:36:48.27 spid480 The operating system returned error 665(The requested operation could not be
completed due to a file system limitation) to SQL Server during a write at offset 0x00001b35138000 in file
'C:\MSSQL\DATA\MyDatabase.mdf:MSSQL_DBCC12'.
2008-05-21 13:36:48.27 spid480 Error: 17053, Severity: 16, State: 1.
2008-05-21 13:36:48.27 spid480 C:\MSSQL\DATA\MyDatabase.mdf:MSSQL_DBCC12: Operating system error 665(The
requested operation could not be completed due to a file system limitation) encountered.
2008-05-21 13:36:48.37 spid480 The operating system returned error 665(The requested operation could not be
completed due to a file system limitation) to SQL Server during a write at offset 0x00001b35138000 in file
'C:\MSSQL\DATA\MyDatabase.mdf:MSSQL_DBCC12'.
2008-05-21 13:36:48.37 spid480 Error: 17053, Severity: 16, State: 1.
2008-05-21 13:36:48.37 spid480 C:\MSSQL\DATA\MyDatabase.mdf:MSSQL_DBCC12: Operating system error 665(The
requested operation could not be completed due to a file system limitation) encountered.
2008-05-21 13:36:48.37 spid500 DBCC CHECKDB (MYDATABASE) executed by DomainName \ UserName found 0 errors
and repaired 0 errors. Elapsed time: 0 hours 33 minutes 16 seconds. Internal database snapshot has split
point LSN = 0000759c:002547bc:0040 and first LSN = 0000759c:0023696d:0049. This is an informational message
only. No user action is required.

Référence
MSSQLSERVER_17053
Message d’erreur lorsque vous exécutez la
commande DBCC CHECKDB sur un ordinateur qui
contient une base de données SQL Server de
données
13/08/2021 • 2 minutes to read

Cet article vous explique en détail le problème qui se produit lorsque vous exécutez la commande sur un
ordinateur qui contient une base DBCC CHECKDB de données SQL Server données.
Version du produit d’origine : SQL Server 2008
Numéro de la ko d’origine : 960791

Symptômes
Prenons l’exemple du scénario suivant :
Vous restituer une Microsoft SQL Server base de données 2008 SQL Server 2005 à partir d’une
sauvegarde.
Vous recevez des erreurs au cours du processus de restauration qui vous empêchent de restaurer la base
de données.
Vous avez réussi à restaurer la base de données à partir de la même sauvegarde à l’aide de l
CONTINUE_AFTER_ERROR option.
Dans ce scénario, lorsque vous exécutez la commande DBCC CHECKDB sur l’ordinateur qui contient la base de
données SQL Server, vous recevez un message d’erreur semblable à ce qui suit :

Msg 8967, Niveau 16, État 216, Serveur <server name> , Ligne 2
Une erreur interne s’est produite dans le DBCC, ce qui a empêché d’autres traitements. Contactez le support
technique.
Résultats DBCC pour ' <database name> '.
Msg 8921, Niveau 16, État 1, Serveur <server name> , Ligne 1
Check terminated. Un échec a été détecté lors de la collecte des faits. Il est possible que tempdb manque
d’espace ou qu’une table système soit incohérente. Vérifiez les erreurs précédentes.

En outre, un message semblable à ce qui suit peut s’afficher dans le journal SQL Server’erreurs :

2007-05-26 07:13:49.21 spid58 DBCC a rencontré une page avec un LSN supérieur à la fin actuelle du LSN
() journal pour sa capture instantanée de base de données <LSN> interne. Page non lisible (id:page de
fichier), base de données ' <database name' (database ID database id> ), LSN = ( <LSN> ), type = 32,
isInSparseFile = 1. Ré-exécutez cette commande DBCC.

Cause
Ce problème se produit si la commande ne peut pas effectuer les vérifications nécessaires pour vérifier la
DBCC CHECKDB cohérence de la base de données. Ces vérifications n’ont pas pu être effectuées pour de
nombreuses raisons. Par exemple, ce comportement peut se produire s’il existe des incohérences fondamentales
dans la base de données, telles que des incohérences de métadonnées ou une altération de capture instantanée
de base de données. Pour plus d’informations sur la cause spécifique de cette erreur, vous pouvez examiner
l’état différent affiché dans le message d’erreur. Dans le scénario décrit dans la section Symptômes, le message
d’état 216 indique que la commande lit une page à partir de la capture instantanée interne dont le numéro de
séquence de journal est supérieur à la fin du DBCC CHECKDB LSN du journal. Ce comportement peut se produire
si vous restituer des bases de données à l’aide de CONTINUE_AFTER_ERROR option.

Solution de contournement
Pour contourner ce problème, utilisez le conseil TABLOCK avec la DBCC CHECKDB commande. Cela permet à la
DBCC CHECKDB commande de se terminer sans générer le message d’erreur.

Pour plus d’informations sur les conseils TABLOCK, visitez le site Web Microsoft suivant : Conseils (Transact-SQL)
- Tableau.
La sauvegarde vers l’URL échoue avec l’erreur
d’SQL Server
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre l’erreur qui se produit lorsque vous utilisez la commande URL de la base de
données de sauvegarde nonrecoverable I/O dans SQL Server.
Version du produit d’origine : SQL Server 2012 Enterprise, SQL Server 2014 Enterprise, SQL Server 2014
Enterprise
Numéro de la ko d’origine : 3177997

Symptômes
Vous essayez de sauvegarder une base de données sur votre ordinateur virtuel SQL Server Azure (IaaS) à l’aide
de la commande URL de la base de données de sauvegarde. Toutefois, la tentative échoue avec l’erreur suivante :

Msg 3271, Niveau 16, État 1, Ligne 7


Une erreur d’O/S non récible s’est produite sur le fichier « « La sauvegarde vers l’URL a reçu une exception
du https://sqlbakurl.blob.core.windows.net/backupcontainer/demodb.bak: point de terminaison distant.
Message d’exception : le serveur distant a renvoyé une erreur : (400) Demande erronée.
Msg 3013, Niveau 16, État 1, Ligne 7
BACKUP DATABASE se termine anormalement.

Cause
This issue occurs if the storage account that you’re trying to back up to was created with the Account Kind
setting set to Blob . Le paramètre Type de compte doit être à usage général.
Résolution
Pour résoudre ce problème, créez un compte de stockage et spécifiez l’objectif général du paramètre Type de
compte. Désignez également un conteneur dans ce compte de stockage pour la sauvegarde vers l’URL.

Plus d’informations
Lorsque le type de compte est définie sur Usage général, cela permet la prise en charge des fichiers blob de
page. SQL Server sauvegarde utilise des blobs de page comme type Blob. Pour plus d’informations, voir SQL
Server sauvegarde et restauration avec Windows Azure Blob Stockage Service.
Une base de données TDE peut ne pas récupérer
dans SQL Server
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où une base de données TDE peut ne pas être récupérée lorsque le
chiffrement automatique de la clé principale par la clé principale de service est supprimé.
S’applique à : SQL Server 2008 Enterprise, SQL Server 2008 R2 Enterprise
Numéro de la ko d’origine : 2666213

Symptômes
Dans Microsoft SQL Server 2008 et dans Microsoft SQL Server 2008 R2, une base de données activée pour le
chiffrement transparent de la base de données peut ne pas être récupérée. De plus, le message d’erreur suivant
peut être consigné dans le journal d SQL Server’erreurs suivant :

2012-01-14 22:16:26.47 erreur spid20s : 15581, Gravité : 16, État : 3.


2012-01-14 22:16:26.47 spid20s Please create a master key in the database or open the master key in the
session before performing this operation.

Cause
Ce problème se produit lorsque le chiffrement de la clé principale de service pour la clé principale de base de
données dans la base de données maître est supprimé lorsque la commande suivante est exécuté :

Use master
go
alter master key drop encryption by service master key

Lorsqu’une clé principale de base de données (DMK) est créée pour la première fois, elle est automatiquement
chiffrée avec la clé principale de service.
La clé principale de base de données est utilisée pour chiffrer le certificat utilisé par la fonctionnalité de
chiffrement transparent de la base de données. Toute tentative d’utilisation de la base de données TDE nécessite
l’accès au certificat et à la clé principale de base de données dans la base de données maître. Dans la
configuration par défaut, la clé principale de base de données est ouverte implicitement par la clé principale de
service. Une clé principale qui n’est pas chiffrée par la clé principale de service doit être ouverte explicitement à
l’aide de l’instruction OPEN MASTER KEY avec un mot de passe sur chaque session nécessitant l’accès à la clé
principale.
La récupération de base de données se produit sur les sessions système. Si ces sessions ne peuvent pas ouvrir le
certificat et la clé principale de base de données, la récupération ne peut pas être effectuée sur une base de
données TDE si le déchiffrement automatique du DMK par SMK est supprimé. Dans ce scénario, la base de
données est marquée comme récupération en attente .

Résolution
Pour résoudre le problème, activez le déchiffrement automatique de la clé principale. Pour ce faire, exécutez les
commandes suivantes :
Use master
go
open master key DECRYPTION BY PASSWORD = 'password'

alter master key add encryption by service master key

Mettre la base de données hors connexion et la mettre en ligne à l’aide


Alter Database <databasename> Set ONLINE command de .

Utilisez la requête suivante pour déterminer si le déchiffrement automatique de la clé principale par la clé
principale de service a été désactivé pour la base de données maître :

select is_master_key_encrypted_by_server from sys.databases where name = 'master'

Si cette requête renvoie la valeur 0, le déchiffrement automatique de la clé principale par la clé principale de
service a été désactivé.
Violations d’accès et fichiers de vidage mémoire
lorsque vous utilisez la session XEvent avec
sqlos.wait_info événement dans SQL Server
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous utilisez une session XEvent qui a un
événement sqlos.wait_info SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 4033835

Symptômes
Prenons l’exemple du scénario suivant :
Vous créez une session XEvent qui possède un sqlos.wait_info événement dans Microsoft SQL Server.
Dans cette session, vous définissez un filtre (prédicat) dans le modèle suivant :

[sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%< **Query Text** >')

Dans ce scénario, vous pouvez être face à l’un des problèmes suivants :
SQL Server génère des violations d’accès ou un fichier de vidage mémoire de dépassement de la pile.
SQL Server génère un fichier de vidage mémoire du scheduler sans rapport.
Les requêtes ne retournent pas de résultats, ou vous ne pouvez pas annuler ou supprimer une requête.
Lorsque SQL Server génère une exception et un fichier de vidage mémoire de dépassement de capacité
de la pile dans le journal des erreurs SQL Server, des messages d’erreur semblables à l’un des
EXCEPTION_ACCESS_VIOLATION messages suivants sont générés :

<Time Stamp> spid52 *


<Time Stamp> SPID52 * BEGIN STACK DUMP:
<Time Stamp>spid52 * <Time Stamp> spid 52
<Time Stamp> spid52 *
<Time Stamp> spid52 *
<Time Stamp> Spid52 * Exception Address = 00007FFA414ED763
Module(sqlmin+000000000000D763)
<Time Stamp> spid52 * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION
<Time Stamp> Une violation d’accès spid52 * s’est produite en 0000000000000008
<Time Stamp> spid55 Impossible de créer un fichier de vidage de pile en raison d’un manque de pile
(Emplacement : scheduler.cpp:2090
Expression : !pWorker->WorkerQueueElem::IsInList ()
SPID: 55
ID de processus : 8548)
<Time Stamp> Spid55 Stack Signature pour le vidage est 0x0000000000000000
<Time Stamp> Spid55 <Time Stamp> Stack Overflow Dump not possible - Exception c00000fd
EXCEPTION_STACK_OVERFLOW at 0x00007FFA4EF85F35
<Time Stamp> spid55 SqlDumpExceptionHandler : Address=0x00007FFA4EF85F35 Exception Code
= c00000fd
<Time Stamp> spid55 Rax=00000000000044c Rbx=0000000002612320 Rcx=0000000002612050
Rdx=00000000662baf59
<Time Stamp> spid55 Rsi=000000004b04f848 Rdi=000000004b000270
Premier=0000000004ef85f35 Rsp=000000002611fd0
<Time Stamp> spid55 Rbp=0000000000000000 EFlags=0000000000010202
<Time Stamp> spid55 cs=0000000000000033 ss=000000000000002b ds=000000000000002b
es=00000000000002b fs=0000000000000053 gs=0000000000002b
<Time Stamp> spid55 1 : Frame 0000000000000000 Adresse de retour 00007FFA4EF85F35

Solution de contournement
Pour contourner ce problème, évitez d’utiliser des conditions de filtre complexes avec wait_info l’événement.
Cela est dû au fait que l’événement est très important en ressources et wait_info peut considérablement
ralentir une requête.
Si vous souhaitez suivre cette situation, modifiez le modèle de prédicat de filtre <Query Text> comme suit :

([sqlserver].[equal_i_sql_unicode_string]([sqlserver].[sql_text],N'<Query Text>')
Max_Queue_Readers est ignorée lorsque vous
essayez de limiter les tâches d’activation dans
Service Broker
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque plus de tâches d’activation s’exécutent dans
Service Broker que la limite définie par la Max_Queue_Readers propriété.
Version du produit d’origine : SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL
Server 2008 R2
Numéro de la ko d’origine : 3163368

Symptômes
Prenons l’exemple du scénario suivant :
Vous utilisez Service Broker dans SQL Server 2017 sur Windows, Microsoft SQL Server 2014 ou SQL
Server 2012.
Vous définissez Service Broker pour l’exécution asynchrone des procédures stockées.
Vous définissez la propriété sur une valeur spécifique pour la file d’attente service Broker afin de limiter le
nombre d’instances d’une procédure stockée d’activation qui s’exécutent Max_Queue_Readers en même
temps.
Dans ce scénario, vous remarquez que plus de tâches activées sont en cours d’exécution que la valeur définie
pour Max_Queue_Readers .

Cause
Ce problème peut se produire si la base de données Service Broker passe du mode mono-utilisateur ( ) au
RESTRICTED_USER mode multi-utilisateur ( ) en exécutant ce MULTI_USER qui suit :

alter database <dbname> set multi_user

Lorsque le mode utilisateur est modifié sur la base de données, Service Broker est arrêté et redémarré. Au cours
de ce processus, l’objet QueueMonitor existant est supprimé et une autre instance de l’objet est QueueMonitor
créée. Si le processus d’activation est en cours d’exécution d’une longue opération pendant l’arrêt du Service
Broker, l’état de l’objet QueueMonitor est modifié pour être abandonné.
Toutefois, l’instance d’objet existante n’est pas supprimée, car son nombre de QueueMonitor références n’a pas
atteint zéro. Si la procédure d’activation est toujours en cours d’exécution au redémarrage du Service Broker, la
nouvelle instance de l’objet et l’objet abandonné QueueMonitor QueueMonitor coexistent dans la même file
d’attente. QueueMonitor L’instance d’objet supprimée sera supprimée lors du prochain démarrage de Service
Broker.

Solution de contournement
Pour contourner ce problème, veillez à l’exécuter alter database [dbname] set multi_user lorsqu’aucune
procédure activée n’est en cours d’exécution. Pour ce faire, utilisez l’une des méthodes suivantes :
Avant de modifier le mode utilisateur, désactivez toutes les files d’attente de la base de données, puis
réactivez toutes les files d’attente.
Avant de modifier le mode utilisateur, désactivez la procédure d’activation pour toutes les files d’attente
concernées en exécutant la commande suivante, puis réactivez la procédure d’activation :

alter queue <queueName> with activation (status = off)

Plus d’informations
Vous pouvez vérifier le nombre de procédures d’activation en cours d’exécution pour une file d’attente
spécifique en exécutant une requête sys.dm_broker_activated_tasks comme suit :

select * from sys.dm_broker_activated_tasks where queue_id = <queue number>

Vous pouvez interroger l’état du moniteur de file d’attente en exécutant la requête suivante :

Select * from sys.dm_broker_queue_monitors where queue_id = <queue number>

L’état du moniteur de file d’attente s’affiche comme abandonné si le mode utilisateur de la base de données a
été modifié.
SQL Le travail de l’agent qui exécute une requête
distribuée peut échouer avec les messages d’erreur
65535, 782 ou 7437
15/08/2021 • 4 minutes to read

Cet article vous aide à résoudre le problème où le travail de l’agent SQL qui exécute une requête distribuée peut
échouer avec des messages d’erreur 65535, 782 ou 7437.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2492477

Symptômes
Un travail de l’agent SQL qui exécute une requête distribuée (serveur lié) peut échouer avec l’un des messages
d’erreur suivants, lorsque le propriétaire du travail n’est pas membre du rôle serveur sysadmin :

Le fournisseur OLE DB « pour le serveur lié » a renvoyé le message « Le délai <provider name>
<Linkedserver Name> d’expiration de connexion a expiré ».
Le fournisseur OLE DB « » pour le serveur lié « » a renvoyé le message « Une erreur s’est produite
lors de l’établissement d’une connexion <provider name> <Linkedserver Name> au serveur. Lors de
la connexion à SQL Server 2005, cet échec peut être dû au fait que sous les paramètres par défaut
SQL Server n’autorise pas les connexions distantes. »
Msg 65535, Niveau 16, État 1, Ligne 0
SQL Interfaces réseau : serveur de localisation d’erreurs/instance spécifiée [xFFFFFFFF].

Msg 782, Niveau 16, État 1, Ligne 0


Fournisseur SSL : aucune informations d’identification n’est disponible dans le package de sécurité
Fournisseur OLE DB « <provider name> « for linked server " <Linkedserver Name> " returned
message « Client unable to establish connection ».

Par exemple, dans SQL Server 2008, les messages d’erreur peuvent être similaires à ce qui suit :

Le fournisseur OLE DB « SQLNCLI » pour le serveur lié » a renvoyé le message « Le délai d’expiration
de connexion <Linkedserver Name> a expiré ».
Le fournisseur OLE DB « SQLNCLI » pour le serveur lié « » a renvoyé le message « Une erreur s’est
produite lors de l’établissement d’une connexion <Linkedserver Name> au serveur. Lors de la
connexion à SQL Server 2005, cet échec peut être dû au fait que sous les paramètres par défaut SQL
Server n’autorise pas les connexions distantes. »
Msg 65535, Niveau 16, État 1, Ligne 0
SQL Interfaces réseau : serveur de localisation d’erreurs/instance spécifiée [xFFFFFFFF].

Msg 782, Niveau 16, État 1, Ligne 0


Fournisseur SSL : aucune informations d’identification n’est disponible dans le fournisseur OLE DB du
package de sécurité « SQLNCLI10 <Linkedserver Name> » pour le serveur lié » a renvoyé le
message « Client incapable d’établir la connexion ».

Msg 7437, Niveau 16, État 1, Ligne 3


Les serveurs liés ne peuvent pas être utilisés sous l’emprunt d’identité sans mappage pour la
connexion dont l’identité a été usurpée.

Vous pouvez également voir le même comportement lors de l’utilisation ou de l’exécution d’une requête
distribuée à l’aide de l’emprunt d’identité via une instruction Openquery Execute as Login T-SQL.

Cause
L’étape SQL transactuelle s’exécute en tant que propriétaire de l’étape du travail si le propriétaire de l’étape de
travail n’est pas membre du rôle serveur fixe sysadmin. SQL L’agent Execute as Login exécute l’étape du travail
dans le contexte du propriétaire de l’étape du travail. Vous ne pouvez pas utiliser EXECUTE AS d’instruction au-
delà des limites du serveur. Ce comportement est inhérent au produit. Pour plus d’informations, voir les
rubriques suivantes dans SQL Server Books Online :
EXECUTE AS (Transact-SQL)
Extension de l’emprunt d’identité de base de données à l’aide d’EXECUTE AS

NOTE
La même cause s’applique au scénario dans lequel vous essayez manuellement de modifier le contexte d’exécution d’une
requête distribuée dans management studio à l’aide de l’instruction EXECUTE AS.

Solution de contournement
IMPORTANT
La solution de contournement suivante nécessite que vous définissiez une connexion de serveur local explicite aux
mappages de connexion de serveur distant à l’aide de la page Sécurité sous Propriétés de l’objet serveur lié. Étant donné
que la colonne Utilisateur distant doit être une connexion d’authentification SQL Server sur le serveur distant, le mode
d’authentification du serveur distant doit être déjà en mode mixte ou doit être modifié en mode mixte avant d’utiliser la
solution de contournement abordée ci-dessous.

Si une étape de travail T-SQL appartient à un utilisateur qui ne fait pas partie du rôle serveur sysadmin et si
l’étape contient une requête distribuée, prenez les mesures suivantes pour vous assurer que les travaux ou les
requêtes n’échouent pas :
1. Créez un mappage pour chaque propriétaire de l’étape du travail sur le serveur local à une connexion
existante ou nouvelle sur le serveur distant.
2. Assurez-vous que la connexion dispose de privilèges suffisants pour exécuter différents modules sur le
serveur distant accessibles dans la requête distribuée. Pour plus d’informations, voir Propriétés du serveur lié
(page Sécurité).

Plus d’informations
Parfois, vous remarquerez que les requêtes abordées dans l’un des scénarios de la section Symptômes peuvent
s’exécuter correctement. Cela se produit généralement lorsque l’utilisateur dont l’identité a été usurpée s’est
précédemment connectée au système distant et que le système a toujours ouvert une connexion établie par
l’utilisation à distance. Vous ne devez pas vous attendre à ce que la requête fonctionne tout le temps.
Étapes pour reproduire le comportement
1. Sur votre instance SQL, créez un serveur lié à une autre instance SQL à l’aide de SQL Server Management
Studio (SSMS) ou du script suivant.
EXEC master.dbo.sp_addlinkedserver @server = <server name>, @srvproduct=N'SQL Server'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=<servername> ,
@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

2. Exécutez la requête suivante dans SSMS à l’aide d’une connexion membre du rôle serveur Sysadmin et
assurez-vous qu’elle fonctionne bien.

select * from <servername>.master.sys.sysobjects

3. À présent, modifiez le contexte de la requête en un compte non-sysadmin et exécutez la même requête.

execute as login='Domain\Login1'
go
select suser_sname()
go
select * from <servername>.master.sys.sysobjects
go

Cette étape échoue avec l’erreur mentionnée dans la section Symptômes de l’article.

NOTE
OPENROWSET et les fonctions ne sont pas affectées par ce problème, car ces fonctions incluent les informations
OPENDATASOURCE d’identification en tant que paramètres.
BEGIN DISTRIBUTED TRANSACTION est une instruction distincte qui n’a pas ses propres informations d’identification et
n’est pas affectée par ce problème. Toutefois, si la sécurité du serveur lié n’est pas correctement configurée, ces
instructions peuvent toujours échouer.
Impossible de migrer l’assembly vers SQL Server
2017 lors de la vérification de la compatibilité de la
base de données Configuration Manager
14/08/2021 • 2 minutes to read

Cet article présente l’assembly ne peut pas être migré vers SQL Server erreur 2017 lors de la vérification de
compatibilité de la base de données Configuration Manager.
Version du produit d’origine : System Center Configuration Manager, SQL Server 2017 sur Windows
Numéro de la ko d’origine : 4465462

Résumé
Dans Microsoft SQL Server 2017, vous utilisez le contrôle de compatibilité de base de données intégré pour
déterminer la compatibilité de mise à niveau d’une base de données Microsoft System Center Configuration
Manager. Vous avez également CLR Strict Security activé. Lorsque vous exécutez la vérification, vous recevez
des messages d’information concernant les assemblys indiqués suivants :

Assembly [DcmObjectModel_SQLCLR] ne peut pas être migré vers SQL Server 2017. Pour plus
d’informations, voir : Ligne 1, Colonne 1.
Assembly [MessageHandlerService] ne peut pas être migré vers SQL Server 2017. Pour plus d’informations,
voir : Ligne 1, Colonne 1.
Assembly [ServiceBrokerInterface] ne peut pas être migré vers SQL Server 2017. Pour plus d’informations,
voir : Ligne 1, Colonne 1.
Assembly [SMSSQLCLR] ne peut pas être migré vers SQL Server 2017. Pour plus d’informations, voir : Ligne
1, Colonne 1.
Assembly [StateSysSqlClr] ne peut pas être migré vers SQL Server 2017. Pour plus d’informations, voir :
Ligne 1, Colonne 1.

État
Les messages d’information sont de par leur conception. Bien que les assemblys soient marqués comme NON
SÉCURISÉs, ils sont gérés correctement. Vous pouvez ignorer ces messages en toute sécurité et continuer à
exécuter la mise à niveau de la base de données.

Plus d’informations
Par défaut, toutes les bases de données Configuration Manager doivent avoir l’option Fiable définie sur True
dans les propriétés de la base de données. Il s’agit d’une condition requise pour Configuration Manager et pour
CLR Strict Security que la fonctionnalité fonctionne correctement.

Pour vérifier ce paramètre, ouvrez la fenêtre Propriétés de la base de données, sélectionnez la page Options
dans le volet de navigation, puis recherchez la ligne Fiable dans la liste Autres options.
SQL Server assertion en bloc lorsque vous essayez
d’exécuter une instruction d’insertion en bloc ou
BCP
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’exécuter une Bulk Insert ou
plusieurs BCP opérations.
Version du produit d’origine : SQL Server 2008 R2 Enterprise, SQL Server 2008 Enterprise
Numéro de la ko d’origine : 2700641

Symptômes
Prenons l’exemple du scénario suivant :
Les serveurs A et B exécutent Microsoft SQL Server 2008 ou SQL Server 2008 R2.
Vous pouvez configurer la mise en miroir de bases de données entre le serveur A et le serveur B.
Vous exécutez une BULK INSERT ou BCP plusieurs instructions sur la base de données principale.

NOTE
Par défaut, CHECK_CONSTRAINTS l’option est définie sur Off lorsque vous exécutez une ou plusieurs
BULK INSERT BCP instructions.

La mise en miroir de base de données est interrompue et la session de mise en miroir de base de
données entre dans l’état SUSPENDED.
Dans ce scénario, une assertion se produit sur le serveur miroir. Par conséquent, un fichier de mini-vidage est
créé dans le SQL Server journal. En outre, l’erreur suivante s’SQL Server journal des erreurs sur le serveur
miroir :

NOTE
Vous devez réinitialiser la mise en miroir de bases de données pour résoudre ce problème.

Cause
Ce problème se produit car les informations de compatibilité de verrouillage dans le journal des transactions de
la base de données principale ne sont pas transférées vers le serveur miroir.

Solution de contournement
Pour contourner ce problème, exécutez la ou l’instruction sur la base de données BULK INSERT principale à l’aide
de BCP CHECK_CONSTRAINTS l’option ON.
NOTE
CHECK_CONSTRAINTS L’option ON ralentit les performances. Toutefois, l’affirmation de verrouillage sur le serveur miroir ne
se produit pas.

Informations supplémentaires
Au cours BULK INSERT BCP d’une ou d’une opération, une transaction enfant éteint CHECK_CONSTRAINTS l’option.
Cette transaction enfant utilise un verrou compatible avec les verrous de transaction parent. Les informations de
compatibilité sont stockées dans le journal des transactions de la base de données principale. Par conséquent, la
demande de verrouillage de transaction enfant est accordée sur la base de données principale.
Toutefois, ces informations de compatibilité ne sont pas transférées vers le serveur miroir. Par conséquent, la
demande de verrouillage de transaction enfant est incompatible avec les verrous de transaction parent sur le
serveur miroir. Ce scénario entraîne l’affirmation sur le serveur miroir.
Échec de l’agent ASR ou d’une autre sauvegarde
VSS non-composant pour un serveur hébergeant
SQL Server 2008 R2
13/08/2021 • 3 minutes to read

Cet article vous aide à contourner le problème dans lequel une sauvegarde VSS non-composant, telle que
l’agent ASR, échoue pour un serveur qui héberge SQL Server 2008 R2.
Version du produit d’origine : SQL Server 2008, SQL Server 2008 R2
Numéro de la ko d’origine : 4504103

Symptômes
Prenons l’exemple du scénario suivant :
Vous utilisez Microsoft SQL Server 2008 ou SQL Server 2008 R2.
Vous démarrez une sauvegarde VSS non-composant d’un volume qui héberge SQL Server fichiers. Par
exemple, vous utilisez Microsoft Azure Agent de récupération de site.
Dans ce cas, vous remarquez que la sauvegarde VSS échoue en raison d’une erreur SQLServerWriter, même si
le journal d’erreurs SQL Server signale une sauvegarde réussie.
SQLServerWriter signale le résultat suivant dans la sortie « vssadmin list writers » :

Writer name: 'SqlServerWriter'


Writer ID: {ID}
ID d’instance de rédacteur : {ID}
État : [11] Échec
Dernière erreur : erreur non réessayable

NOTE
L’état ou l’erreur précédent est très générique. Par conséquent, il ne fournit pas suffisamment d’informations pour vous
laisser identifier de manière sélective un scénario donné. Cette situation est significative dans le contexte de sauvegardes
non-composants sur SQL Server 2008 ou R2.

En outre, un suivi SQLServerWriter signale les éléments suivants :

[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pdf\sqllib\FileName(LineNumber) :
FrozenDatabase::GetNextPartialInfo: VDI::GetCommand failed with error 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] EXIT {DatabaseName::GetNextPartialInfo}: hr: 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pdf\sqlwriter\FileName(LineNumber) : CSqlWriter::P
ickupDifferentialInfo : Le maître de base de données de l’instance de serveur CGLONCSQL01 n’a pas réussi à
émaner les informations de fichier. hr = 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pdf\sqlwriter\FileName(LineNumber) : CSqlWriter::P
ickupDifferentialInfo: Throwing HRESULT code 0x8077000e. Code HRESULT précédent = 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pé\sqlwriter\FileName(LineNumber) : CSqlWriter::P
ickupDifferentialInfo : EXCEPTION HRESULT capturée : hr : 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] EXIT {CSqlWriter::P ickupDifferentialInfo}: hr: 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pé\sqlwriter\FileName(LineNumber) : STDMETHODCALLTYPE
CSqlWriter::OnPostSnapshot : Échec de la sélection des informations de fichier à partir des serveurs de base
de données. hr = 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pé\sqlwriter\FileName(LineNumber) : STDMETHODCALLTYPE
CSqlWriter::OnPostSnapshot: Throwing HRESULT code 0x8077000e. Code HRESULT précédent =
0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] sqlwriter.pé\sqlwriter\FileName(LineNumber) : STDMETHODCALLTYPE
CSqlWriter::OnPostSnapshot: EXCEPTION HRESULT CAUGHT: hr: 0x8077000e
[-,0x00c390:0xbb80:0x0eba42eb] Entrez {Snapshot::~Snapshot}:

Solution de contournement
Il n’existe aucun correctif SQL Server 2008 ou SQL Server 2008 R2. This issue was fixed in the initial release
(RTM) of SQL Server 2012. Étant donné que SQLServerWriter est un composant partagé, la mise à niveau des
composants partagés avec une version majeure ultérieure de SQL Server remplace SQL Server 2008 ou SQL
Server 2008 R2 SQLServerWriter par une version plus récente qui contient le correctif.
Dans les cas où SQL Server 2008 ou SQL Server 2008 R2 rencontre ce problème, nous vous suggérons
d’installer une édition gratuite d’une version SQL Server récente, telle que SQL Server Express Edition. (Voir la
section Plus d’informations sur la version exacte à utiliser, en fonction de la version du système d’exploitation).
Pour ce faire, sélectionnez Mettre à niveau les fonctionnalités par tagées uniquement dans la page
Sélectionner une instance de l SQL Server Express’installation.
Cette méthode permet de mettre à niveau tous les composants partagés vers la version SQL Server utilisée.
Cela signifie que le même service SQL Server VSS Writer qui 2008 ou 2008 R2 de l’auteur exécute désormais la
version SQL Server la plus récente à partir de SQL Express. La version la plus récente est à compatibilité avec les
versions précédentes.
Cette méthode vous permet également d’installer SQL Server mises à jour cumulatives pertinentes pour la
version de mise à niveau de SQL Express. Par exemple, vous pouvez installer SQL Server mises à jour
cumulatives 2014 ou SQL Server 2017 pour maintenir SQLServerWriter à jour selon les besoins. Pour plus
d’informations, voir FIX: Back up a SQL Server database by using a VSS Backup application may fail after
installing SQL Server

Plus d’informations
SQL Server 2016 et SQL Server 2017 Express Edition nécessitent Windows Server 2012 version
ultérieure ou ultérieure, ou Windows 8 ou version ultérieure.
Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 avec SQL Server 2008 ou SQL Server
2008 R2, vous pouvez utiliser SQL Server 2014 Service Pack 3 (SP3) Express Edition pour mettre à niveau
les composants partagés : téléchargez Microsoft SQL Server 2014 SP3 Express.
Lorsque vous mettre à niveau les composants partagés, tous les sous-composants sont mis à niveau en
plus de SQLServerWriter. Par exemple : les services d’intégration, Master Data Services (MDS), SQL
Server Management Studio (SSMS), SQL Server Data Tools (SSDT) et SQL Server Books Online sont mis à
niveau.
Une autre solution de contournement consiste à mettre à niveau les composants partagés et à éviter le
problème en installant dummy une instance SQL Express d’une version majeure ultérieure. Lorsque vous
installez une version majeure ultérieure de SQL Server instance, les composants partagés sont également
mis à niveau. Vous pouvez ensuite désactiver ou désinstaller l’instance factice. Toutefois, l’approche la
plus propre consiste à mettre à niveau les composants partagés.

Références
Découvrez la description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft.
Les sauvegardes VSS non-composants telles que les
travaux Azure Site Recovery échouent sur les
serveurs hébergeant SQL Server instances avec
AUTO_CLOSE DBs
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où les sauvegardes vsS (Volume Shadow Copy Service) non-
composants telles que les travaux Azure Site Recovery (ASR) échouent sur les serveurs qui hébergent des
instances SQL Server avec des AUTO-CLOSE DB.
Version du produit d’origine : SQL Server 2017 sur Windows, SQL Server 2016, SQL Server 2014, SQL Server
2012, SQL Server 2008 R2, SQL Server 2008, SQL Server dans la VM - Windows
Numéro de la ko d’origine : 4504104

Symptômes
Prenons l’exemple du scénario suivant :
Vous avez un serveur qui exécute n’importe quelle version de Microsoft SQL Server.
Cette SQL Server instance héberge des bases de données dont l’option AUTO-CLOSE est définie.
Vous exécutez une sauvegarde VSS non-composant (par exemple, à l’aide de l’agent ASR) sur les volumes de
ce serveur qui héberge des fichiers de base de données SQL Server de données.
Dans ce cas, vous remarquez que la sauvegarde VSS échoue et déclenche l’entrée suivante dans le journal des
applications :

Un rédacteur VSS a rejeté un événement avec 0x800423f4, le rédacteur a connu une erreur non temporaire.
Si le processus de sauvegarde est retenté, l’erreur est susceptible de se reproduire. Les modifications
apportées par l’auteur aux composants du rédacteur lors de la gestion de l’événement ne seront pas
disponibles pour le demandeur. Consultez le journal des événements pour les événements connexes de
l’application hébergeant l’enregistreur VSS.
Opération :
PostSnapshot, événement
Contexte :
Contexte d’exécution : Rédacteur
ID de classe writer : {ID}
Writer Name: SqlServerWriter
Writer Instance Name: Microsoft SQL Server 2012:SQLWriter
ID d’instance writer : {ID}
Ligne de commande : « C:\Program Files\Microsoft SQL Server\90\Shared\sqlwriter.exe »
ID de processus : xxx »

Cause
Ce problème se produit car SQL Server SQLWriter ne gère actuellement pas correctement les bases de données
AUTO-CLOSE dans les demandes de sauvegarde VSS en mode non-composant.
Solution de contournement
En tant qu’atténuation à court terme, nous vous recommandons de désactiver l’option AUTO-CLOSE sur toutes
les bases de données de toutes les instances SQL Server hébergées sur des serveurs qui reçoivent des
sauvegardes VSS non-composant. En règle générale, les machines virtuelles Azure qui exécutent SQL Server
sont affectées, car l’agent ASR exécute ces sauvegardes non-composants.

Plus d’informations
Par défaut, la propriété est définie sur OFF dans AUTO_CLOSE SQL Server Understanding SQL Express
behavior: Idle time resource usage, AUTO_CLOSE and User Instances. Si vous êtes sûr de n’avoir pas
activé ce paramètre manuellement sur les serveurs qui pourraient être affectés par ce problème,
examinez les instances de SQL Server Express qui ont pu être installées en mode silencieux en tant que
composants d’autres applications.
Pour obtenir la liste des bases de données dont le mode est activé, exécutez la requête sur AUTO_CLOSE
une instance SQL Server données :
select name,database_id,is_auto_close_on from sys.databases where is_auto_close_on=1

Pour modifier le paramètre, reportez-vous à la section des options ALTER DATABASE SET de la
AUTO_CLOSE documentation en ligne pour TSQL.

Pour mettre cette option hors service, exécutez la commande suivante dans la sqlcmd.exe client
par défaut (par exemple, pour la base de données Ma base de données) :

alter database <myDatabase> set auto_close OFF

La modification prend effet immédiatement. Pour inverser cette modification, exécutez la


commande suivante :

alter database <myDatabase> set auto_close ON

Si vous préférez une méthode GUI, utilisez options des propriétés de base de > données SQL Server
Management Studio.
La sauvegarde d’une base SQL Server à l’aide d’une
application de sauvegarde VSS peut échouer pour
certaines bases de données
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous utilisez des applications VSS (Volume
Shadow Copy Services) pour protéger vos bases de données SQL Server données.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2014054

Symptômes
Lorsque vous utilisez des applications VSS (Volume Shadow Copy Services) pour sauvegarder vos bases de
données SQL Server, l’opération de sauvegarde peut échouer si le nom de la base de données contient des
espaces de début ou de fin ou des caractères non imprimables.
Le même problème peut également se produire lorsque vous essayez de back up un volume qui contient l’une
de ces bases de données.

Cause
Les applications de sauvegarde basées sur VSS utilisent (SQLWriter) pour interroger les informations du
composant de métadonnées writer afin de déterminer les fichiers de base de données à SQLServerWriter
sauvegarder. Le composant de métadonnées Writer est créé par SQLWriter à l’aide de l’API VSS et contient trois
ensembles de données :
1. Informations d’identification et de classification des rédacteurs
2. Spécifications au niveau du rédacteur
3. Données de composant
Lorsqu’un nom de base de données contient des espaces de début ou de fin ou des caractères non imprimables,
ce document peut ne pas être créé correctement. Par conséquent, les applications basées sur VSS ne pourront
pas la back up de ces bases de données ou des volumes qui contiennent ces bases de données.

Résolution
Renommons toutes les bases de données qui contiennent des espaces de début ou de fin ou des caractères non
imprimables dans leur nom. Vous pouvez utiliser la requête suivante pour localiser la présence de ces caractères
à l’avant ou à la fin des noms :

SELECT database_id as DatabaseID, '##'+name+'##' as DatabaseName from sys.databases

Exemple de sortie :
DatabaseID DatabaseName
8 ##AdventureWorks## -- DB name is fine
15 ## DBWithLeadingSpace## -- DB name contains leading spaces
17 ##DBWithTrailingSpace ## -- DB name contains trailing spaces

NOTE
Dans la requête ci-dessus, si le nom de la base de données contient des caractères non imprimables, ils peuvent être
imprimés en tant qu’espaces ou indésirables.

Plus d’informations
Les rédacteurs (comme SQL Writer) ajoutent des composants à l’aide de
IVssCreateWriterMetadata::AddComponent, en spécifiant les informations suivantes sur les composants :
Type
Nom
Chemin d’accès logique (le cas caser)
Fonctionnalité prise en charge
Sélection
Métadonnées à utiliser par l’auteur lors de la restauration
Informations d'affichage
Informations de notification
C (Volume Shadow Copy Service) sont des collections de fichiers qui forment une unité logique à des fins de
sauvegarde et de restauration. Tous les fichiers d’un composant (à l’exception de ceux explicitement exclus)
doivent être restaurés en tant qu’unité.
Pour plus d’informations, voir métadonnées VSS.
Vous pouvez utiliser une ou plusieurs des méthodes suivantes pour déterminer si vous êtes en cours d’exécution
dans ce problème :
Diverses applications de sauvegarde peuvent créer des messages personnalisés SqlServerWriter
concernant (ou SQLWriter) in trouvé.
Lorsque vous exécutez à partir d’une invite de commandes sur l SQL Server ordinateur cible, vous ne
voyez SqlServerWriter pas dans la sortie.
rédacteurs de liste vssadmin
Résolution des problèmes SQL Server opérations
de sauvegarde et de restauration
13/08/2021 • 13 minutes to read

Cet article présente les informations suivantes Microsoft SQL Server opérations de sauvegarde et de
restauration :
Références à SQL Server Books Online età d’autres documentations sur les rubriques de sauvegarde et
de restauration.
Les problèmes potentiels que vous pouvez rencontrer et les résolutions que vous pouvez essayer lorsque
vous travaillez avec des opérations de sauvegarde ou de restauration.
Forum Aux Questions (FAQ) sur les opérations de sauvegarde et de restauration.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 224071

Rubriques de référence pour les SQL Server de sauvegarde et de


restauration
Pour plus d’informations sur les opérations de sauvegarde et de restauration, consultez les rubriques
suivantes dans Books Online.
Sauvegarder et restaurer des bases de données SQL Server : cette rubrique aborde les concepts des
opérationsde sauvegarde et de restauration pour les bases de données SQL Server, fournit des liens
vers des rubriques supplémentaires et fournit des procédures détaillées sur la façon d’effectuer
diverses sauvegardes ou tâches de restauration (telles que la vérification des sauvegardes, la
sauvegarde à l’aide de T-SQL ou de SSMS, etc.). Il s’agit de la rubrique parente à ce sujet dans SQL
Server documentation.
Le tableau suivant répertorie les rubriques supplémentaires que vous souhaitez peut-être consulter pour
les tâches spécifiques liées aux opérations de sauvegarde et de restauration.

RÉF ÉREN C E P EUT F O URN IR DES RÉP O N SES P O UR

BACKUP (Transact-SQL) Fournit des réponses aux questions de base relatives à la


sauvegarde. Fournit des exemples de différents types
d’opérations de sauvegarde et de restauration.

Périphériques de sauvegarde (SQL Server) Fournit une excellente référence pour comprendre les
différents périphériques de sauvegarde, la sauvegarde
d’un partage réseau, le stockage d’objets blob Azure et
les tâches connexes.

Modèles de récupération (SQL Server) Couvre en détail les différents modèles de récupération :
simple, complet et journalisé en bloc. Fournit des
informations sur l’impact du modèle de récupération sur
les sauvegardes.
RÉF ÉREN C E P EUT F O URN IR DES RÉP O N SES P O UR

Restauration & sauvegarde : bases de données système Aborde les stratégies et explique ce que vous devez
(SQL Server) savoir lorsque vous travaillez sur des opérations de
sauvegarde et de restauration de bases de données
système.

Vue d’ensemble de la restauration et de la récupération Aborde l’impact des modèles de récupération sur les
(SQL Server) opérations de restauration. Vous devez passer en revue
ce point si vous avez des questions sur la façon dont le
modèle de récupération d’une base de données peut
affecter le processus de restauration.

Gérer les métadonnées lors de la mise à disposition Diverses considérations doivent être à prendre en
d’une base de données sur un autre serveur compte lorsqu’une base de données est déplacée ou que
vous rencontrez des problèmes affectant les connexions,
le chiffrement, la réplication, les autorisations, etc.

Working with Transaction Log Backups Présente des concepts sur la façon de back up and
restore (apply) transaction logs in the full and bulk-
logged recovery models. Explique comment prendre des
sauvegardes de routine des journaux de transactions
(sauvegardes des journaux) pour récupérer des données.

SQL Server Sauvegarde gérée vers Microsoft Azure Présente la sauvegarde gérée et les procédures
associées.

Scénarios de problèmes d SQL Server de sauvegarde et de


restauration
Scénario 1 : l’opération de sauvegarde ou de restauration prend beaucoup de temps
Les opérations de sauvegarde et de restauration sont intensives en opérations d’I/S. Le débit de
sauvegarde/restauration dépend de l’optimisation du sous-système d’opérations d’entreprise sous-jacent
pour gérer le volume d’opérations d’opérations d’entreprise. Si vous pensez que les opérations de
sauvegarde sont suspendues ou prennent beaucoup de temps, vous pouvez utiliser une ou plusieurs des
méthodes suivantes pour estimer le temps d’exécution ou pour suivre la progression des opérations de
sauvegarde et de restauration :
Le journal des SQL Server contient des informations sur les opérations de sauvegarde et de
restauration passées. Vous pouvez utiliser ces détails pour estimer le temps nécessaire à la
restauration de la base de données dans son état actuel. Voici un exemple de sortie du journal des
erreurs :

RESTORE DATABASE a correctement traitée 315 pages en 0,372 seconde (6,604 Mo/s)

Dans SQL Server 2016 et versions ultérieures, vous pouvez utiliser XEvent
backup_restore_progress_trace pour suivre la progression des opérations de sauvegarde et de
restauration.
Vous pouvez également utiliser la colonne percent_complete de sys.dm_exec_requests pour
suivre la progression des opérations de sauvegarde et de restauration en cours.
Les informations de débit liées aux opérations de sauvegarde et de restauration peuvent être
mesurées à l’aide des compteurs de l’écran de performance Débit de l’appareil en octets/s et débit
de sauvegarde/restauration/s. Pour plus d’informations, SQL Server, Backup Device Object.
Comment interroger la progression du processus de sauvegarde en cours d’exécution dans SQL
Server
Fonctionnement : que fait la restauration/sauvegarde ? Ce billet de blog peut vous aider à mieux
comprendre l’étape actuelle des opérations de sauvegarde ou de restauration.
Éléments à vérifier
1. Vérifiez si vous rencontrez l’un des problèmes connus répertoriés dans le tableau suivant. Envisagez si
vous devez implémenter les modifications ou appliquer les correctifs et les meilleures pratiques abordés
dans les articles correspondants.

L IEN EN L IGN E B A SE DE C O N N A ISSA N C ES O U L IVRES EXP L IC AT IO N ET A C T IO N S REC O M M A N DÉES

Optimisation des performances de sauvegarde et de La rubrique Books Online couvre différentes meilleures
restauration dans SQL Server pratiques que vous pouvez utiliser pour améliorer les
performances des opérations de
sauvegarde/restauration. Par exemple, vous pouvez
attribuer le privilège SE_MANAGE_VOLUME_NAME au
compte Windows qui exécute SQL Server pour permettre
l’initialisation instantanée des fichiers de données. Cela
peut produire des gains de performances significatifs.

2920151 correctifs et mises à jour recommandés pour Les correctifs système actuels peuvent inclure des
les clusters de Windows Server 2012 R2 correctifs pour les problèmes connus au niveau du
système qui peuvent entraîner des problèmes de
2822241 Windows 8 et Windows Server 2012 de mise à performances qui affectent des programmes tels que
jour : avril 2013 SQL Server. L’installation de ces mises à jour permet
d’éviter ces problèmes.

2878182 correctif : les processus en mode utilisateur Les opérations de sauvegarde sont intensives en E/S et
dans une application ne sont pas résponsibles sur les peuvent être affectées par ce bogue. Appliquez ce
serveurs qui s’exécutent Windows Server 2012 correctif pour éviter ces problèmes.

309422 choisir un logiciel antivirus à exécuter sur des Le logiciel antivirus peut contenir des verrous sur des
ordinateurs qui exécutent des SQL Server fichiers .bak. Cela peut affecter les performances des
opérations de sauvegarde et de restauration. Suivez les
instructions de cet article pour exclure les fichiers de
sauvegarde des analyses antivirus.

2820470 message d’erreur Différé lorsque vous essayez


d’accéder à un dossier partagé qui n’existe plus dans
Windows 8, Windows 8.1, Windows Server 2012 ou
Windows Server 2012 R2

967351 un fichier fortement fragmenté dans un volume


NTFS peut ne pas dépasser une certaine taille

304101 sauvegarde échoue lorsque vous sauvegardez


un volume système important
L IEN EN L IGN E B A SE DE C O N N A ISSA N C ES O U L IVRES EXP L IC AT IO N ET A C T IO N S REC O M M A N DÉES

2455009 FIX : performances lentes lorsque vous La présence de nombreux fichiers journaux virtuels peut
récupérez une base de données s’il existe de nombreux affecter le temps nécessaire à la restauration d’une base
fichiers VLF dans le journal des transactions dans SQL de données. Cela est particulièrement vrai lors de la
Server 2005, dans SQL Server 2008 ou dans SQL Server phase de récupération de l’opération de restauration.
2008 R2 Pour plus d’informations sur les autres problèmes
possibles qui peuvent être causés par la présence de
nombreux fichiers VLF, reportez-vous aux opérations de
base de données qui prennent beaucoup de temps, ou
elles déclenchent des erreurs lorsque le journal des
transactionscontient de nombreux fichiers journaux
virtuels.

Une opération de sauvegarde ou de restauration sur un Isolez le problème au réseau en essayant de copier un
emplacement réseau est lente fichier de même taille sur l’emplacement réseau à partir
du serveur qui exécute SQL Server. Vérifiez les
performances.

2. Recherchez d’autres messages d’erreur dans SQL Server journal des erreurs et Windows journal des
événements pour plus de pointeurs sur la cause du problème.
3. Si vous utilisez des logiciels tiers ou des plans de maintenance de base de données pour effectuer
plusieurs sauvegardes en même temps, pensez à modifier les planifications afin de réduire la contention
sur le lecteur sur lequel les sauvegardes sont écrites.
4. Travaillez avec votre administrateur Windows pour vérifier les mises à jour du microprogramme de votre
matériel.
Scénario 2 : échec des opérations de sauvegarde ou de restauration qui utilisent des
applications de sauvegarde tierces
SQL Server fournit une API nommée VDI (Virtual Backup Device Interface). Cette API permet aux éditeurs
de logiciels indépendants d’intégrer des SQL Server dans leurs produits afin de prendre en charge les
opérations de sauvegarde et de restauration. Ces API sont conçues pour fournir une fiabilité et des
performances maximales et pour prendre en charge la gamme complète des fonctionnalités de
sauvegarde et de restauration SQL Server de données. Cela inclut la gamme complète des fonctionnalités
de capture instantanée et de sauvegarde à chaud.
Étapes communes de dépannage
Pour les versions antérieures à SQL Server 2012, assurez-vous que le service SQLWriter est
démarré et que le compte de démarrage est définie sur Système local. Assurez-vous également
que la connexion NT AUTHORITY\SYSTEM existe dans SQL Server et qu’elle fait partie du rôle
serveur sysadmin de l’instance sur laquelle les sauvegardes sont effectuées.
Pour SQL Server 2012 et versions ultérieures, une nouvelle connexion nommée [NT
SERVICE\SQLWriter] est créée et mise en service en tant que connexion lors de l’installation.
Assurez-vous que cette connexion existe dans SQL Server et fait partie du rôle serveur sysadmin.
Assurez-vous que SqlServerWriter est répertorié lorsque la commande VSSADMIN LIST WRITERS
est exécuté à une invite de commandes sur le serveur qui exécute SQL Server. Ce rédacteur doit
être répertorié en tant qu’auteur et doit être dans l’état stable pour permettre aux sauvegardes
VSS de se terminer correctement.
Pour des pointeurs supplémentaires, vérifiez les journaux du logiciel de sauvegarde correspondant
et leurs sites de support.
SY M P TÔ M ES O U SC ÉN A RIO A RT IC L E DE L A K B

Échec des sauvegardes des bases de données 2987610 fix : Erreur lorsque vous back up a database
sensibles à la cas that has case-sensitive collation by using VSS in SQL
Server 2012 SP2

Les sauvegardes tierces réalisées à l’aide du rédacteur 2987610 fix : Erreur lorsque vous back up a database
VSS peuvent échouer et renvoyer des erreurs 8229. that has case-sensitive collation by using VSS in SQL
Server 2012 SP2

Comprendre le fonctionnement de la sauvegarde Fonctionnement : SQL Server - Ressources de


VDI sauvegarde VDI (VSS)

Azure Site recovery agent reports failure Échec de l’agent ASR ou d’une autre sauvegarde VSS
non-composant pour un serveur hébergeant SQL
Server 2008 R2

Autres ressources
How It Works: How many databases can be backed up simultaneously?
Scénario 3 : échec des opérations de sauvegarde et de restauration en raison de problèmes
d’autorisations
Les problèmes de propriété et d’autorisation sur le fichier physique de l’appareil de sauvegarde peuvent
interférer avec les opérations de sauvegarde et de restauration. SQL Server être en mesure de lire et
d’écrire sur l’appareil. En outre, le compte sous lequel le service SQL Server s’exécute doit avoir des
autorisations d’écriture sur le lecteur ou sur le partage réseau utilisé pour les sauvegardes.
Choses à faire
Pour plus d’informations, consultez la rubrique Sauvegarde vers un partage réseau dans SQL Server
documentation.

SY M P TÔ M E C O M M EN TA IRES

SQL Server ou SQL’agent est en cours d’exécution sous Accordez des autorisations sur le compte d’ordinateur
un compte système local et les sauvegardes échouent. sur le partage Domain\ComputerName$.

Microsoft recommande d’utiliser des comptes de


domaine dédiés qui possèdent uniquement les privilèges
requis afin d’isoler les services.

Autres ressources
Répertorie toutes les autorisations de dossier partagé ou les autorisations NTFS (PowerShell)
Scénario 4 : échec de l’opération de restauration en raison de sauvegardes endommagées
Activez l’option CHECKSUM de sauvegarde lors de l’effectuer pour éviter la sauvegarde d’une base de
données endommagée. Pour plus d’informations, voir Possible Media Errors During Backup and Restore
(SQL Server). Vous pouvez également activer l’indicateur de suivi 3023 pour activer la reprise de contrôle
lorsque vous effectuez des sauvegardes à l’aide des outils de sauvegarde. Pour plus d’informations, voir
Comment activer l’option CHECKSUM si les utilitaires de sauvegarde n’exposent pas l’option.
Si les fichiers de sauvegarde sont endommagés, les opérations de restauration peuvent échouer et
générer des erreurs semblables à ce qui suit.

RESTORE a détecté une erreur sur la page (0:0) dans la base de données
ADDITIONAL INFORMATION: The media family on device <device name> ' is incorrectly formed. SQL
Server ne peut pas traiter cette famille de médias. RESTORE HEADERONLY se termine anormalement.
(Microsoft SQL Server, Erreur : 3241)

Choses à faire
Exécutez la commande suivante en remplaçant par le nom de votre base de données et vos <test>
chemins d’accès aux fichiers :

RESTORE DATABASE test='d:\test.bak'


WITH NO_CHECKSUM, FILE=1, REPLACE, CONTINUE_AFTER_ERROR,
MOVE 'test' TO 'C:\test.mdf',
MOVE 'test_log' TO 'C:\test_log.ldf'

Pour plus d’informations, consultez le contenu Books Online suivant :


Réponse aux erreurs SQL Server de restauration causées par des sauvegardes endommagées Nous vous
recommandons également d’exécuter CHECKDB sur la base de données une fois l’opération de
restauration terminée.
Scénario 5 : problèmes divers

M ESURES C O RREC T IVES O U IN F O RM AT IO N S


SY M P TÔ M E/ SC ÉN A RIO SUP P L ÉM EN TA IRES

Les sauvegardes peuvent échouer lorsque le suivi des Consultez les articles suivants de la Base de
changements est activé sur les bases de données et connaissances Microsoft :
renvoyer des erreurs semblables à ce qui suit : 2682488 CORRECTIF : échec de l’opération de
sauvegarde dans un SQL Server 2008, dans une
Erreur : 3999, Gravité : 17, État : 1. base de données SQL Server 2008 R2 ou dans
une base de données SQL Server 2012 après
< Time Stamp t> spid< spid > Failed to flush the avoir activé le suivi des changements
commit table to disk in dbid 8 due to error 2601. Vérifier 2603910 CORRECTIF : la sauvegarde échoue
lelog des erreurs dans SQL Server 2008, SQL Server 2008 R2 ou
SQL Server 2012 si vous activez le suivi des
changements sur la base de données
2522893 FIX : une opération de sauvegarde sur
une base de données SQL Server 2008 ou SQL
Server 2008 R2 échoue si vous activez le suivi des
changements sur cette base de données

Problèmes de restauration des sauvegardes de bases de Déplacer une base de données protégée TDE vers une
données chiffrées autre SQL Server

La tentative de restauration d’une sauvegarde CRM à 2567984 erreur « La base de données ne peut pas être
partir de l’édition Enterprise échoue sur une édition démarrée dans cette édition de SQL Server » lors de la
Standard restauration d’une base de données Microsoft Dynamics
CRM données

Plus d’informations
FAQ sur les SQL Server de sauvegarde et de restauration
Comment vérifier l’état des opérations de sauvegarde ?
Découvrez comment interroger la progression du processus de sauvegardeen cours d’exécution dans
SQL Server .
Que dois-je faire en cas SQL Ser ver de secours en cours de sauvegarde ?
Redémarrer les opérations de restauration ou de sauvegarde par redémarrage d’une opération de
restauration interrompue (Transact-SQL)
Puis-je restaurer des sauvegardes de base de données à par tir d’anciennes versions de
programmes sur des versions plus récentes, et inversement ?
SQL Server sauvegarde ne peut pas être restaurée par une version de SQL Server ultérieure à la
version qui a créé la sauvegarde. Pour plus d’informations, voir la prise en charge de la compatibilité.
Comment puis-je vérifier mes sauvegardes SQL Ser ver base de données ?
Consultez les procédures documentées dans RESTORE Statements - VERIFYONLY (Transact-SQL).
Comment puis-je obtenir l’historique de sauvegarde des bases de données SQL Ser ver ?
Découvrez comment obtenir l’historique de sauvegarde des bases de données dans SQL Server.
Puis-je restaurer des sauvegardes 32 bits sur des ser veurs 64 bits, et inversement ?
Oui. Dans la rubrique Back Up and Restore of SQL Ser ver Databases, le format de stockage sur
disque SQL Server est le même dans les environnements 64 bits et 32 bits. Par conséquent, les
opérations de sauvegarde et de restauration fonctionnent dans les environnements 32 bits et 64 bits.
Une sauvegarde créée sur une instance de serveur en cours d’exécution dans un environnement peut
être restaurée sur une instance de serveur en cours d’exécution dans l’autre environnement.

Références complémentaires
Planifier et automatiser des sauvegardes de bases de données SQL Server dans SQL Server Express
Comment back up SQL Server databases in all the instances on a server (PowerShell)
SQL Server enregistre une opération de sauvegarde
dans la table d’historique des jeux de sauvegarde
lorsque vous utilisez VSS pour sauvegarder des
fichiers sur un volume
13/08/2021 • 2 minutes to read

Cet article décrit un comportement « par conception » qui se produit lorsque vous utilisez VSS pour la back up
files sur un volume.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 951288

Symptômes
Lorsque vous utilisez une application vsS (Volume Shadow Copy Service) pour sauvegarder des fichiers sur un
volume qui inclut des fichiers de base de données SQL Server, SQL Server enregistre une opération de
sauvegarde dans la backupset table d’historique. Ce comportement se produit même si vous n’avez pas
réellement back up les fichiers de base de données de SQL Server.

Cause
Ce comportement se produit car l’application VSS appelle le service SQLWriter sur le système pendant
l’opération de sauvegarde. Pour plus d’informations sur la façon dont les applications VSS interagissent avec
SQL Writer, voir SQL Server Back up Applications - Volume Shadow Copy Service (VSS) et SQL Writer.

Précautions à prendre si vous utilisez les entrées de la table


d’historique du jeu de sauvegarde pour la récupération des données
Si vous souhaitez utiliser des entrées dans la table d’historique pour la récupération des données, vous devez
vérifier que les entrées représentent des opérations de sauvegarde backupset de base de données réelles.

Vérifiez qu’une entrée représente une opération de sauvegarde de


base de données native (par opposition à une sauvegarde de capture
instantanée VSS)
Pour ce faire, exécutez l’instruction suivante :

USE msdb
GO

SELECT server_name, database_name, backup_start_date, is_snapshot, database_backup_lsn


FROM backupset

Dans le résultat, notez la database_backup_lsn colonne et la is_snapshot colonne. Une entrée qui représente
une opération de sauvegarde de base de données native présente les caractéristiques suivantes :
La valeur de la database_backup_lsn colonne n’est pas 0 .
La valeur de la is_snapshot colonne est 0 .

Vérifier que le jeu de sauvegarde ne présente aucune erreur


Pour ce faire, exécutez l’instruction suivante :

WITH backupInfo AS( SELECT database_name AS [DatabaseName],


name AS [BackupName], is_damaged AS [BackupStatus],
backup_start_date AS [backupDate],
ROW_NUMBER() OVER(PARTITION BY database_name
ORDER BY backup_start_date DESC) AS BackupIDForDB
FROM msdb..backupset) SELECT DatabaseName
FROM backupinfo WHERE BackupIDForDB = 1 and BackupStatus=1

Si cette requête renvoie des résultats, cela signifie que vous n’avez pas de bonnes sauvegardes de base de
données après la date signalée. Nous vous recommandons vivement d’effectuer une sauvegarde de base de
données complète dès que possible et de vérifier que la sauvegarde complète de la base de données est propre.

Propriété is_damaged de propriété


La table de la base de données backupset msdb contient une ligne pour chaque jeu de sauvegarde. La propriété
de la table indique si des dommages à la base de données ont été détectés lors de la création is_damaged
backupset de la sauvegarde. Par conséquent, la sauvegarde peut être endommagée et ne peut pas être restauré.
Comportement des sauvegardes compressées
lorsque vous les appendez à un jeu multimédia
existant
14/08/2021 • 7 minutes to read

Cet article présente le comportement des sauvegardes compressées lorsque vous les appendez à un jeu
multimédia existant.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2297053

Résumé
L’une des principales restrictions liées aux sauvegardes compressées est que les sauvegardes compressées et
non compressées ne peuvent pas exister dans un jeu multimédia. Cette restriction est documentée dans :
Compression de sauvegarde (SQL Server).
Cet article complète cette documentation et fournit plus d’informations sur le comportement attendu des
sauvegardes compressées par rapport au paramètre de configuration par défaut du serveur de compression de
sauvegarde.

Plus d’informations
Lorsque vous appendez une sauvegarde compressée à un support existant, elle hérite du paramètre de
compression du jeu multimédia. Si vous vous appuyez sur le paramètre de compression de sauvegarde et que
vous êtes en attente d’un média existant, vous risquez de vous retrouver avec une sauvegarde dans un état
sp_configure de compression différent de celui prévu.

Cela n’est vrai que dans les circonstances suivantes :


Vous devez l’appender à un jeu multimédia existant.
Vous vous appuyez sur l’option sp_configure et ne spécifiez pas l’option de niveau
backup compression default WITH COMPRESSION d’instruction Backup.

Lorsqu’un jeu multimédia est créé, des informations sur le fait que cet ensemble de médias soit pour une
sauvegarde compressée ou une sauvegarde normale sont écrites dans le fichier d’en-tête multimédia.
Les sauvegardes prises dans un jeu multimédia existant peuvent coexister uniquement si le paramètre de
compression de ces sauvegardes est identique à celui du jeu multimédia. Les trois facteurs suivants affectent le
comportement des sauvegardes compressées :
1. SQL Server’option de configuration de l’ordinateur : compression de sauvegarde par défaut
2. Options de jeu de sauvegarde : COMPRESSION ou NO_COMPRESSION
3. Que vous appending à un jeu multimédia existant ou que vous écrivant la sauvegarde dans un nouveau jeu
multimédia. Pour les médias existants, un facteur supplémentaire à prendre en compte est de savoir si le jeu
multimédia contient actuellement une sauvegarde compressée ou non compressée.
Le tableau suivant récapitule le comportement des sauvegardes compressées en fonction des trois facteurs ci-
dessus.
A P P EN D TO M EDIA SET
B A C K UP, IN ST RUC T IO N N EW M EDIA SET A P P EN D TO M EDIA SET ( UN C O M P RESSED)

Options des instructions de L’ensemble de médias L’exsting Media Set dispose


sauvegarde existant dispose d’une d’une sauvegarde non
sauvegarde compressée compressée

Niveau d’instruction de Success Back up Opération réussie Erreur


sauvegarde avec compressed
COMPRESSION clause

Niveau d’instruction de Sauvegarde de la réussite : Erreur Opération réussie


sauvegarde avec non compressée
NO_COMPRESSION clause

Instruction de sauvegarde La compression des La sauvegarde de la réussite La sauvegarde de la réussite


sans clause de compression réussites dépend du sera compressée sera décompressée
au niveau de l’instruction sp_configure
backup compression de
réussite

Comme vous pouvez le voir dans le tableau ci-dessus, lorsque nous utilisons le paramètre de compression par
défaut sur le serveur et que nous l’appendons à un jeu multimédia existant, la sauvegarde n’échoue jamais en
raison d’une insérialisation des paramètres de compression. Il fonctionne mais hérite du paramètre dans l’en-
tête du jeu multimédia. Toutefois, si vous spécifiez la ou les options de votre instruction Backup, une erreur se
produit en cas d’insérialisation entre la sauvegarde stockée dans le jeu multimédia et la sauvegarde actuelle
prise en compte dans le paramètre de COMPRESSION NO_COMPRESSION compression.

NOTE
Vous pouvez trouver le paramètre actuel de l’option par défaut backup compression en exécutant la commande dans le
sp_configure SQL Server Management Studio. Si vous êtes en attente d’un média existant, vous pouvez obtenir les
informations d’en-tête à l’aide de la commande headeronly de restauration. Pour plus d’informations, voir la section
Exemples plus loin dans cet article.

Exemples : Voici un exemple de script pour démontrer le comportement dans différents cas. Le comportement
est le même, que la sauvegarde se trouve sur une bande ou sur un disque.
La valeur de compression est 0 .

-- Note compression value, by default it should be 0


sp_configure 'backup compression'
-- Initial Backup completes successfully
BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH FORMAT, INIT,
NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10
GO
-- Check the backup and the header, and see the Compressed column value, it is 0
restore headeronly from DISK = N'E:\testbackup.bak'
-- Now backup using "with compression" and it will fail
-- as backups ( compressed and non compressed cannot be mixed within the same media set )
BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
WITH NAME = N'testbackup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO

Après avoir exécuté le script sql, vous pouvez recevoir le message d’erreur 3098 et 3013 :
Activer la compression de sauvegarde par défaut au niveau du serveur.

-- Turn on default backup Compression at the server level


sp_configure 'backup compression',1 'backup compression',1
go
reconfigure
go
-- The sp_configure 'default compression' as this point is set to 1.
-- Given that you may expect the backup to be compressed and it will be if it -- is a new media set
-- However if you backup and append to the same media set,
-- the backup works -- but results in an uncompressed backup
BACKUP DATABASE test TO DISK = N'E:\testbackup.bak'
WITH NAME = N'testbackup-Full Database Backup', SKIP,NOREWIND,NOUNLOAD, STATS = 10
GO

Traitement de deux pages pour la base de test données, test_log fichier sur le fichier 2.
BACKUP DATABASE a correctement traitée 162 pages en 6,211 secondes (0,203 Mo/s).
Vérifiez l’en-tête Sauvegarde et jeu multimédia.

-- Check the backup and meadia set header. You will see that though Server default is set to
compressed, the backup given that it is appended to an existing media set inherits the compression
setting of the media set itself
-- You may expect this to have failed with the same error as when specifying the WITH COMPRESSION
clause in the backup statement given that compressed and non compressed backups cannot co-exist in
the media set.
restore headeronly from DISK = N'E:\testbackup.bak'
--If you create a new mediaset using the FORMAT option, then the current compression setting is
inherited
-- Create a new media set using FORMAT Or by specifying a new file
BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH FORMAT, INIT, NAME = N'testbackup-Full
Database Backup', SKIP,NOUNLOAD, STATS = 10
GO
-- Check the backup and meadia set header
restore headeronly from DISK = N'E:\testbackup.bak'
-- If you use the with INIT, the backup sets are overwritten but the media header is not
-- Toggle the backup compression setting back to 0
sp_configure 'backup compression',0
go
reconfigure
go
-- backup to the same media set with INIT
BACKUP DATABASE test TO DISK = N'E:\testbackup.bak' WITH INIT,
NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10
GO
-- Check the backup and media set header
-- Note that even though we changed backup compression to 0, the old media header is preserved which
has it as 1, and the backup goes as compressed
restore headeronly from DISK = N'E:\testbackup.bak'

Une autre limitation est que les sauvegardes compressées ne peuvent pas coexister avec les sauvegardes
NT :

-- Take an NT Backup
-- You can verify the backup Header now, see it is not a SQL backup
restore headeronly from DISK = N'E:\testbackup.bak'
-- backup to the same media set with INIT and compression and you get the error message
BACKUP DATABASE test TO TAPE = N'\\.\Tape0' WITH INIT, COMPRESSION,
NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10
GO
Après avoir exécuté le script sql, vous pouvez recevoir le message d’erreur 3098 et 3013 :
Back up to the same media set without initializing and NO compression.

-- backup to the same media set without initializing and NO compression and the backups ( NT and non-
compressed backup) can co-exist
BACKUP DATABASE test TO TAPE = N'\\.\Tape0'
WITH NAME = N'testbackup-Full Database Backup', SKIP,NOUNLOAD, STATS = 10
GO
-- You can verify the backup Header now,see the SQL and the NT backup
Restore headeronly from tape = N'\\.\Tape0'
-- Forcing a Compressed backup on a tape with an NT backup results in the error below
BACKUP DATABASE test TO TAPE = N'\\.\Tape0' with compression,
NAME = N'testbackup1 Full Database Backup', SKIP,NOUNLOAD, STATS = 10
GO

Après avoir exécuté le script sql, vous pouvez recevoir le message d’erreur 3098 et 3013 :
Message d’erreur 3098 et 3013
Message d’erreur 3098

Msg 3098, Niveau 16, État 2, Ligne 1


La sauvegarde ne peut pas être effectuée car « COMPRESSION » a été demandée après la mise en
forme du média avec une structure incompatible. Pour l’appendre à ce jeu multimédia, omettez «
COMPRESSION » ou spécifiez « NO_COMPRESSION ». Vous pouvez également créer un nouvel
ensemble multimédia à l’aide de WITH FORMAT dans votre instruction BACKUP. Si vous utilisez WITH
FORMAT sur un jeu multimédia existant, tous ses jeux de sauvegarde seront remplacés.

Message d’erreur 3013

Msg 3013, Niveau 16, État 1, Ligne 1


BACKUP DATABASE se termine anormalement.
Configuration des autorisations pour accéder aux
données distantes à partir d’une source de données
OLEDB dans SQL Server
14/08/2021 • 5 minutes to read

Cet article explique comment désactiver les requêtes ad hoc qui utilisent la ou les fonctionnalités dans
OPENROWSET OPENDATASOURCE SQL Server.

Version du produit d’origine : SQL Server


Numéro de la ko d’origine : 327489

Résumé
Vous pouvez utiliser ou des instructions dans un serveur SQL comme méthode ad hoc pour connecter et
accéder aux données à partir d’un fournisseur OLEDB distant, y compris une instance SQL Server OPENROWSET
OPENDATASOURCE distante. Ces instructions peuvent être utilisées pour accéder aux données distantes à partir de
sources de données OLE DB uniquement lorsque l’option de RegistreDisallowAdhocAccess est explicitement
définie sur 0 pour le fournisseur spécifié et que l’option de configuration avancée des requêtes distribuées Ad
Hoc est activée. Lorsque ces options ne sont pas définies, le comportement par défaut n’autorise pas l’accès ad
hoc.
Cet article fournit des détails supplémentaires sur la configuration de DisallowAdhocAccess via les
paramètres du Registre, ainsi que sur SQL Server Management Studio et le comportement par défaut.

Désactiver les instructions Transact-SQL


NOTE
Accès ad hoc aux sources de données OLE BD distantes à l’aide et désactivé par défaut et aucune OPENROWSET
OPENDATASOURCE configuration supplémentaire n’est nécessaire. Vous devez utiliser les procédures ci-dessous
uniquement si cet accès à distance a été explicitement activé.

Vous pouvez désactiver les instructions Transact-SQL qui utilisent des chaînes de connexion ad hoc avec des
fournisseurs OLE DB spécifiques dans les fonctions et les fonctions à l’aide de l’une des procédures ci-dessous
OPENROWSET OPENDATASOURCE :

Spécifier DisallowAdHocAccess la propriété du fournisseur dans SQL Server Management Studio (SSMS)
1. Ouvrez SSMS et développez fournisseurs sous Serveurs liés
2. Cliquez pour sélectionner le fournisseur OLE DB que vous souhaitez utiliser, puis cliquez sur le bouton
Options du fournisseur.
3. Faites défiler vers le bas et sélectionnez la case à cocher Disallow adhoc access property et cliquez sur
OK .
Modifiez manuellement le Registre et ajoutez la DisallowAdHocAccess valeur.
NOTE
Les deux illustrations ne sont que des exemples de la façon dont vous pouvez modifier le fournisseur OLE DB pour ODBC
et pour SQL Server fournisseur OLE DB. Si vous souhaitez utiliser un autre fournisseur OLE DB, vous devez modifier
l’entrée de ce fournisseur.

IMPORTANT
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des
problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces
étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le
restaurer en cas de problème. Pour plus d’informations sur la façon de back up et restore the registry, voir How to back
up and restore the registry in Windows.

Spécifier la propriété DisallowAdHocAccess lorsque vous créez un


serveur lié
Lorsque vous créez un serveur lié sur un ordinateur qui exécute SQL Server, vous pouvez spécifier la propriété
du fournisseur DisallowAdHocAccess OLE DB. Pour cela, procédez comme suit :
1. Ouvrez SQL Server Entreprise, puis cliquez pour sélectionner le dossier Sécurité du serveur en question.
2. Cliquez avec le bouton droit sur l’entrée Serveurs liés, puis cliquez sur Nouveau serveur lié.
3. Cliquez pour sélectionner le fournisseur OLE DB que vous souhaitez utiliser, puis cliquez sur le bouton
Options du fournisseur.
4. Faites défiler l’écran vers le bas et cochez la case Disallow adhoc access property (Ne pas suivre la
propriété d’accès). Continuez à terminer la création de votre entrée de serveur lié.

Modifier manuellement le Registre et ajouter la valeur


DisallowAdHocAccess
Une fois qu’un serveur lié est enregistré, la propriété DisallowAdHocAccess ne peut être définie que par le biais
d’un paramètre de Registre.

NOTE
Les deux illustrations ne sont que des exemples de la façon dont vous pouvez modifier le fournisseur OLE DB pour ODBC
et pour SQL Server fournisseur OLE DB. Si vous souhaitez utiliser un autre fournisseur OLE DB, vous devez modifier
l’entrée de ce fournisseur.

IMPORTANT
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des
problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces
étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le
restaurer en cas de problème. Pour plus d’informations sur la façon de la back up et de la restauration du Registre, cliquez
sur le numéro d’article suivant pour afficher l’article de la Base de connaissances Microsoft : 322756 How to back up and
restore the Registry in Windows

Ajouter la valeur DisallowAdHocAccess


Pour ajouter la DisallowAdHocAccess valeur, suivez les étapes suivantes :
1. Démarrez l’Éditeur du Registre.
2. Recherchez et cliquez sur la clé dans le Registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLSer ver\Providers<ProviderName>
Exemple
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\MSDASQL

3. Dans le menu Edition, cliquez sur Ajouter une valeur, puis ajoutez cette valeur de Registre :

Value name: DisallowAdHocAccess


Data type: REG_DWORD
Radix: Hex
Value data: 1

4. Quittez l’Éditeur du Registre.

Activer l’accès à distance ad hoc


Après avoir garanti que l’option de configuration avancée des requêtes distribuées Ad Hoc est activée, vous
devez définir explicitement l’option de Registre sur 0 pour DisallowAdhocAccess le fournisseur spécifié.
Pour modifier une valeur DisallowAdHocAccess existante, suivez les étapes suivantes :
1. Démarrez l’Éditeur du Registre.
2. Recherchez, puis cliquez sur la valeur DisallowAdHocAccess sous la clé dans le Registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLSer ver\Providers<ProviderName>
Exemple
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\Microsoft.ACE.OLEDB.12.0

3. Dans le menu Modifier, cliquez sur DWORD , tapez 1, puis cliquez sur OK .
4. Quittez l’Éditeur du Registre. Pour une instance nommée, la clé de Registre est différente
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<Instance Name>\Providers\<ProviderName> :

NOTE
Une modification de la valeur de DisallowAdHocAscess 1 à 0 ne nécessite pas de redémarrage du service SQL, alors
qu’une modification de 0 à 1 nécessite un redémarrage du service SQL pour que la modification prise en vigueur soit
effective.
Avec la propriété définie sur 1, SQL Server n’autorise pas l’accès ad hoc via le fournisseur OLE DB spécifié et les
fonctions par rapport à DisallowAdHocAccess OPENROWSET ces OPENDATASOURCE fonctions. Si vous essayez
d’appeler ces fonctions dans des requêtes ad hoc, vous recevez un message d’erreur semblable à ce qui suit :

Serveur : Msg 7415, Niveau 16, État 1, Accès ad hoc à la ligne 1 au fournisseur OLE DB «
Microsoft.Jet.OLEDB.4.0 » a été refusé. Vous devez accéder à ce fournisseur via un serveur lié.

En d’autres termes, avec la propriété définie sur 1 pour un fournisseur OLE DB spécifique, vous devez utiliser
une configuration de serveur lié prédéfinë pour le fournisseur DisallowAdHocAccess OLE DB spécifique. Vous ne
pouvez plus transmettre une chaîne de connexion ad hoc qui fait référence à ce fournisseur à la OPENROWSET ou
à la OPENDATASOURCE fonction.
Voir aussi
OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL)
OleDbProviderSettings.DisallowAdHocAccess, propriété
Considérations sur les paramètres derow et de
autoshrink dans SQL Server
12/08/2021 • 8 minutes to read

Version du produit d’origine : SQL Server


Numéro de la ko d’origine : 315512

Résumé
Les paramètres derow et de autoshrink par défaut sont appropriés sur de nombreux SQL Server système.
Toutefois, dans certains environnements, vous pouvez être dans l’devoir d’ajuster les paramètres derow
automatique et d’autoshrink. Cet article fournit des informations d’arrière-plan pour vous aider à choisir ces
paramètres pour votre environnement.

Plus d’informations
Voici quelques éléments à prendre en compte si vous décidez d’affiner vos paramètres derow automatique et
d’autoshrink.

Comment configurer les paramètres


1. Vous pouvez configurer ou modifier les paramètres derow et de auto-hrink à l’aide de l’une des façons
suivantes :
SQL Server Management Studio
Instruction ALTER DATABASE
Utiliser les options File et Filegroup pour modifier les paramètres de croissance automatique
Utilisez les options SET pour configurer AUTO_SHRINK paramètres.

NOTE
Pour plus d’informations sur la définition de ces paramètres au niveau du fichier de base de données, voir Ajouter
des données ou des fichiers journaux à une base de données.

Vous pouvez également configurer l’option derow automatique lorsque vous créez une base de données.
Pour afficher les paramètres actuels, exécutez la commande Transact-SQL suivante :

sp_helpdb [ [ @dbname= ] 'name' ]

2. N’oubliez pas que les paramètres derow automatique sont par fichier. Par conséquent, vous devez les
définir à au moins deux endroits pour chaque base de données (un pour le fichier de données principal et
un pour le fichier journal principal). Si vous avez plusieurs données et/ou fichiers journaux, vous devez
définir les options sur chaque fichier. En fonction de votre environnement, vous pouvez terminer avec
différents paramètres pour chaque fichier de base de données.

Considérations à prendre en compte AUTO_SHRINK


AUTO_SHRINK est une option de base de données dans SQL Server. Lorsque vous activez cette option pour une
base de données, cette base de données peut être réduit par une tâche en arrière-plan. Cette tâche en arrière-
plan évalue toutes les bases de données qui répondent aux critères de réduction et de réduction des données ou
des fichiers journaux.
Vous devez évaluer attentivement la définition de cette option pour les bases de données dans SQL Server
instance. Les opérations de croissance et de réduction fréquentes peuvent entraîner divers problèmes de
performances.
1. Si plusieurs bases de données subissent des opérations de réduction et de croissance fréquentes, cela
entraîne facilement une fragmentation au niveau du système de fichiers. Cela peut avoir un impact grave
sur les performances. Cela est vrai que vous utilisez les paramètres automatiques ou que vous
augmentez et réduit manuellement les fichiers fréquemment
2. Une fois AUTO_SHRINK réduit les données ou le fichier journal, une opération DML ou DDL ultérieure
peut ralentir considérablement si l’espace est nécessaire et que les fichiers doivent augmenter.
3. La AUTO_SHRINK en arrière-plan peut prendre des ressources lorsqu’il existe de nombreuses bases de
données qui doivent être réduit.
4. La AUTO_SHRINK en arrière-plan doit acquérir des verrous et d’autres synchronisations qui peuvent être
en conflit avec d’autres activités d’application normales.
Envisagez de définir les bases de données à une taille requise et de les pré-agrandir. Laissez l’espace inutilisé
dans les fichiers de base de données si vous pensez que les modèles d’utilisation de l’application en auront
besoin à nouveau. Cela peut empêcher la réduction et la croissance fréquentes des fichiers de base de données.

Considérations pour AUTOGROW


Si vous exécutez une transaction qui nécessite plus d’espace de journal qu’il n’est disponible et que vous
avez désactivé l’option de croissance automatique pour le journal des transactions de cette base de
données, le temps nécessaire à la fin de la transaction inclut le temps nécessaire à l’expansion du journal
des transactions par le montant configuré. Si l’incrémentation de croissance est importante ou qu’un
autre facteur la prend beaucoup de temps, la requête dans laquelle vous ouvrez la transaction peut
échouer en raison d’une erreur de délai d’accès. Le même type de problème peut résulter d’unerow
automatique de la partie données de votre base de données.
Si vous exécutez une transaction importante nécessitant l’expansion du journal, les autres transactions
nécessitant une écriture dans le journal des transactions devront également attendre la fin de l’opération
de croissance.
Si vos fichiers journaux contiennent de nombreuses croissances, il se peut que le nombre de fichiers
journaux virtuels (VLF) soit trop élevé. Cela peut entraîner des problèmes de performances liés aux
opérations de démarrage/en ligne de base de données, à la réplication, à la mise en miroir et à la capture
des données de modification (CAS). En outre, cela peut parfois entraîner des problèmes de performances
avec les modifications de données.
NOTE
Si vous combinez les options derow automatique et d’autoshrink, vous risquez de créer une surcharge inutile. Assurez-
vous que les seuils qui déclenchent les opérations de croissance et de réduction n’entraînent pas de changements
fréquents de taille. Par exemple, vous pouvez exécuter une transaction qui entraîne une croissance du journal des
transactions de 100 Mo au moment de sa validation. Un certain temps après cela, l’autoshrink démarre et réduit le journal
des transactions de 100 Mo. Ensuite, vous exécutez la même transaction et le journal des transactions augmente de 100
Mo à nouveau. Dans cet exemple, vous créez une surcharge inutile et potentiellement une fragmentation du fichier
journal, qui peut avoir une incidence négative sur les performances.

Si vous augmentez votre base de données par petits incréments, ou si vous la développez puis la réduit, vous
pouvez vous retrouver avec une fragmentation de disque. La fragmentation du disque peut entraîner des
problèmes de performances dans certaines circonstances. Un scénario d’incréments de petite croissance peut
également réduire les performances de votre système.
Dans SQL Server, vous pouvez activer l’initialisation de fichier instantané. L’initialisation instantanée des fichiers
accélère les allocations de fichiers uniquement pour les fichiers de données. L’initialisation de fichier instantané
ne s’applique pas aux fichiers journaux. Pour plus d’informations, voir Initialisation de fichier instantané de base
de données.

Meilleures pratiques pour larow automatique et l’autoshrink


Pour un système de production géré, vous devez considérer la croissance automatique comme une
simple mesure d’urgence en cas de croissance inattendue. Ne gérez pas la croissance de vos données et
journaux quotidiennement avec la croissance automatique.
Vous pouvez utiliser des alertes ou des programmes de surveillance pour surveiller la taille des fichiers et
développer les fichiers de manière proactive. Cela vous aide à éviter la fragmentation et vous permet de
déplacer ces activités de maintenance vers des heures creuses.
La réduction automatique et la réduction automatique doivent être évaluées avec soin par un
administrateur de base de données formé ; Ils ne doivent pas être non ingérés.
Votre incrémentation de larow automatique doit être suffisamment grande pour éviter les pénalités de
performances répertoriées dans la section précédente. La valeur exacte à utiliser dans votre paramètre de
configuration et le choix entre une croissance en pourcentage et une croissance spécifique de la taille mo
dépendent de nombreux facteurs dans votre environnement. Une règle générale que vous pouvez utiliser
pour les tests consiste à définir votre paramètre derow automatique sur environ 1 à 8 la taille du fichier.
Activer le paramètre de chaque fichier pour empêcher qu’un fichier ne croît à un point où il utilise
<MAXSIZE> tout l’espace disque disponible.
Maintenez la taille de vos transactions aussi petite que possible pour empêcher la croissance non
planifiée des fichiers.

Pourquoi dois-je me soucier de l’espace disque si les paramètres de


taille sont automatiquement contrôlés ?
Le paramètre de croissance automatique ne peut pas augmenter la taille de la base de données au-delà
des limites de l’espace disque disponible sur les lecteurs pour lesquels les fichiers sont définis. Par
conséquent, si vous vous appuyez sur la fonctionnalité de chiffrement automatique pour dimensioner vos
bases de données, vous devez toujours vérifier indépendamment l’espace disque disponible. Le
paramètre derow automatique est également limité par le paramètre MAXSIZE que vous sélectionnez
pour chaque fichier. Pour réduire le risque de manque d’espace, vous pouvez surveiller le compteur
Performance Monitor SQL Server: Databases Object: Data File(s) Size (KB) et configurer une alerte pour le
moment où la base de données atteint une certaine taille.
La croissance non planifiée des données ou des fichiers journaux peut prendre de l’espace que d’autres
applications s’attendent à être disponibles et peut entraîner des problèmes pour ces autres applications.
L’incrémentation de croissance de votre journal des transactions doit être suffisamment importante pour
rester en avance sur les besoins de vos unités de transaction. Même si la croissance automatique est
allumée, vous pouvez recevoir un message vous messageant que le journal des transactions est plein, s’il
ne peut pas devenir suffisamment rapide pour répondre aux besoins de votre requête.
SQL Server ne teste pas constamment les bases de données qui ont atteint le seuil configuré pour
l’autoshrink. Au lieu de cela, il examine les bases de données disponibles et trouve la première qui est
configurée pour l’autoshrink. Elle vérifie cette base de données et la réduit si nécessaire. Ensuite, il attend
plusieurs minutes avant de vérifier la base de données suivante configurée pour l’autoshrink. En d’autres
termes, SQL Server ne vérifie pas toutes les bases de données en même temps et les réduit toutes en
même temps. Il fonctionne dans les bases de données de manière round robin pour échelonner la charge
sur une période de temps. Par conséquent, en fonction du nombre de bases de données sur une instance
de SQL Server spécifique que vous avez configurée pour la réduction automatique, la réduction de la
base de données peut prendre plusieurs heures à partir du moment où la base de données atteint le
seuil.

Références
Résoudre les problèmes d’un journal des transactions complet (erreur SQL Server 9002)
Initialisation de fichier instantané de base de données
SQL Server Guide de gestion et d’architecture des journaux de transactions
Gérer la taille du fichier journal des transactions
Considérations lors de l’utilisation du moteur SQL
Server Full-Text de recherche pour la langue
japonaise
13/08/2021 • 5 minutes to read

Cet article décrit les considérations qui s’appliquent lorsque vous utilisez le moteur SQL Server Full-Text
recherche pour le japonais.
S’applique à : SQL Server
Numéro de la ko d’origine : 2252955

Introduction
En japonais, une expression peut être constituée de deux ou plusieurs mots sans espace entre ces mots. Dans
Microsoft SQL Server, lorsque vous utilisez le moteur de recherche SQL Server Full-Text pour effectuer une
recherche de préfixe pour une expression japonaise, le moteur de recherche Full-Text ne considère pas
l’expression comme un terme préfixe. Au lieu de cela, le moteur Full-Text recherche considère l’expression
comme des termes de mot. En effet, un mot est défini comme une chaîne de caractères sans espaces ni
ponctuation. En outre, le moteur de recherche fonctionne uniquement en mode de correspondance de préfixe.
Le moteur de recherche ne fonctionne pas en mode suffixe correspondant.

Plus d’informations
Par exemple, vous créez un tableau et insérez des expressions japonaises en exécutant les instructions suivantes
dans SQL Server :

CREATE TABLE test(c1 int PRIMARY KEY,c2 nvarchar(255))

INSERT test VALUES(1,N'添付テスト')


INSERT test VALUES(2,N'Fw: テスト')
INSERT test VALUES(3,N'KK-Information:テスト')
INSERT test VALUES(4,N'[Q] ポリシーテスト')
INSERT test VALUES(5,N'KK-Information:タイトルフィルタテスト2')
INSERT test VALUES(6,N'テスト')
INSERT test VALUES(7,N'フィルタテスト3')
INSERT test VALUES(8,N'テストフィルタ1')
INSERT test VALUES(9,N'RE: テストメール ')
INSERT test VALUES(10,N'テストメール ')
INSERT test VALUES(11,N'White Listテスト')
INSERT test VALUES(12,N'フィルタリングテスト')

CREATE FULLTEXT CATALOG test AS DEFAULT;


GO

CREATE FULLTEXT INDEX ON test(c2) KEY INDEX PK__<IndexName>;


GO

Ensuite, vous exécutez les trois requêtes suivantes :


Requête 1
SELECT * FROM test WHERE CONTAINS(c2, N'テスト')

Le résultat de la requête 1 est le suivant :

c1c2
2Fw : テスト
3KK-Information :テスト
6テスト

Requête 2

SELECT * FROM test WHERE CONTAINS(c2, 'テスト*')

Le résultat de la requête 2 est le suivant :

c1c2
2 Fw : テスト
3 KK-Information :テスト
6 テスト
8 テストフィルタ1
9 RE : テストメール
10 テストメール

Requête 3

SELECT * FROM test WHERE CONTAINS(c2, '*テスト*')

Le résultat de la requête 3 est le suivant :

c1c2
2 Fw : テスト
3 KK-Information :テスト
6 テスト
8 テストフィルタ1
9 RE : テストメール
10 テストメール

À partir des résultats des requêtes, vous pouvez voir que le résultat de la requête 2 est le même que le
résultat de la requête 3, car la requête Full-Text ne fonctionne pas en mode suffixe correspondant. En
outre, テスト est un jeton qui diffère de ou ポリシーテスト de dans les テスト correspondances.
Pour tokeniser des expressions, vous devez utiliser un décomposeur de mots pour la famille de langues.
Les coupureurs de travail utilisent des espaces et d’autres signes pour reconnaître les expressions. Par
conséquent, certaines expressions ne peuvent pas être reconnues par l’outil d’coupure de mots et ne
peuvent pas être recherchés à l’aide Full-Text moteur de recherche en japonais. Pour plus d’informations
sur les coupureurs de mots, consultez la rubrique Desserreurs de mots et des rechercheurs de mots dans
la section Référence.
La meilleure pratique pour utiliser le moteur de recherche Full-Text en japonais consiste à tester les
expressions pour voir si les expressions sont affectées par la limitation. Si une expression se compose de
mots sans espaces, vous ne pouvez pas utiliser la fonctionnalité Full-Text pour rechercher l’expression. Au
lieu de cela, vous pouvez utiliser le mot clé LIKE avec des caractères génériques. Toutefois, les
performances de l’opération sont inférieures à celles de la like recherche Full-Text recherche. Vous
devez tenir compte de l’impact sur les performances de votre application.
Voici quelques exemples de requêtes du mot clé pour like rechercher des expressions.
Requête 4

SELECT * FROM test WHERE c2 like 'テスト%'

Voici le résultat :

c1c2
6 テスト
8 テストフィルタ1
10 テストメール

Requête 5

SELECT * FROM test WHERE c2 like '%テスト%'

Voici le résultat :

c1c2
1 添付テスト
2 Fw : テスト
3 KK-Information :テスト
4 [Q] ポリシーテスト
5 KK-Information :タイトルフィルタテスト2
6 テスト
7 « « 700000000000000000000000000 テスト
8 « « 8 « 800000000000000000000 テスト
9 RE テスト :
10 « 1000000000000000000000 テスト
11 テスト
12 フィルタリングテスト

NOTE
Si vous utilisez le moteur de recherche Full-Text dans SQL Server, vous trouverez plus d’informations sur le contenu d’un
index de texte intégral à l’aide de la requête suivante :

SELECT * FROM sys.dm_fts_index_keywords(db_id('test'), object_id('test'))


GO

Voici le résultat :

mot clé display_term column_id document_count


0x00660077 fw 2 1
0x0069006E0066006F0072006D006100740069006F006E informations 2 2
0x006B006B kk 2
0x006C00690073007430C630B930C8 list
0x00770068006900740065 blanc 2 1
0x30BF30A430C830EB30D530A330EB30BF30C630B930C80032 2 1
0x30C630B930C8 2 3
0x30C630B930C830D530A330EB30BF0031 2 1
0x30C630B930C830E130FC30EB 2 2
0x30D530A330EB30BF30C630B930C80033 2 1
0x30D530A330EB30BF30EA30F330B030C630B930C8 2 1
0x30DD30EA30B730FC30C630B930C8 ポ00000000000
0x6DFB4ED830C630B930C8 添付 ' 2 1
0xFF FIN DU FICHIER 2 12
(14 lignes affectées)

Dans l’exemple de résultat, seules trois lignes contiennent le mot テスト . » Le Full-Text de recherche traite le
mot テスト « « comme un テストメール jeton différent du mot ». Pour plus d’informations sur le moteur SQL
Server Full-Text recherche, visitez les sites web Microsoft suivants :
Recherche en texte intégral
Formulaires de conditions de requête pris en charge (recherche en texte intégral)
Configurer & les & des recherche pour la recherche (SQL Server)
Classement des résultats de la requête de recherche (recherche en texte intégral)
CONTAINS (Transact-SQL)
sys.dm_fts_index_keywords (Transact-SQL)
SQL Server Équipe de conseil client
SQL Server service se crashe lorsque vous exécutez
une requête de serveur lié Oracle
12/08/2021 • 2 minutes to read

Cet article vous aide à résoudre un problème qui peut se produire lorsque vous exécutez une requête de
serveur lié Oracle.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2295405

Symptôme
Prenons l’exemple du scénario suivant :
Vous installez SQL Server sur un ordinateur qui exécute Windows Server.
Vous créez un serveur lié pour une base de données Oracle.
Vous activez l’option Autoriser le traitement dans la boîte de dialogue Options pour le fournisseur de
serveur lié.

NOTE
Par défaut, l’option n’est pas sélectionnée.

Vous exécutez une requête de serveur lié à l’aide du fournisseur OraOLEDB.


Dans ce scénario, le service SQL Server se crashe et aucun résultat n’est renvoyé pour la requête. En outre, vous
pouvez rencontrer les problèmes suivants :
Le message d’erreur suivant s’Windows journal des événements système :

Le SQL Server service (MSSQLSERVER) s’est terminé de manière inattendue. Il a effectué cette ou ces
1 fois.

Un fichier minidump du processus SQL Server est généré avec une altération du tas et vous recevez un
message d’exception semblable à ce qui suit :

Dans minidump.mdmp, instruction d’assembly sur ntdll! RtlReportCriticalFailure+62 dans


C:\Windows\System32\ntdll.dll de Microsoft Corporation a provoqué une exception inconnue
(0xc0000374) sur le thread 235
Ou parfois, une autre exception peut se présenter dans lelog des erreurs :
SqlDumpExceptionHandler : Le processus 74 a généré l’exception fatal c0000005
EXCEPTION_ACCESS_VIOLATION. SQL Server ce processus est mis fin.

La pile du fichier minidump contient des modules tiers à l’intérieur Sqlserver.exe processus. Par exemple,
le fichier minidump contient les informations suivantes dans les modules Oracle :
OraOLEDButl11
OraOLEDBrst11
OraOLEDBrst10

Full Call Stack: Function Arg 1 Arg 2 Arg 3 Arg 4

ntdll!RtlReportCriticalFailure+62 00000000`00000002 00000000`00000023 00000000`403cc8a2


00000000`00000003
ntdll!RtlpReportHeapFailure+26 00000000`403c95f0 00000000`403d7a78 00000000`403d7ab0
00000000`4d200e30
ntdll!RtlpHeapHandleError+12 00000000`04180000 00000000`00000000 00000000`00000000 00000000`00000000
ntdll!RtlpLogHeapFailure+a4 00000000`403d7b40 00000000`04180000 00000000`403d7b50 00000000`00000008
ntdll!RtlFreeHeap+1aa8f 00000000`00000020 00000000`403cd850 00000000`00000001 00000000`403d0024
ole32!CoTaskMemFree+36 00000000`403d6b00 00000000`00000001 00000000`4d200e30 00000000`00000024
OraOLEDButl11+1a5f 00000000`00000001 00000000`4d200e30 00000000`00000024 00000000`403d7ab8
0x403d6b00 00000000`4d200e30 00000000`00000024 00000000`403d7ab8 00000000`24492843
0x00000001 00000000`00000024 00000000`403d7ab8 00000000`24492843 00000000`403b8c00
0x4d200e30 00000000`403d7ab8 00000000`24492843 00000000`403b8c00 00000000`403c95f0
0x00000024 00000000`24492843 00000000`403b8c00 00000000`403c95f0 00000000`403ca610
0x403d7ab8 00000000`403b8c00 00000000`403c95f0 00000000`403ca610 00000000`403ca610
OraOLEDBrst11+12843 00000000`403c95f0 00000000`403ca610 00000000`403ca610 00000000`403c95f0
0x403b8c00 00000000`403ca610 00000000`403ca610 00000000`403c95f0 00000000`244928b1
0x403c95f0 00000000`403ca610 00000000`403c95f0 00000000`244928b1 00000000`403d7ab8
0x403ca610 00000000`403c95f0 00000000`244928b1 00000000`403d7ab8 00000000`403c95f0
0x403ca610 00000000`244928b1 00000000`403d7ab8 00000000`403c95f0 00000000`4966a260
0x403c95f0 00000000`403d7ab8 00000000`403c95f0 00000000`4966a260 00000000`05cd21e0
OraOLEDBrst11+128b1 00000000`403c95f0 00000000`4966a260 00000000`05cd21e0 00000000`00000000
0x403d7ab8 00000000`4966a260 00000000`05cd21e0 00000000`00000000 00000000`2449ca03
0x403c95f0 00000000`05cd21e0 00000000`00000000 00000000`2449ca03 00000000`4d200e30
0x4966a260 00000000`00000000 00000000`2449ca03 00000000`4d200e30 00000000`00000001
0x05cd21e0 00000000`2449ca03 00000000`4d200e30 00000000`00000001 00000000`05cd21e0

Exclusion de responsabilité de tiers


Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de
Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces
produits.

Cause
Ce problème se produit parce que les caractères spéciaux existent dans la requête sur -- le serveur lié Oracle.
Ces caractères sont utilisés comme symbole de commentaire.
Le processus SQL Server se crashe car le fournisseur de serveur lié tiers est chargé dans le processus SQL
Server et modifie de manière incorrecte la mémoire du tas qui n’y appartient pas. Si les fonctions heap à
l’intérieur d’un processus sont instables, pour la protection contre l’altération des données, le processus est
automatiquement arrêté par le système d’exploitation. Si le fournisseur de serveur lié tiers est activé avec
l’option Autoriser l’inprocessage, le processus SQL Server se crashe lorsque ce serveur lié tiers subit le
problème décrit.

Solution de contournement
Pour contourner ce problème, appliquez l'une des méthodes suivantes :
Supprimez le symbole de commentaires.
Remplacez le symbole de commentaires par le symbole commentaires : /* */ .

Plus d’informations
Contactez le fournisseur tiers pour obtenir des informations et des correctifs. Pour la dernière version du
fournisseur OLEDB, voir téléchargements 64 bitsdes composants d’accès aux données Oracle (ODAC).
L’autorisation Créer une base de données est
consignée dans le journal d’audit lorsque vous
exécutez RESTORE VERIFYONLY
12/08/2021 • 2 minutes to read

Cet article fournit plus d’informations sur la raison pour laquelle un événement peut être journalisé lorsque
l’audit du serveur est spécifié sur CREATE DATABASE SQL Server instance.
Version du produit d’origine : Microsoft SQL Server 2014, SQL Server 2016, SQL Server 2017 sur Linux, SQL
Server 2017 sur Windows
Numéro de la ko d’origine : 4502458

Symptômes
Supposons que vous avez installé un audit SQL Server afin d’avoir une spécification d’audit de serveur qui
utilise DATABASE_CHANGE_GROUP l’événement. Lorsqu’un utilisateur s’exécute sur un fichier de sauvegarde de base
de données, l’autorisation est enregistrée dans RESTORE VERIFYONLY CREATE DATABASE le journal d’audit.

Cause
CREATE DATABASE L’autorisation est requise pour s’exécuter. RESTORE VERIFYONLY Lorsque cette autorisation est
vérifiée, un événement correspondant est consigné dans le journal d’audit pour la DATABASE_CHANGE_GROUP
spécification d’audit.

Solution de contournement
Pour contourner ce problème, utilisez une requête telle que la suivante pour filtrer les enregistrements du
journal d’audit liés à l’exécution RESTORE VERIFYONLY :

select * from fn_get_audit_file('C:\path\to\file.sqlaudit', default, default) where statement NOT LIKE


'%RESTORE VERIFYONLY%'

Plus d’informations
RESTORE Statements - VERIFYONLY (Transact-SQL)
GRANT Database Permissions (Transact-SQL).
SQL Server Moteur de base de
données’entrée/sortie requises
13/08/2021 • 4 minutes to read

Cet article décrit les conditions requises SQL Server Moteur de base de données’entrée/sortie.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 967576

Introduction
SQL Server systèmes doivent prendre en charge la distribution garantie sur des supports stables, comme
indiqué dans les documents de téléchargement suivants :
SQL Server Conditions requises pour le programme de fiabilité des entrées/des personnes
SQL Server Exigences de révision du programme de fiabilité des entrées et des entrées (IO)

NOTE
Les deux documents ci-dessus s’appliquent également SQL Server 2014. Cette exigence inclut, sans s’y limiter, les
conditions suivantes :

Windows certification de logo


Ordre d’écriture
Stabilité de la mise en cache
Aucune réécriture de données
Les systèmes qui répondent à ces exigences SQL Server stockage de base de données. Les systèmes n’ont pas
besoin d’être répertoriés sur le site SQL Server solutions de stockage, mais ils doivent garantir que les
conditions requises sont remplies.
SQL Server maintient l’atomicité, la cohérence, l’isolation et la propriété de du dualité (UMA) à l’aide du
protocole Write-Ahead Logging (WAL).

WARNING
L’utilisation incorrecte de SQL Server avec une solution testée incorrectement peut entraîner une perte de données, y
compris la perte totale de base de données.

Assistance technique
Microsoft fournit une prise en charge complète des applications SQL Server et SQL Server basées sur des
applications. Toutefois, les problèmes qui ont ou sont dus à la solution d’O/S sont renvoyés au fabricant de
l’appareil. Les symptômes peuvent inclure, sans s’y limiter, les suivants :
Base de données endommagée
Altération de la sauvegarde
Perte de données inattendue
Transactions manquantes
Variations de performances d’I/S inattendues
Microsoft recommande l’utilisation de produits Windows logo certifiés. Pour déterminer si votre solution prend
en charge la « distribution garantie sur un support stable », comme indiqué dans le SQL Server Always-On,
consultez votre fournisseur. Nous vous recommandons également de contacter votre fournisseur pour vérifier
que vous avez correctement déployé et configuré la solution pour une utilisation de base de données
transactionnelle.
Il est courant pour un professionnel du Support Microsoft de vous demander de désactiver les travaux non
essentiels et de désactiver ou de supprimer des composants tiers, de déplacer des fichiers de base de données,
de désinstaller des pilotes et d’effectuer des actions similaires. Nous essayons toujours de réduire l’étendue du
problème pendant que nous travaillons à l’identifier. Une fois qu’un problème est identifié comme non lié aux
travaux ou produits tiers, ces travaux ou produits tiers peuvent être réintroduits en production.
Pour plus d’informations, consultez l’article suivant :
Microsoft ne certifie pas que les produits tiers fonctionneront avec Microsoft SQL Server
Vue d’ensemble de la stratégie de prise en charge des solutions logicielles de stockage tierces Microsoft

Plus d’informations
Le tableau suivant fournit des liens vers des informations supplémentaires relatives à des configurations
d’opérations d’opérations d’information spécifiques.

SQ L SERVER 2000 I/ O B A SIC S


SQ L SERVER P RIN C IP ES DE B A SE DES O / S, C H A P IT RE
2
ÉC RIT URE DE PA GES
P O IN T S DE C O N T RÔ L E DE B A SE DE DO N N ÉES ( SQ L
SERVER)
SQ L SERVER I/ O IN T ERN A L S

WAL Journal des transactions d’écriture avant


PROPRIÉTÉS DE LAS (atomicité, cohérence, isolation
et dulité)
Description des algorithmes de journalisation et de
stockage des données qui étendent la fiabilité des
données SQL Server

Fonctionnalités du système de fichiers SQL Server bases de données non pris en charge sur
les volumes compressés (à l’exception des fichiers en
lecture seule 2005)
Diminution des performances dans certaines
fonctionnalités de SQL Server lorsque vous utilisez
EFS pour chiffrer des fichiers de base de données

Mise en cache des I/S Informations sur l’utilisation de caches de disque avec
des SQL Server que chaque administrateur de base
de données doit connaître
Description de la mise en cache des contrôleurs de
disque dans SQL Server
SQ L SERVER 2000 I/ O B A SIC S
SQ L SERVER P RIN C IP ES DE B A SE DES O / S, C H A P IT RE
2
ÉC RIT URE DE PA GES
SQ L SERVER I/ O IN T ERN A L S P O IN T S DE C O N T RÔ L E DE B A SE DE DO N N ÉES ( SQ L
SERVER)

Disposition et conception physiques Conception des bases de données Stockage physique


Vue d’ensemble des bases de données partagées
évolutives

Tempdb Microsoft SQL Server Besoins en matière de sous-


système d’I/S pour la base de données tempdb
Working with tempdb in SQL Server 2005
Optimisation des performances tempdb
Recommandations pour réduire la contention
d’allocation dans SQL Server base de données
tempdb

Utilitaires Utilisation de l’utilitaire SQLIOSim pour simuler SQL


Server activité sur un sous-système de disque
Diskspd : outil de test de stockage robuste

Diagnostics Les I/S de disque asynchrone apparaissent comme


synchrones sur Windows
SQL Server diagnostics ajoutés pour détecter les
problèmes d’I/S non signalés dus à des lectures
obsolètes ou à des écritures perdues
Erreur MSSQLSERVER 823
Enregistrement pour l’analyse basée sur les
ressources de l’enregistreur Windows
Performance Recorder
Ressources Xperf :
Les diagnostics dans SQL Server détecter les
opérations d’entreprise bloquées et bloquées
Erreur MSSQLSERVER 823
Description des causes courantes de SQL Server
message d’erreur 844 ou message d’erreur 845

NAS (Network Attached Stockage) Description de la prise en charge des fichiers de base de
données réseau dans SQL Server

iSCSI Prise en charge SQL Server sur les composants de


technologie iSCSI
SQ L SERVER 2000 I/ O B A SIC S
SQ L SERVER P RIN C IP ES DE B A SE DES O / S, C H A P IT RE
2
ÉC RIT URE DE PA GES
SQ L SERVER I/ O IN T ERN A L S P O IN T S DE C O N T RÔ L E DE B A SE DE DO N N ÉES ( SQ L
SERVER)

Groupes de disponibilité AlwaysOn et de mise en miroir Conditions préalables, restrictions et


Recommandations pour les groupes de disponibilité
Always On
Conditions requises pour SQL Server la prise en
charge de la mise en miroir à distance des bases de
données utilisateur
Mise en miroir de bases de données :
Mise en miroir de bases de données SQL
Server 2005
Meilleures pratiques et considérations sur les
performances de la mise en miroir de bases
de données
Ces livres blancs s’appliquent également Microsoft SQL
Server 2008 et versions ultérieures de SQL Server.

Affinité des O/S INF : Comprendre comment définir l’SQL Server d’affinité
d’I/S
Tirets « - » ignorés dans la recherche avec des
requêtes SQL Full-Text et MSIDXS
12/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème qui se produit lorsque vous effectuez une recherche en texte
intégral sur des données de caractères SQL Server ou lorsque vous utilisez une requête distribuée SQL avec le
fournisseur Microsoft Index Server OLE DB (MSIDXS) et une recherche d’extension de préfixe pour un mot
composé qui contient un tiret (par exemple, XYZ-A*).
S’applique à : SQL Server
Numéro de la ko d’origine : 200043

Symptômes
Lors d’une recherche en texte intégral sur des données de caractères SQL Server ou lors de l’utilisation d’une
requête distribuée SQL avec le fournisseur Microsoft Index Server OLE DB (MSIDXS) et d’une recherche
d’extension de préfixe pour un mot composé qui contient un trait d’union (par exemple, « XYZ-A* ») les résultats
obtenus peuvent ne pas être comme prévu.

Cause
Une recherche en texte intégral considère un mot comme une chaîne de caractères sans espaces ni ponctuation.
L’occurrence d’un caractère non alphanumérique peut rompre un mot au cours d’une recherche. Étant donné
SQL Server recherche en texte intégral est un moteur basé sur le mot, la ponctuation n’est généralement pas
envisagée et est ignorée lors de la recherche dans l’index. Par conséquent, une clause comme celle qui
correspondrait à une ligne avec la valeur, l’échec de la recherche de CONTAINS
CONTAINS(testing, "computer-failure") mon ordinateur serait coûteux .

Solution de contournement
Pour contourner ce problème, essayez l’une des méthodes suivantes :
Utilisez uniquement des caractères alphanumériques lorsque vous utilisez les SQL Server’index de texte
intégral.
Lorsque le caractère non alphanumérique doit être utilisé dans les critères de recherche (principalement
le caractère tiret), utilisez la clause Transact-SQL au lieu des - LIKE FULLTEXT CONTAINS prédicats.

Plus d’informations
Microsoft SQL Server version 7.0 permet d’effectuer une requête en texte intégral sur les données de caractères
stockées dans SQL Server tables. Vous pouvez également utiliser une SQL distribuée avec le fournisseur
MSIDXS pour rechercher des données de système de fichiers. L’utilisation du tiret ( ) dans une recherche de
proximité n’est pas prise en charge - et peut donner des résultats inattendus.

Références
Pour plus d’informations SQL Server recherche en texte intégral, voir la SQL Server Books Online.
Pour plus d’informations sur l’utilisation de la clause CONTAINS avec le fournisseur MSIDXS (Microsoft
Index Server), voir la documentation du serveur d’index dans la documentation du pack d’options
Windows NT 4.0.
Défragmentation des lecteurs SQL Server base de
données
12/08/2021 • 5 minutes to read

Cet article fournit des conseils concernant la défragmentation des lecteurs de SQL Server base de données.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 3195161

Doit SQL Server disques défragmentés au niveau de la couche du


système d’exploitation
Cela dépend de l’état de fragmentation des lecteurs actuels. En règle générale, cela ne fait pas de mal et peut
vous aider, en supposant que vous suivez les précautions décrites dans la section Précautions lors de la
défragmentation de SQL Server base de données. Le seul point négatif est que vous devez arrêter SQL
Server à moins que l’outil de défragmentation ne prend en charge les fonctionnalités de données
transactionnelles. La bonne nouvelle est qu’après avoir exécuté la défragmentation, vous n’avez pas vraiment
besoin de le faire à nouveau, sauf si vous avez de nombreux fichiers autogrowth et autres qui se déplacent sur et
hors des disques. Assurez-vous de bien comprendre les stratégies de mise en cache en écriture que l’utilitaire
utilise. La mise en cache par un tel utilitaire peut impliquer un cache non alimenté par batterie, ce qui peut
enfreindre les exigences du protocole WAO.

Informations supplémentaires
Un défragmenteur de disque déplace tous les fichiers, y compris le fichier de base de données, dans des clusters
contigus sur un disque dur. Cela optimise et accélère l’accès aux fichiers. À l’exception du système d’exploitation
NT Windows, si vous ne défragmentez pas votre disque dur, le système d’exploitation peut avoir besoin
d’accéder à plusieurs emplacements physiques sur le disque pour récupérer le fichier de base de données, ce qui
ralentit l’accès aux fichiers.
Étant donné que l’accès aux données physiques est la partie la plus coûteuse d’une demande d’I/S, la
défragmentation peut offrir des gains de performances pour SQL Server et d’autres applications. Les blocs de
données liés au positionnement proches les uns des autres réduisent les besoins en matière d’opérations
d’entrée et de fin.
Divers utilitaires de défragmentation sont actuellement disponibles sur le marché. Certains utilitaires permettent
la défragmentation sur les fichiers ouverts, tandis que d’autres nécessitent une défragmentation de fichiers
fermés ou offrent de meilleures performance lorsqu’ils sont utilisés dans des conditions de fichier fermé. En
outre, certains utilitaires ont des fonctionnalités transactionnelles, contrairement à d’autres.

Précautions lors de la défragmentation de SQL Server de base de


données
Lorsque vous évaluez un utilitaire de défragmentation à utiliser avec SQL Server, assurez-vous que l’utilitaire
fournit des fonctionnalités de données transactionnelles. Plus précisément, choisissez un utilitaire de
défragmentation qui fournit les fonctionnalités de données transactionnelles suivantes :
Le secteur d’origine n’est pas considéré comme déplacé tant que le nouveau secteur n’a pas été
correctement établi et que les données ont été copiées.
L’utilitaire protège contre les défaillances système, telles qu’une coupure de courant, de manière
sécurisée, qui conserve les fichiers intacts logiquement et physiquement. Pour garantir l’intégrité des
données, un test pullthe-plug est vivement recommandé lorsqu’un utilitaire de défragmentation est en
cours d’exécution sur un fichier SQL Server base de données.
Le Write-Ahead de journalisation des données requiert la prévention des réécritures de secteur afin
d’éviter la perte de données. L’utilitaire doit conserver l’intégrité physique du fichier tant qu’il effectue
des mouvements de données. L’utilitaire doit fonctionner sur les limites de secteur d’une manière
transactionnelle pour conserver les fichiers SQL Server intacts.
L’utilitaire doit fournir des mécanismes de verrouillage appropriés pour garantir que le fichier conserve
une image cohérente pour toutes les modifications. Par exemple, l’utilitaire doit s’assurer que le secteur
d’origine ne peut pas être modifié lorsqu’il est copié vers un nouvel emplacement. Si des modifications
sont autorisées, l’utilitaire de défragmentation risque de perdre l’écriture.
Les défragmentateurs de disque critiques qui ne fournissent pas ces fonctionnalités de données
transactionnelles ne doivent pas être utilisés, sauf si l’instance de SQL Server utilisant les disques à
défragmenter a été fermée afin que vous ne défragmentiez pas les fichiers de base de données ouverts.
La défragmentation des fichiers ouverts pose plusieurs problèmes possibles que la défragmentation de fichier
fermé n’a généralement pas :
La défragmentation des fichiers ouverts affecte les performances. Les utilitaires de défragmentation
peuvent verrouiller des sections du fichier, ce qui empêche SQL Server effectuer une opération de lecture
ou d’écriture. Cela peut affecter la concurrence du serveur en cours d’exécution SQL Server. Contactez le
fabricant de l’outil de défragmentation pour savoir comment les fichiers sont verrouillés et comment cela
peut affecter SQL Server’accès.
La défragmentation des fichiers ouverts peut affecter la mise en cache et l’ordre d’écriture. Les utilitaires
basés sur des fichiers ouverts nécessitent des composants de chemin d’accès d’I/S . ces composants ne
doivent pas modifier l’ordre ou la nature prévue de l’opération d’écriture. Si les clients du protocole
d’écriture ou DER sont rompus, des dommages de base de données sont susceptibles de se produire. La
base de données et tous les fichiers associés sont considérés comme une entité unique. (Cela est abordé
dans de nombreux articles de la Base de connaissances Microsoft, SQL Server Livres en ligne et divers
livres blancs.) Toutes les écritures doivent conserver les séquences d’ordre d’écriture d’origine et les
fonctionnalités d’écriture par écriture.

Recommandations
Défragmentez le volume NTFS, sauf s’il a été formaté, avant de créer une base de données ou de déplacer
des bases de données existantes vers le volume.
Assurez-vous de planifier et de dimensionr vos données SQL fichiers journaux de manière appropriée lors de
la première création de la base de données.
Créez vos journaux de transaction SQL Server 2014 avec larowth automatique à l’esprit s’il sera utilisé.
Défragmentez le ou les disques sur lesquels résident vos journaux de transactions. Cela permet d’éviter la
fragmentation du fichier externe du journal des transactions. Ce problème peut se produire si vos fichiers ont
connu une grande quantité de connexions automatiques ou s’il ne s’agit pas d’un disque dédié qui contient
de nombreuses bases de données, journaux ou autres fichiers qui ont été modifiés. Dans ce cas, les fichiers (y
compris le fichier journal des transactions) peuvent être entrecoupés et fragmentés.
Si vous défragmentez des lecteurs de base de données qui sont des disques de cluster, les disques de cluster
doivent être mis en place pour suspendre la surveillance de l’état (également appelé mode maintenance).
Pour minimiser la fragmentation, ne réduisez pas vos fichiers de base de données. En outre, augmentez-les
manuellement en tailles qui minimisent l’activité de croissance.
Conservez vos fichiers de base de données sur des disques dédiés.
Effectuez une sauvegarde complète avant de défragmenter les emplacements qui contiennent des SQL
Server base de données et des fichiers de sauvegarde.

Références
Comment exécuter ChkDsk et défragmenter sur les volumes partagés de cluster Windows Server 2012
R2
Recommandations recommandations pour améliorer les performances SQL Server FILESTREAM
Une erreur 0x80040e97 se produit lorsque vous
utilisez la recherche de texte intégral intégrée dans
SQL Server
12/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous indexez des documents de grande taille
à l’aide d’une recherche en texte intégral intégrée dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2270849

Symptômes
Lorsque vous indexez des documents complexes ou de grande taille à l’aide d’une recherche en texte intégral
intégrée dans Microsoft SQL Server, vous pouvez recevoir des erreurs de délai d’Microsoft SQL Server
semblables à ce qui suit :

2010-06-07 15:02:44.64 spid10s Error '0x80040e97' occurred during full-text index population for table or
indexed view '[db1]. [dbo]. [Images] » (ID de table ou de vue indexée « 622625261 », ID de base de données
« 171 », valeur de clé de texte intégral « 2375057 ». Une nouvelle réindexation est tentée.

En outre, SQL Server pouvez redémarrer le processus FDHOST.exe de travail. Lorsque ce problème se produit,
un message d’erreur semblable à ce qui suit s’affiche dans SQL Server journal des erreurs :

Cause
Ce problème se produit si la lecture et le traitement des données XML prennent plus de 60 secondes pour
FDHOST.exe processus de lecture et de traitement des données XML.

Résolution
Pour résoudre ce problème, augmentez la valeur du délai d’délai d’indexation de texte intégral. Pour ce faire,
appelez sp_fulltext_service la procédure stockée qui possède le 'ft_timeout' paramètre. Par exemple,
l’exemple suivant augmente le délai d’indexation de texte intégral à 20 minutes pour n’importe quel document :

Exec sp_fulltext_service 'ft_timeout', 1200000

NOTE
Le deuxième paramètre est le délai d’indexation complète en millisecondes.

IMPORTANT
Redémarrez votre SQL Server pour que le nouveau paramètre prenne effet.
Plus d’informations
Lorsque SQL Server indexe des types de données tels que varbinary, varbinary(max), image ou xml, SQL Server
envoie des données au processus de daemon de filtre (FDHOST.exe). À tout moment au cours du processus
d’indexation, SQL Server n’attend pas plus de 60 secondes avant que le FDHOST.exe de réponse.
Pour les documents XML de grande taille, le filtre XML hébergé par le processus FDHOST.exe lit toutes les
données de SQL Server et stocke les données dans un fichier temporaire. Ensuite, FDHOST.exe le contenu XML
pour le filtrage et la cinglisation des mots. Si ce processus prend plus de 60 secondes, SQL Server arrête le lot et
retentre l’opération en utilisant une taille de lot plus petite. Si un document XML est de grande taille et que le
processus FDHOST.exe prend plus de 60 secondes pour filtrer et rompre les mots, vous pouvez obtenir une
erreur mentionnée dans la section Symptômes.

NOTE
Le problème peut se produire avec n’importe quel iFilter qui écrit des données dans un fichier temporaire.

Des 0x80040e97 peuvent également être produites pour d’autres raisons. Par exemple, vous pouvez voir le
même code d’erreur lorsque SQL Server des problèmes de chargement d’un iFilter. L’augmentation de la valeur
du délai d’dépassement dans ces cas-là peut masquer l’erreur et empêcher un dépannage efficace. Par
conséquent, nous vous recommandons de vérifier la taille du document et de vérifier que la taille du document
défaillant est exceptionnellement importante avant d’augmenter la valeur du délai d’délai.
Erreur 3156 lors de la restauration d’une base de
données avec un groupe de fichiers optimisé pour
la mémoire SQL Server
13/08/2021 • 2 minutes to read

S’applique à : SQL Server

Symptômes
Lorsque vous essayez de restaurer une base de données dont le groupe de fichiers est optimisé pour la SQL
Server, vous recevez le message d’erreur suivant :

Msg 3156, Niveau 16, État 6, Ligne 1


Le fichier <Database File> ' ' ne peut pas être restauré sur ' : <Driver> \ <Folder Path> \ <Database Folder>
'. Utilisez WITH MOVE pour identifier un emplacement valide pour le fichier.

Cause
Pendant le processus de restauration d’une base de données, SQL Server Moteur de base de données créera un
dossier pour un groupe de fichiers optimisé pour la mémoire. Ce problème se produit s’il existe déjà un dossier
du même nom dans le même chemin d’accès et que le dossier est utilisé par SQL Server ou d’autres processus.

Solution de contournement
Utilisez un nom de dossier différent ou un chemin d’accès de dossier différent lors de la restauration d’une base
de données.

Exemple de script
Exemple de script de création d’une base de données avec un groupe de fichiers
USE [master];
GO
CREATE DATABASE Contoso
ON PRIMARY
( NAME = 'Contoso_Primary',
FILENAME=
'C:\SQLserver\Contoso\Contoso_data.mdf',
SIZE=4MB,
MAXSIZE=10MB,
FILEGROWTH=1MB),
FILEGROUP Contoso_FG1
( NAME = 'Contoso_FG1',
FILENAME =
'C:\SQLserver\Contoso\Contoso_FG1.ndf',
SIZE = 1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB)

ALTER DATABASE Contoso


ADD FILEGROUP [Contoso_FG1] CONTAINS MEMORY_OPTIMIZED_DATA
GO

Exemple de script de restauration de base de données

USE [master]
GO
RESTORE DATABASE [Contoso] FROM DISK = N'C:\backup\compress\Contoso\Contoso.bak' WITH FILE = 1,
MOVE N'Contoso_data' TO N'C:\SQLserver\Contoso\Contoso_data.mdf',
MOVE N'Contoso_log' TO N'C:\SQLServer\Contoso\Contoso_log.ldf',
MOVE N'<Database File>' TO N'<Driver>:\<Folder Path>\<Database Folder>',
Replace,
NOUNLOAD,
STATS = 5
GO

NOTE
Si le mot clé n’est pas utilisé, le mot clé dans le script garantit que le processus de restauration
<Database Folder> Replace est terminé sans erreur.

Voir aussi
MSSQLSERVER_3156
Erreur Msg 33111 après SQL Server rotation de clé
ou de certificat TDE
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit après l’utilisation d’un certificat Transparent Data
Encryption (TDE) ou d’une rotation de clé, l’abandon de la certification d’origine, puis la sauvegarde d’un journal
à l’aide de COMPRESSION+MAXTRANSFERSIZE.
S’applique à : SQL Server 2019, SQL Server 2016, SQL Server 2014, SQL Server 2012
Numéro de la ko d’origine : 4534430

Symptômes
Une fois que vous avez effectué une rotation de clé ou un certificat Transparent Data Encryption (TDE), déposez
la certification d’origine, puis effectuez une sauvegarde du journal à l’aide de
COMPRESSION+MAXTRANSFERSIZE, vous recevez l’erreur suivante :

Msg 33111, Niveau 16, État 3, LineNumber


Impossible de trouver le certificat de serveur avec l’empreinte numérique « % ».
Msg 3013, Level 16, State 1, LineLineNumber
BACKUP LOG se termine anormalement.

Cause
Lors de la modification du certificat ou des clés, le fichier journal virtuel (VLF) actif, qui est chiffré par la clé
précédente, est fermé. Le vlf disponible suivant (ou le vlf nouvellement créé) sera utilisé et chiffré par la nouvelle
certification.
À ce stade, le fichier journal des transactions conserve les enregistrements journaux chiffrés par le certificat
précédent, ainsi que les enregistrements de journaux chiffrés par le nouveau certificat.
Lorsque vous effectuez une sauvegarde de journal avec les paramètres COMPRESSION+MAXTRANSFERSIZE,
les enregistrements journaux qui ont été chiffrés par le certificat précédent sont déchiffrés, puis chiffrés par le
nouveau certificat, puis enregistrés dans le fichier de sauvegarde.
Pour cette raison, la certification précédente est nécessaire pour le déchiffrement. La sauvegarde du journal
échouera si le certificat précédent n’existe pas.

Résolution
Restituer la certification précédente et réessayer la sauvegarde.

NOTE
Nous vous recommandons de conserver les sauvegardes de certification au cas où le problème se produira à l’avenir.

État
Microsoft étudie actuellement ce problème et publiera des informations supplémentaires dans cet article dès
qu’elles seront disponibles.
Références
Découvrez la description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft
que Microsoft utilise pour décrire les mises à jour logicielles.
Message d’avertissement contenant
HkHostBackupGetCheckpointFileInfoV2 et 1000016
journal d’SQL Server’erreurs
13/08/2021 • 2 minutes to read

Cet article décrit un avertissement qui se produit lors de la backing d’une base de données en mémoire.
Version du produit d’origine : SQL Server 2016 Enterprise, SQL Server 2016 Enterprise Core
Numéro de la ko d’origine : 4316959

Symptômes
Supposons que vous avez une base de données en mémoire dans SQL Server. Si vous back up the in-memory
database, you may notice that the following warning message is logged in the SQL Server error log:

[AVERTISSEMENT] HkHostBackupGetCheckpointFileInfoV2 (). ID de base de données : [21]. Nom de


fichier de point de contrôle non valide. FileName : ffffffdd-fffffb17-fffd.00000022-000004e8-
0002.4b987b24-bf74-485d-b32e-e7ddfb496457.0-0. 1000016 .
(d:\b\s3\sources\sql\ntdbms\hekaton\sqlhost\sqlmin\hkhostbackup.cpp : 2958)

Plus d’informations
Le message d’avertissement commence par HkHostBackupGetCheckpointFileInfoV2 et se termine par
1000016 dans fileName. Les messages d’avertissement qui ont exactement ces valeurs sont sans danger et
vous pouvez les ignorer en toute sécurité. À un moment donné, SQL Server les supprimera automatiquement.
Le fichier dans le dossier $FSLOG est utilisé en interne pour l’intégrité des transactions Filestream. SQL Server
interprète incorrectement le message d’avertissement comme un point de contrôle valide de la base de données
en mémoire. Dans ce cas, SQL Server l’avertissement dans le journal SQL Server’erreurs.
Erreur lorsque vous créez une sauvegarde
instantanée de nombreuses bases de données en
même temps dans SQL Server
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème (message) que lorsque vous créez une sauvegarde instantanée de
nombreuses bases de données en même temps
ERROR Selected writer 'Microsoft Writer (Service State)' is in failed state dans SQL Server.

Version du produit d’origine : SQL Server


Numéro de la ko d’origine : 943471

Symptômes
Dans Microsoft SQL Server, vous créez une sauvegarde instantanée de nombreuses bases de données en même
temps. Pour ce faire, vous utilisez le service VSS (Volume Shadow Copy Service) ou l’interface VDI (Virtual
Backup Device Interface). Dans ce scénario, l’opération de sauvegarde de capture instantanée échoue. En outre,
vous recevez le message d’erreur suivant si vous utilisez le service VSS pour créer la sauvegarde de capture
instantanée :

ERREUR : l’auteur sélectionné « Rédacteur Microsoft (État du service) » est dans l’état d’échec !
État : 8 (VSS_WS_FAILED_AT_PREPARE_SNAPSHOT)
Code d’échec du rédacteur : 0x800423f4 ( )
Writer ID: { WriterID }
ID d’instance : { InstanceID }

Vous recevez l’un des messages d’erreur suivants si vous utilisez l’environnement VDI pour créer la sauvegarde
de capture instantanée :
Message d’erreur 1

[Microsoft] [Pilote SQL Server ODBC] [SQL Server] Ressources insuffisantes pour créer un
programmeur de SSM.
Msg 3267, SevLevel 16, State 1, SQLState 42000

Message d’erreur 2

[Microsoft] [Pilote SQL Server ODBC] [SQL Server] Le thread de travail n’a pas pu être créé.
Msg 3013, SevLevel 16, State 1, SQLState 42000

Message d’erreur 3
Le message suivant peut être consigné dans le journal SQL Server’erreurs :

<Datetime> spid420 SubprocessMgr::EnqueueSubprocess : limite de « Nombre maximum de threads


de travail » atteinte
Le nombre de bases de données que vous essayez de récupérer lorsque ce problème se produit varie. Le
nombre de bases de données dépend des conditions suivantes :
La configuration des SQL Server
Autres activités dans SQL Server

Cause
Dans SQL Server, la sauvegarde instantanée de chaque base de données utilise cinq threads dans le Sqlservr.exe
de données. En outre, d’autres activités peuvent également utiliser des threads dans Sqlservr.exe processus.
Selon la configuration de SQL Server, les threads disponibles peuvent être utilisés si vous créez une sauvegarde
instantanée de nombreuses bases de données en même temps.

Solution de contournement
Pour contourner ce problème, créez une sauvegarde instantanée d’un nombre réduit de bases de données en
même temps.
Si vous exécutez une version 64 bits de SQL Server, vous pouvez envisager d’augmenter l’option de
configuration Des threads de travail max. Il n’est pas recommandé de modifier ce paramètre sur une version 32
bits de SQL Server.

Plus d’informations
Nous vous recommandons de créer une sauvegarde instantanée de moins de 35 bases de données en même
temps.
Erreur lorsque vous exécutez un objet CLR existant
ou créez un assembly
13/08/2021 • 3 minutes to read

Cet article vous aide à résoudre deux problèmes différents qui peuvent se produire lors de l’utilisation d’objets
CLR sur une base de données qui a été déplacée à partir d’une instance différente de SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 918040

Symptômes
Prenons le cas de figure suivant. Vous détachez ou remontez une base de données qui se trouve dans une
instance de SQL Server. L’instance de SQL Server est en cours d’exécution sur le serveur A. Par la suite, vous
attachez ou restituerez cette base de données à une instance de SQL Server qui est en cours d’exécution sur le
serveur B. Dans ce scénario, vous pouvez être face aux symptômes suivants :
Lorsque vous essayez d’exécuter un objet CLR (Common Language Runtime) existant avec l’autorisation
non sûre définie à partir de la base de données qui se trouve sur le serveur B, vous recevez le
external_access message d’erreur suivant :

Msg 10314, Niveau 16, État 11, Ligne 2


Une erreur s’est produite dans le .NET Framework Microsoft lors de la tentative de chargement de l’ID
d’assembly 65536. Il se peut que le serveur manque de ressources ou que l’assembly ne soit pas
approuvé avec PERMISSION_SET = EXTERNAL_ACCESS ou UNSAFE. Exécutez à nouveau la requête
ou consultez la documentation pour voir comment résoudre les problèmes d’confiance de l’assembly.
Pour plus d’informations sur cette erreur :
System.IO.FileLoadException: Could not load file or assembly 'AssemblyName, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null' or one of its dependencies. Une erreur relative à la sécurité
s’est produite. (Exception de HRESULT : 0x8013150A) System.IO.FileLoadException :
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence
assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean
throwOnFileNotFound, Boolean forIntrospection) at
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity,
StackCrawlMark& stackMark, Boolean forIntrospection) at
System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity,
StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.Load(String
assemblyString)

Lorsque vous essayez de créer un assembly dont l’autorisation ou l’autorisation non sûre est définie dans
la même base de données, vous recevez external_access le message d’erreur suivant :

Serveur : Msg 10327, Niveau 14, État 1, Ligne 1


CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' is not
authorized for PERMISSION_SET = EXTERNAL_ACCESS. L’assembly est autorisé lorsque l’une des
valeurs suivantes est true : le propriétaire de la base de données (DBO) dispose de l’autorisation
ASSEMBLY DBO (EXTERNAL ACCESS ASSEMBLY) et la base de données a la propriété DE base de
données TRUSTWORTHY . ou l’assembly est signé avec un certificat ou une clé asymétrique qui
dispose d’une connexion correspondante avec l’autorisation ASSEMBLY D’ACCÈS EXTERNE.
Les problèmes se produisent même si vous avez déjà définie la propriété de base de données de confiance sur
ON .

Cause
Ce problème se produit car la connexion que vous utilisez pour créer la base de données sur le serveur A ne se
trouve pas dans l’instance de SQL Server sur le serveur B. Cette connexion peut être la connexion microsoft
Windows ou la connexion SQL Server connexion.

Solution de contournement
Pour contourner ce problème, utilisez l’une des méthodes suivantes.

NOTE
Avant d’utiliser les méthodes suivantes, veillez à activer la propriété de base de données de confiance.

Utilisez la procédure stockée pour changer le propriétaire de la base de données en sa ou en une


connexion sp_changedbowner disponible sur le serveur B. Par exemple, vous pouvez utiliser l’instruction
suivante pour changer le propriétaire de la base de données en sa :

USE <DatabaseName>
GO

EXEC sp_changedbowner 'sa'

NOTE
Dans cette instruction, <DatabaseName> il s’agit d’un espace réservé au nom de la base de données sur qui vous
travaillez. Le propriétaire modifié de la base de données doit avoir les autorisations correspondantes pour
effectuer une tâche donnée. Par exemple, le propriétaire de la base de données doit avoir l’autorisation CREATE
ASSEMBLY pour créer un assembly.

Ajoutez la connexion sur l’instance de SQL Server sur le serveur A qui est utilisée pour créer la base de
données à l’instance de SQL Server sur le serveur B.
Si la connexion est un compte de domaine, vous pouvez créer la même connexion sur le serveur B. Accordez
ensuite les autorisations requises à la connexion sur l’instance de SQL Server sur le serveur B.
Si la connexion est une connexion SQL Server, assurez-vous que le SID de cette connexion correspond à la
nouvelle connexion SQL Server que vous créez sur l’instance de SQL Server sur le serveur B. Pour ce faire,
spécifiez l’argument SID de CREATE LOGIN l’instruction.

Plus d’informations
Si vous accédez à l’objet CLR à partir d’une autre base de données et que cette base de données présente un SID
DBO non identique, le même problème peut se produire.
Pour plus d’informations, consultez le blog suivant : CSS SQL Server Engineers.

Références
CREATE LOGIN (Transact-SQL)
sp_changedbowner (Transact-SQL)
CREATE ASSEMBLY (Transact-SQL)
SQL Server index de recherche en texte intégral sur
la colonne XML n’indexe pas les valeurs d’attribut
pour les nodes internes
13/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème dans lequel SQL Server index de texte intégral sur la colonne XML
n’indexe pas les valeurs d’attribut pour les nodes internes.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2513181

Symptômes
Dans Microsoft SQL Server lors de l’indexation d’une colonne XML à l’aide de valeurs de nœud de texte intégral
uniquement et de valeurs d’attribut pour le nœud supérieur sont indexés. Les valeurs d’attribut d’un des nodes
internes ne sont pas indexées.

Cause
Ce comportement se produit car l’breakeur de mots XML fourni avec SQL Server ne retourne pas les valeurs
d’attribut pour les nodes internes (xmlfilt.dll - Version : 12.0.9735.0).

Résolution
Ce problème peut être résolu à l’aide de l’outil d’coupure de mots XML fourni avec le système d’exploitation
Windows lorsque SQL Server est en cours d’exécution sur Windows 7 ou Windows Server 2008 R2 (version
livrée avec Windows utilise un nom de fichier différent - xmlfilter.dll). Si vous exécutez SQL Server sur une
version inférieure de Windows, vous devez d’abord mettre à niveau vers ces systèmes d’exploitation, puis utiliser
la procédure suivante pour résoudre ce problème.
Procédure pour résoudre le problème sur les serveurs SQL en cours d’exécution sur Windows Server 2008 R2
et Windows 7 :

IMPORTANT
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des
problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces
étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le
restaurer en cas de problème. Pour plus d’informations sur la façon de back up et restore the registry, voir How to back
up and restore the registry in Windows.

NOTE
Vous devez redémarrer SQL Server service après avoir suivi la procédure suivante pour que les modifications entrent en
vigueur.

1. Accédez à la ruche de Registre suivante sur votre ordinateur SQL Server et enregistrez-la sous
SQLMSSearch.reg.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSearch\CLSID

NOTE
Remplacez le <instance> « » dans le chemin d’accès ci-dessus par l’ID d’instance approprié SQL Server/SQL Server.

Par exemple, « MSQL10. MSSQLSERVER » pour une instance par défaut ou « MSSQL10 . KATMAI » pour
une instance nommée « Katmai »
Pour plus d’informations, voir File Locations for Default and Named Instances of SQL Server.
2. Modifiez le fichier SQLMSSearch.reg avec le bloc-notes et remplacez toutes les occurrences de xmlfilt.dll
par, puis C:\Windows\system32\xmlfilter.dll enregistrez les modifications.

NOTE
Cela suppose que votre dossier Windows se trouve à C:\Windows l’emplacement .
Vous devez entrer chaque barre oblique inverse dans le nouveau chemin d’accès à deux reprises !

3. Cliquez sur le fichier SQLMSSearch.reg pour importer le contenu dans le Registre.


4. Exécutez les commandes T-SQL suivantes pour activer le nouveau paramètre dans SQL Server

exec sp_fulltext_service 'load_os_resources', 1


exec sp_fulltext_service 'verify_signature ', 0
exec sp_fulltext_service 'update_languages'
exec sp_fulltext_service 'restart_all_fdhosts'

5. Vérifiez la disponibilité des nouveaux paramètres avec cette commande T-SQL :

EXEC sp_help_fulltext_system_components 'fullpath','c:\windows\system32\xmlfilter.dll'

NOTE
Vous devez adapter la commande ci-dessus en fonction du chemin d Windows système correct sur votre système.
Assurez-vous également que toutes les langues (respectivement leur lcid), qui doivent afficher le nouveau
comportement, sont répertoriées dans la colonne « componentname » dans la sortie.

Plus d’informations
Étapes de la repro :
1. Créez un tableau simple comme suit :

CREATE TABLE [dbo].[testFTS]([idField] [int] PRIMARY KEY,


[xmlField] [xml] NOT NULL)

2. Activez FTS sur le champ xmlField (la langue de cél’est-à-dire que vous sélectionnez ici n’est pas
pertinente pour le repro).
3. Insérez un enregistrement dans cette table, comme suit :
insert into testFTS (idField, xmlField) values
(1, '<TopNode TopFirstAtt="TopAttValue" TopSecondAtt="Second Value">
<MiddleNode FirstAtt="ValueOne" SecondAtt="ValueTwo" ThirdAtt="ValueThree">
<BottomNode BottomAtt="BottomValue">
<InnerMostNode>Innermost Text</InnerMostNode>
</BottomNode>
</MiddleNode>
<MiddleNode FirstAtt="ValueFour" SecondAtt="ValueFive" ThirdAtt="ValueSix">
<BottomNode BottomAtt="OtherBottomValue" />
</MiddleNode>
<MiddleNode FirstAtt="ValueSeven" SecondAtt="ValueEight" ThirdAtt="ValueNine">
<BottomNode BottomAtt="LastValue" />
</MiddleNode>
<NodeWithValue>Testing whether this value will be indexed</NodeWithValue>
</TopNode>')

4. En interrogeant ce tableau particulier fts_index_keywords


select * from sys.dm_fts_index_keywords(db_id(),object_id('testFTS')) , les résultats suivants sont
obtenus :

M OT C L É DISP L AY _T ERM C O L UM N _ID DO C UM EN T _C O UN T

0x0069006E0064006500 indexé 2 1
7800650064

0x0069006E006E006500 innermost 2 1
72006D006F00730074

0x007300650063006F00 second 2 1
6E0064

0x007400650073007400 test 2 1
69006E0067

0x0074006500780074 text 2 1

0x0074006F0070006100 topattvalue 2 1
74007400760061006C0
0750065

0x00760061006C007500 valeur 2 1
65

0x007700680065007400 si 2 1
6800650072

0xFF FIN DU FICHIER 2 1

Ces termes d’affichage semblent se limiter à :


Valeurs de nœud, quelle que soit leur profondeur d’imbriquement dans le document XML.
Valeurs d’attribut uniquement pour le nœud supérieur et non pour les nœuds internes attendus.
Les index de texte intégral cessent de se remplir
pendant 30 minutes dans SQL Server
13/08/2021 • 3 minutes to read

Cet article vous présente les problèmes qui peuvent se produire lorsque vous travaillez avec plusieurs index de
texte intégral et solutions pour contourner ces problèmes.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 4045273

Symptômes
Supposons que vous avez Microsoft SQL Server installé sur un serveur. Plusieurs scénarios sont envisageables :
Scénarios 1 :
Vous avez plusieurs index de texte intégral dans une ou plusieurs bases de données, et la population de
ces index de texte intégral se termine presque en même temps.
Scénarios 2 :
Vous créez un catalogue de texte intégral qui contient de nombreux index de texte intégral et la
population de ces index de texte intégral se termine presque en même temps.
Scénarios 3 :
Vous resserez un ou plusieurs catalogues de texte intégral dans lesquels plusieurs index terminent le
remplit en même temps ou presque.
Scénarios 4 :
Vous exécutez manuellement Alter Full-Text Catalogue réorganiser pour un catalogue qui contient de
nombreux index de texte intégral.
Dans l’une de ces situations, si vous activez l’indicateur de suivi (TF) 7603 pour que la journalisation détaillée de
la population de texte intégral soit consignée dans le journal d’erreurs SQL Server, vous voyez des messages qui
ressemblent à ce qui suit :

Date/heure SPIDIFTS : CFTWICrawl::Close, l’analyse complète a pris fin, planifiant une fusion principale pour
CrawlType : 1, DBid 7, catid 5, tid 13847411
Date/Heure SPID CFTMasterMergeListManager::QueueMasterMerge queued MM item for DBid 7, catalog 5,
tblid 13847411
Date/heure SPID IFTS : CFTWIAutoCrawlFullPass::ExecUnit::D oUnitWork : analyse existante trouvée, donc
retourner sans la passe complète d’analyse automatique, DBid 7 Catid 5 Objid 13847411

En outre, vous voyez une attente de 30 minutes pour la fusion principale, et le journal signale que la fusion
principale a été abandonnée :

IFTS SPID date/heure : les éléments de travail de fusion principale ont été abandonnés car ils ont attendu en
préinit pendant plus de 30 minutes m_DBid 7, m_objid 13847411
L’opération de fusion maître d’avertissement SPID date/heure n’a pas été effectuée pour DBid 7, 13847411,
donc l’index d’interrogation sera lent. Veuillez exécuter modifier la réorganisation du catalogue en texte
intégral.
Date/Heure SPID CFTMasterMergeListManager::RemoveMasterMerge released MM item for DBid 7, catalog
5, tblid 13847411
Date/heure SPID La fusion principale a commencé à la fin de l’analyse complète de la table ou de la vue
indexée « [DB1]. [dbo]. [Tableau1]' a échoué avec HRESULT = '0x80000049'. L’ID de base de données est « 7
» et l’ID de table 13847411, ID de catalogue : 5.

Cause
La fusion principale s’exécute automatiquement à la fin d’une population complète ou incrémentielle par index.
Le processus de fusion principale réduit le nombre de fragments pour un index de texte intégral afin que les
requêtes utilisant l’index de texte intégral ne deviennent pas affectées par les performances de l’index de texte
intégral.
Le processus de fusion principale utilise plusieurs threads pour réduire la fragmentation par index de texte
intégral. SQL Server le nombre de fusions maîtres simultanées qui s’exécutent en même temps. Dès que le seuil
est atteint, tout index de texte intégral qui tente d’exécuter une fusion principale sera retardé de 30 minutes. La
mise à jour de l’index de texte intégral ne démarre pas pendant cette période d’attente. La fusion principale
reprend si l’une des deux choses suivantes se produit :
Lorsque la prochaine population incrémentielle réussie se termine et démarre une fusion principale.
Exécutez manuellement une fusion principale en exécutant la commande suivante :

ALTER FULLTEXT CATALOG catalog_name REORGANIZE

NOTE
Les deux options ci-dessus peuvent encore atteindre la limite de fusion principale en fonction du nombre de fusions
maîtres en cours d’exécution à ce moment-là.

Solution de contournement
Pour contourner ce besoin, essayez les méthodes suivantes :
Méthode 1 (recommandée) : limiter le nombre d’index de texte intégral dans le même catalogue.
Recommandé 7 ou moins. Les tables de grande taille doivent se faire dans leur propre catalogue de texte
intégral. Il s’agit d’une meilleure pratique pour les performances lorsque vous réorganisez ou réorganisez
des index. Cette méthode peut vous aider lorsque Change_tracking est auto.
Méthode 2 : définissez Change_Tracking manuelle, à l’aide de la commande suivante :

ALTER FULLTEXT INDEX ON table_name set Change_tracking = Manual

Ensuite, créez SQL Server tâches à répartir lorsque des populations incrémentielles sont exécutés. Cela se
traduit par moins de chevauchement lorsque vous exécutez une fusion principale après la population
d’index.
Microsoft SQL Server Besoins en matière de sous-
système d’I/S pour la base de données tempdb
15/08/2021 • 19 minutes to read

Cet article présente les conditions requises pour le sous-système d’I/S pour la base de données tempdb SQL
Server.
Version du produit d’origine : Microsoft SQL Server 2005, SQL Server 2008, SQL Server 2012 SQL Server
2014
Numéro de la ko d’origine : 917047

Résumé
Microsoft SQL Server nécessite que le sous-système d’E/S utilisé pour stocker les bases de données système et
utilisateur respecte entièrement les exigences de la journalisation Write-Ahead par le biais de principaux d’E/S
spécifiques. Ces exigences sont nécessaires pour respecter les propriétés DE LASO des transactions : Atomic,
Consistent, Isolated et Durable. Les détails sur les exigences de conformité du sous-système d’entrée/heure sont
fournis dans les références suivantes :
SQL Server 2000https://technet.microsoft.com/library/cc966500.aspx

NOTE
Cet article s’applique également SQL Server 2005 et versions ultérieures.

La liste suivante récapitule rapidement les conditions requises :


Les commandes d’écriture doivent être conservées.
La cohérence d’écriture dépendante doit être conservée.
Les écritures doivent toujours être sécurisées dans/sur un support stable.
La prévention des O/S de sécurité doit avoir lieu.
La maintenance de la délabilité reste essentielle pour toutes les autres bases de données, mais peut être
relâchée pour la base de données tempdb. Le tableau suivant récapitule plusieurs des besoins critiques en
matière d’opérations d’SQL Server bases de données.

B ESO IN S EN M AT IÈRE D’O / S B RÈVE DESC RIP T IO N SY ST ÈM E O U UT IL ISAT EUR T EM P DB

Ordre d’écriture Capacité du sous-système à Obligatoire Recommandé


maintenir l’ordre correct des
Cohérence d’écriture opérations d’écriture. Cela
dépendante peut être particulièrement
important pour la mise en
miroir de solutions, les
exigences de cohérence de
groupe et SQL
Server’utilisation du
protocole WAL.
B ESO IN S EN M AT IÈRE D’O / S B RÈVE DESC RIP T IO N SY ST ÈM E O U UT IL ISAT EUR T EM P DB

Lecture après écriture Possibilité pour le sous- Obligatoire Obligatoire


système de répondre aux
demandes de lecture avec la
dernière image de données
lors de l’émission de la
lecture une fois l’écriture
terminée.

Survie en cas de panne Possibilité pour les données Obligatoire Non applicable
de rester entièrement
intactes (durable) en cas de
panne, telle qu’un
redémarrage du système.

Prévention des O/S de Possibilité pour le système Obligatoire Recommandé


sécurité d’éviter le fractionnement
des demandes d’E/S
individuelles.

Réécriture de secteur Le secteur peut uniquement * Déconseillé, autorisé * Déconseillé, autorisé


être écrit dans son uniquement en cas de uniquement en cas de
intégralité et ne peut pas transaction transaction
être réécrit en raison d’une
demande d’écriture sur un
secteur à proximité.

Données renforcés L’attente que lorsqu’une Obligatoire Non applicable


demande d’écriture ou une
opération FlushFileBuffers
est correctement effectuée,
les données ont été
enregistrées dans un
support stable.

Alignement et taille du SQL Server interroge les Obligatoire Obligatoire


secteur physique emplacements de stockage
des données et des fichiers
journaux. Tous les appareils
sont requis pour prendre en
charge les attributs de
secteur permettant aux SQL
Server d’écrire sur des
limites physiques alignées
sur le secteur et dans des
multiples de la taille du
secteur.

Les réécritures de secteur transactionnel impliquent des opérations entièrement enregistrées par le sous-
système permettant à un secteur d’être entièrement déplacé, remplacé ou de revenir à l’image d’origine. Ces
réécritures sont généralement déconseillés en raison de la surcharge supplémentaire requise pour effectuer de
telles actions. Par exemple, il peut s’agit defragmentation d’un utilitaire qui déplace les données du fichier. Le
secteur d’origine dans le fichier ne peut pas être remplacé par le nouvel emplacement de secteur tant que le
nouveau secteur et les nouvelles données ne sont pas sécurisés. Le remappage du secteur doit se produire de
manière transactionnelle afin que toute défaillance, y compris une panne électrique, entraîne le rétablissement
des données d’origine. Assurez-vous que vous disposez de mécanismes de verrouillage disponibles au cours de
ce type de processus pour empêcher l’accès aux données non valide, ce qui a pour effet de bloquer les autres
clients de SQL Server E/S.
Survie en cas de panne
La base de données tempdb est un espace de scratch pour SQL Server et est reconstruite à chaque démarrage
SQL Server de base de données. L’initialisation a la place de tout besoin de données pour résister à un
redémarrage.
Opérations de réécriture de secteur transactionnel
Pour garantir la réussite des processus de récupération, tels que la restauration et la récupération sur incident,
les enregistrements journaux doivent être correctement stockés sur un support stable avant que la page de
données ne soit stockée et ne peuvent pas être réécrits sans respecter les propriétés transactionnelles. Pour ce
faire, le sous-système et les SQL Server doivent conserver des attributs spécifiques, tels que l’ordre d’écriture,
les écritures alignées sur le secteur et les tailles, ainsi que d’autres attributs de sécurité des E/S décrits dans les
documents mentionnés précédemment. Pour la base de données tempdb, la récupération sur incident est inutile,
car la base de données est toujours initialisée pendant SQL Server démarrage. Toutefois, la base de données
tempdb nécessite toujours des fonctionnalités de récupération. Par conséquent, certains attributs du protocole
WAL peuvent être relâchés.
L’emplacement de stockage de la base de données tempdb doit agir conformément aux protocoles de lecteur de
disque établis. De toutes façons, l’appareil sur lequel la base de données tempdb est stockée doit apparaître et
agir en tant que disque physique fournissant des fonctionnalités de lecture après écriture. Les opérations de
réécriture de secteur de transaction peuvent être une exigence supplémentaire d’implémentations spécifiques.
Par exemple, SQL Server ne prend pas en charge les modifications de base de données à l’aide de la
compression du système de fichiers NTFS, car la compression NTFS peut réécrire les secteurs du journal qui ont
déjà été écrits et considérés comme renforcés. Une défaillance lors de ce type de réécriture peut entraîner
l’inutilisation de la base de données, endommageant ainsi les données qui SQL Server déjà considérées comme
sécurisées.

NOTE
SQL Server 2005 a étendu la prise en charge ou la compression aux bases de données et groupes de fichiers en lecture
seule. Consultez la SQL Server 2005 Books Online pour plus d’informations.

Les opérations de réécriture de secteur transactionnel sont pertinentes pour toutes SQL Server de données qui
incluent la base de données tempdb. De plus en plus de technologies de stockage étendues utilisent des
appareils et des utilitaires qui peuvent réécrire des données qui SQL Server comme étant sécurisées. Par
exemple, certaines technologies émergentes effectuent une mise en cache en mémoire ou une compression de
données. Afin d’éviter de graves dommages de base de données, toute réécriture de secteur doit avoir une prise
en charge transactionnelle complète de telle sorte qu’en cas de défaillance, les données sont revenir aux images
de secteur précédentes. Cela garantit que les SQL Server ne sont jamais exposés à une interruption inattendue
ou à une condition de dommages de données.
Vous pourrez peut-être placer la base de données tempdb sur des sous-systèmes spécialisés, tels que des
disques RAM, un état plein ou d’autres implémentations à haut débit qui ne peuvent pas être utilisées pour
d’autres bases de données. Toutefois, les facteurs clés présentés dans la section « Plus d’informations » doivent
être pris en compte lorsque vous évaluez ces options.

NOTE
Les disques locaux dans les environnements en cluster de failover sont uniquement pris en charge avec des
implémentations à haut débit ou à état plein. Cela est dû au fait que le disque RAM ne peut être créé que sur une cible
iSCSI. En outre, les fonctionnalités de la cible iSCSI et du cluster de failover ne peuvent pas être utilisées sur le même hôte.
Plus d’informations
Plusieurs facteurs doivent être soigneusement évalués lorsque vous évaluez l’emplacement de stockage de la
base de données tempdb. Par exemple, l’utilisation de la base de données tempdb implique, sans s’y limiter,
l’encombrement mémoire, le plan de requête et les décisions d’O/S. Le réglage et l’implémentation appropriés
de la base de données tempdb peuvent améliorer l’évolutivité et la réactivité d’un système. Cette section décrit
les facteurs clés pour déterminer les besoins en stockage de la base de données tempdb.
Sous-systèmes haut débit
Il existe différentes implémentations de sous-système à haut débit disponibles sur le marché qui fournissent des
exigences de protocole de sous-système d’SQL Server D/S, mais qui ne fournissent pas de dulité du média.

IMPORTANT
Confirmez toujours auprès du fournisseur du produit pour garantir la conformité totale SQL Server besoins en matière
d’O/S.

Un disque RAM est un exemple courant d’une telle implémentation. Les disques RAM installent les pilotes
nécessaires et permettent à une partie du disque RAM principal d’apparaître et de fonctionner comme
n’importe quel lecteur de disque attaché au système. Tous les sous-systèmes d’entrée et de fin d’entreprise
doivent assurer la conformité totale avec SQL Server conditions requises en matière d’entrée et de fin
d’entreprise. Toutefois, il est évident qu’un disque RAM n’est pas un support durable. Par conséquent, une
implémentation telle qu’un disque RAM ne peut être utilisée que comme emplacement de la base de données
tempdb et ne peut être utilisée pour aucune autre base de données.
Clés à prendre en compte avant l’implémentation et le déploiement
Plusieurs points sont à prendre en considération avant le déploiement de la base de données tempdb sur ce
type de sous-système. Cette section utilise un disque RAM comme base de discussion, mais des résultats
similaires se produisent dans d’autres implémentations à haut débit.
Sécurité des I/S
La conformité de la lecture après écritures dans le secteur transactionnel et en écriture est une obligation. Ne
déployez jamais SQL Server sur un système qui ne prend pas entièrement en charge les besoins en matière
d’SQL Server D/S, ou vous risquez d’endommager et de perdre vos données.
Pages déjà mises en cache (cache DE RAM double)
Les tables temporaires sont comme toutes les autres tables d’une base de données. Ils sont mis en cache par le
pool de mémoires tampons et gérés par des opérations d’écriture différée. Le stockage de pages de tableau
temporaires sur un disque RAM entraîne une mise en cache double de ram, une dans le pool de mémoires
tampons et une sur le disque RAM. Cette action s’éloigne directement de la taille totale possible du pool de
mémoires tampons et réduit généralement les performances des SQL Server.
Abandon de la RAM
Le disque RAM désigne une partie de la RAM principale comme son nom l’indique. Plusieurs implémentations
de disques RAM et de caches de fichiers basés sur la RAM sont disponibles. Certaines activent également les
opérations de secours d’opérations d’opérations physiques. L’élément clé du cache de fichiers ram est qu’il
s’éloigne directement de la mémoire physique qui peut être utilisée par les SQL Server. Toujours avoir une
preuve forte que l’ajout d’un cache de fichiers basé sur la RAM améliore les performances de l’application et ne
diminue pas les autres performances de requête ou d’application.
Régler en premier
Une application doit se régler pour supprimer les tris et les hages inutiles et indésirables qui peuvent entraîner
l’utilisation de la base de données tempdb. Souvent, l’ajout d’un index peut supprimer complètement le besoin
de tri ou de hachage dans le plan, ce qui permet d’obtenir des performances optimales sans recourir à la base de
données tempdb.
Points d’avantages possibles
Les avantages de l’utilisation de la base de données tempdb sur un système à haut débit peuvent uniquement
être déterminés par des tests rigoureux et des mesures des charges de travail des applications. La charge de
travail doit être soigneusement mise en avant pour les caractéristiques dont la base de données tempdb peut
bénéficier, et la sécurité des I/S doit être confirmée avant le déploiement.
Les opérations de tri et de hachage fonctionnent avec les gestionnaires de mémoire SQL Server pour
déterminer la taille du scratch en mémoire pour chaque opération de tri ou de hachage. Dès que les données de
tri ou de hachage dépassent la zone de scratch en mémoire allouée, les données peuvent être écrites dans la
base de données tempdb. Cet algorithme a été étendu en SQL Server 2005, réduisant ainsi les exigences
d’utilisation de base de données tempdb par rapport aux versions antérieures de SQL Server.
Cau t i on

SQL Server est conçu pour prendre en compte les niveaux de mémoire et les activités de requête actuelles lors
de la prise de décisions de plan de requête qui impliquent l’utilisation d’opérations de base de données tempdb.
Par conséquent, les gains de performances varient considérablement en fonction des charges de travail et de la
conception des applications. Nous vous recommandons vivement d’effectuer les tests avec la solution préférée
pour déterminer les gains possibles et évaluer les exigences de sécurité des E/S avant un tel déploiement.
SQL Server utilise la base de données tempdb pour gérer diverses activités impliquant des tris, des hages, le
magasin de versions de lignes et des tables temp :
Les tableaux temporaires sont tenus à jour par les routines courantes de pool de mémoires tampons pour les
pages de données et n’offrent généralement pas d’avantages en terme de performances grâce aux
implémentations de sous-système spécialisées.
La base de données tempdb est utilisée comme zone de scratch pour les hèses et les tris. Il peut être utile de
réduire la latence des opérations d’opérations d’I/S. Toutefois, sachez que l’ajout d’un index pour éviter un
hachage ou un tri peut fournir un avantage similaire.
Exécutez les lignes de base avec et sans la base de données tempdb stockée sur le sous-système à haut débit
pour comparer les avantages. Une partie des tests doit inclure des requêtes sur la base de données utilisateur
qui n’impliquent pas de tris, de hésets ou de tables temporaires, puis vérifier que ces requêtes ne sont pas
affectées. Lorsque vous évaluez le système, les indicateurs de performances suivants peuvent être utiles.

IN DIC AT EUR DESC RIP T IO N / UT IL ISAT IO N

Lectures et écritures de pages L’amélioration des performances des systèmes d’exploitation


de base de données tempdb peut modifier le taux de lecture
et d’écriture des pages pour les bases de données utilisateur
en raison de la latence réduite associée aux I/S de base de
données tempdb. Pour les pages de base de données
utilisateur, le nombre global ne doit pas varier sur la même
charge de travail.

Lecture physique et écriture d’octets dans la base de Si le déplacement de la base de données tempdb vers un
données tempdb périphérique, tel qu’un disque RAM, augmente l’I/S réelle de
la base de données tempdb, cela indique que la mémoire qui
a été retiré du pool de mémoires tampons entraîne une
augmentation de l’activité de la base de données tempdb. Ce
modèle est un indicateur que la durée de vie des pages de
base de données peut également être affectée de manière
négative.
IN DIC AT EUR DESC RIP T IO N / UT IL ISAT IO N

Durée de vie des pages Un déclin de la durée de vie des pages peut indiquer une
augmentation des besoins physiques en matière
d’entrée/de-fin d’une base de données utilisateur. La
diminution du taux peut indiquer que la mémoire qui a été
retiré du pool de mémoires tampons force les pages de base
de données à quitter prématurément le pool de mémoires
tampons. Combinez-les avec les autres indicateurs et testez
pour bien comprendre les limites des paramètres.

Débit global L’objectif principal d’une modification de configuration de


Utilisation du processeur base de données tempdb est d’augmenter le débit global.
Extensibilité Vos tests doivent inclure une combinaison de charges de
Temps de réponse travail répétables qui peuvent être réduites pour déterminer
l’impact du débit.

Une implémentation de disque RAM basée sur la


compression peut fonctionner avec 10 utilisateurs. Toutefois,
avec une charge de travail accrue, cela peut pousser les
niveaux de processeur au-delà des niveaux souhaités et avoir
des effets négatifs sur le temps de réponse lorsque les
charges de travail sont élevées. Les tests de contrainte réels
et futurs tests de prévision de charge sont encouragés.

Fichiers de travail et actions de création de table de travail Si le déplacement de la base de données tempdb vers un
périphérique, tel qu’un disque RAM, modifie le plan de
requête en augmentant le nombre ou la taille des fichiers de
travail ou des tables de travail, cela indique que la mémoire
qui a été retiré du pool de mémoire tampon entraîne une
augmentation de l’activité de la base de données tempdb. Ce
modèle indique que la durée de vie des pages de base de
données peut également être affectée de manière négative.

Exemple de réécriture de secteur transactionnel


L’exemple suivant élabore la sécurité des données requise par les bases SQL Server données.
Supposons qu’un fournisseur de disque RAM utilise une implémentation de compression en mémoire.
L’implémentation doit être correctement encapsulée en fournissant l’apparence physique du flux de fichiers
comme si le secteur était aligné et resserré afin que SQL Server ne soit pas conscient et correctement sécurisé
de l’implémentation sous-jacente. Regardez l’exemple de compression de plus près.

O P ÉRAT IO N

Le secteur 1 est écrit sur l’appareil et compressé pour économiser de l’espace.

Le secteur 2 est écrit sur l’appareil et compressé avec le secteur 1 pour économiser de l’espace.

L’appareil peut effectuer les actions suivantes pour sécuriser les données du secteur 1 lorsqu’il est combiné aux
données du secteur 2.

O P ÉRAT IO N

Bloquer toutes les écritures dans les secteurs 1 et 2.


O P ÉRAT IO N

Décompressez le secteur 1 dans une zone de scratch, en laissant le secteur actuel 1 stockage en tant que données actives à
récupérer.

Compressez les secteurs 1 et 2 dans un nouveau format de stockage.

Bloquez toutes les lectures et écritures des secteurs 1 et 2.

Exchange ancien stockage pour les secteurs 1 et 2 avec un nouveau stockage.

En cas d’échec de la tentative d’échange (rollback) :


Restituer le stockage d’origine pour les secteurs 1 et 2.
Supprimez les secteurs 1 et 2 données combinées du point de scratch.
Échec de l’opération d’écriture du secteur 2.

Débloquer les lectures et les écritures pour les secteurs 1 et 2.

La possibilité de fournir des mécanismes de verrouillage autour des modifications du secteur et d’y faire
échouer les modifications en cas d’échec de la tentative d’échange de secteur est considérée comme conforme
de manière temporaire. Pour les implémentations qui utilisent le stockage physique pour le stockage étendu, il
inclut les aspects appropriés du journal des transactions pour sécuriser et récupérer les modifications qui ont
été appliquées aux structures sur disque afin de maintenir l’intégrité des fichiers de base de données SQL
Server.
Tout appareil qui permet la réécriture de secteurs doit prendre en charge les réécritures d’une manière
transactionnelle afin que SQL Server ne soit pas exposé à la perte de données.

NOTE
L’instance de SQL Server est redémarré lorsque des échecs d’I/S et de reprise en ligne se produisent dans la base de
données tempdb.

Soyez prudent lorsque vous déplacez la base de données tempdb


Soyez prudent lorsque vous déplacez la base de données tempdb, car si la base de données tempdb ne peut pas
être créée, SQL Server ne démarre pas. Si la base de données tempdb ne peut pas être créée, démarrez SQL
Server à l’aide du paramètre de démarrage (-f) et déplacez la base de données tempdb vers un emplacement
valide.
Pour modifier l’emplacement physique de la base de données tempdb, suivez les étapes suivantes :
1. Utilisez l’instruction et la clause MODIFY FILE pour modifier les noms de fichiers physiques de chaque
fichier dans la base de données tempdb afin de faire référence au nouvel emplacement physique, tel que
ALTER DATABASE le nouveau disque.

Alter database tempdb modify file


(name = tempdev, filename = 'C:\MyPath\tempdb.mdf')

Alter database tempdb modify file


(name = templog, filename = 'C:\MyPath\templog.ldf')

2. Arrêtez, puis redémarrez SQL Server.


Les certifications de produits partenaires ne sont pas une question de compatibilité ou de sécurité
Un produit tiers ou un fournisseur particulier peut recevoir une certification de logo Microsoft. Toutefois, la
certification des partenaires ou un logo Microsoft spécifique ne certifie pas la compatibilité ou l’aptitude à un
objectif particulier dans SQL Server.
Support
Si vous utilisez un sous-système avec SQL Server qui prend en charge les garanties d’opérations d’SQL Server
pour l’utilisation des bases de données transactionnelles, comme décrit dans cet article, Microsoft prend en
charge les applications basées sur SQL Server et SQL Server. Toutefois, les problèmes avec le sous-système ou
causés par celui-ci sont renvoyés au fabricant.
Pour les problèmes liés à la base de données tempdb, les services de support Microsoft vous demanderont de
déplacer la base de données tempdb. Contactez le fournisseur de votre appareil pour vérifier que vous avez
correctement déployé et configuré l’appareil pour une utilisation de base de données transactionnelle.
Microsoft ne certifie pas ou ne valide pas que les produits tiers fonctionnent correctement avec SQL Server. En
outre, Microsoft ne fournit aucune garantie, aucune garantie ou déclaration de l’aptitude d’un produit tiers à être
utilisé avec SQL Server.

Références
Pour plus d’informations, cliquez sur les numéros d’article suivants pour afficher les articles de la Base de
connaissances Microsoft :
Ajout SQL Server diagnostics supplémentaires pour détecter les problèmes d’I/S non signalés
Le message d’erreur 823 peut indiquer des problèmes matériels ou système dans SQL Server
Utilisation de la mise en cache des disques avec SQL Server
Description de la prise en charge des fichiers de base de données réseau dans SQL Server
Microsoft ne certifie pas que les produits tiers fonctionneront avec Microsoft SQL Server
Recommandations en matière de performances SQL Server sur les machines virtuelles Azure
Optimisation de vos plans de requête avec l’estimateur SQL Server Cardinality 2014
Performances des requêtes
Les informations contenues dans ce document représentent l’affichage actuel de Microsoft Corporation sur les
problèmes abordés à la date de publication. Étant donné que Microsoft doit répondre à l’évolution des
conditions du marché, il ne doit pas être interprété comme un engagement de la part de Microsoft, et Microsoft
ne peut pas garantir la précision des informations présentées après la date de publication.
Ce livre blanc est uniquement à des fins d’information. MICROSOFT N’OFFRE AUCUNE GARANTIE, EXPRESS,
IMPLICITE OU STATUTAIRE, CONCERNANT LES INFORMATIONS DE CE DOCUMENT.
L’utilisateur est tenu d’observer la réglementation relative aux droits d’auteur applicable dans son pays. Aucune
partie de ce document ne peut être reproduite, stockée ou introduite dans un système de restitution, ou
transmise à quelque fin ou par quelque moyen que ce soit (électronique, mécanique, photocopie,
enregistrement ou autre) sans la permission expresse et écrite de Microsoft Corporation.
Microsoft peut détenir des brevets, avoir déposé des demandes d’enregistrement de brevets ou être titulaire de
marques, droits d’auteur ou autres droits de propriété intellectuelle portant sur tout ou partie des éléments qui
font l’objet du présent document. Sauf stipulation expresse contraire d’un contrat de licence écrit de Microsoft, la
fourniture de ce document n’a pas pour effet de vous concéder une licence sur ces brevets, marques, droits
d’auteur ou autres droits de propriété intellectuelle.
© 2006 Microsoft Corporation. Tous droits réservés.
Microsoft, Windows, Windows Server et SQL Server sont des marques déposées ou des marques de Microsoft
Corporation aux États-Unis et/ou dans d’autres pays.
SQL Server systèmes doivent prendre en charge la « distribution garantie sur les supports stables » comme
indiqué dans la SQL Server des programmes de fiabilité des SQL Server’entreprise. Pour plus d’informations sur
les exigences en matière d’entrée et de sortie pour le moteur SQL Server base de données, voir Moteur de base
de données Microsoft SQL Server input/output requirements.
Améliorer les performances des requêtes en texte
intégral dans SQL Server
13/08/2021 • 4 minutes to read

Cet article fournit une méthode pour améliorer les performances des requêtes qui utilisent des prédicats en
texte intégral SQL Server.
Version du produit d’origine : SQL Server 2008 Developer, SQL Server 2008 Enterprise, SQL Server 2008 R2
Datacenter, SQL Server 2008 R2 Developer, SQL Server 2008 R2 Enterprise, SQL Server 2008 R2 Standard, SQL
Server 2012 Developer, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise
Numéro de la ko d’origine : 2549443

Résumé
Cet article décrit une méthode pour améliorer les performances des requêtes Microsoft SQL Server qui utilisent
des prédicats de recherche en texte intégral (tels que et ) et qui filtrent également CONTAINS CONTAINSTABLE les
données. Par exemple, cette méthode améliore les performances de la requête suivante :

select * from dbo.ftTest where CONTAINS(TextData, '"keyword"') and CDate > @date

Cette méthode vous permet de concevoir la requête, le schéma de table et l’index de texte intégral de telle sorte
que le moteur de recherche en texte intégral filtre les résultats avant qu’ils ne soient envoyés au moteur
relationnel. Par conséquent, le moteur relationnel n’a pas besoin de filtrer un jeu de données de grande taille.

Plus d’informations
Lorsque vous créez une requête de recherche en texte intégral, le facteur principal qui affecte les performances
de la requête est la quantité de données que le moteur de recherche en texte intégral doit traiter avant que les
données restantes ne sont envoyées au moteur relationnel. Dans SQL Server, vous pouvez améliorer les
performances de la requête en filtrant les lignes tôt pour réduire le nombre de lignes qui doivent être traitées
ultérieurement.
Dans les versions de SQL Server publiées avant SQL Server 2008, le moteur de recherche en texte intégral
renvoie toutes les lignes qui correspondent à un terme de recherche, puis le moteur relationnel applique tous
les filtres. Des améliorations ont été apportées à ce comportement SQL Server 2008, SQL Server 2008 R2 et
SQL Server 2012. Toutefois, il est difficile d’utiliser ces améliorations, car les index de recherche en texte intégral
sont organisés différemment des index de base de données. En outre, le moteur de recherche en texte intégral et
le moteur relationnel fonctionnent différemment. Par conséquent, la méthode que cet article décrit utilise la
fonction (TVF) pour filtrer les lignes tôt et pour réduire le nombre de lignes qui doivent être Table-Valued
traitées ultérieurement.
Par exemple, le plan de requête suivant renvoie 131051 lignes qui correspondent à une CONTAINS chaîne de
recherche. En outre, un opérateur de jointur dans le plan effectue un filtrage supplémentaire à l’aide d’une
recherche d’index.
Rows StmtText
-------------------- ---------------------------------------------------------------------------------------
-
1167 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate> '08/05/2019'

1167 |--Merge Join(Left Semi Join, MERGE:([FTSdb].[dbo].[fttest].[ID])=(FulltextMatch.[docid]), RESIDUA


5858 |--Sort(ORDER BY:([FTSdb].[dbo].[fttest].[ID] ASC))
5858 | |--Clustered Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[clidx1]), SEEK:([FTSdb].[
131051 |--Table-valued function

Toutefois, si la requête inclut la colonne de clé d’index unique en texte intégral en tant que prédicat, le moteur de
recherche en texte intégral peut utiliser le prédicat pour filtrer les résultats au niveau du texte intégral. Dans ce
cas, tvf renvoie une quantité de données beaucoup plus petite avant que le filtrage supplémentaire ne soit
appliqué. Par exemple, la requête suivante spécifie cinq valeurs qui doivent correspondre à la condition c2, et le
tvf renvoie uniquement les résultats qui correspondent aux cinq valeurs :

Rows StmtText
------------------------------------------------------------------------------------------------------------
-------------------------------
5 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate > '08/05/2019' and ID in (
654051, 644051, 649106, 465, 105)

5 |--Nested Loops(Left Semi Join, OUTER REFERENCES:([FTSdb].[dbo].[fttest].[ID]))


5 |--Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[idx1]), SEEK:([FTSdb].[dbo].[fttest].[ID]=(105) OR ...
5 |--Table-valued function

La capacité du moteur de recherche en texte intégral à faire descendre les valeurs utilisées par la clé d’index
unique est la base de la méthode suivante.
Si un prédicat contient une colonne de type de données, vous pouvez inclure des informations de date dans la
colonne de clé d’index unique afin que seules les lignes qui correspondent à ce DateTime prédicat soient émises.
Pour ce faire, vous devez incorporer logiquement les informations de date dans la colonne clé. Toutefois, vous de
devez également modifier le type de données de colonne clé et les applications qui utilisent la requête.
Pour implémenter la méthode, modifiez le type de données de l’ID de clé unique en texte intégral en BIGINT. Les
4 premiers octets de l’ID clé capturent les valeurs d’année, de mois et de date de la colonne de date, et les 4
derniers octets restent identiques. Par exemple, le premier octet de l’ID de clé peut faire référence à l’année,
l’octet suivant peut faire référence au mois et les 2 derniers octets peuvent faire référence à la date. L’application
doit prendre en charge ce changement de type de données.
Ensuite, traduisez un prédicat de plage en prédicat sur l’ID de clé. Par exemple, le x < CDate < y prédicat de
plage peut être traduit dans (x*2^32 < ID < y*2^32) le prédicat. Étant donné que le prédicat traduit est un
prédicat sur la touche de texte intégral, le prédicat est envoyé dans le texte intégral Streaming Table-Valued
Functions (STVF). Ce comportement effectue efficacement des recherches dans la plage de dates.
Message d’erreur lorsque vous exécutez l’instruction
DBCC CHECKDB sur une base de données qui
contient une ou plusieurs tables très grandes dans
SQL Server : Le délai d’attente s’est produit pendant
l’attente d’un verrou
15/08/2021 • 2 minutes to read

Cet article présente un problème dans lequel vous recevez un message d’erreur lorsque vous essayez d’exécuter
l’instruction sur une base de données qui contient une DBCC CHECKDB grande table dans SQL Server.
Version du produit d’origine : SQL Server 2012, SQL Server 2008
Numéro de la ko d’origine : 919155

Symptômes
Prenons l’exemple du scénario suivant :
Vous avez une base de données qui contient une ou plusieurs tables très grandes.
La taille des tableaux est généralement de plusieurs centaines de gigaoctets (Go).
Vous exécutez l’instruction CHECKDB DBCC sur la base de données dans SQL Server.
Dans ce scénario, un message d’erreur semblable à ce qui suit est écrit dans le journal SQL Server’erreurs :

<DateTime> Spid65 Timeout occurred while waiting for latch: class 'DBCC_MULTIOBJECT_SCANNER', id
00000002201DED0, type 4, Task 0x000000000C80BEB8 : 6, waittime 300, flags 0xa, owning task
0x0000000005A0AC58. Continue d’attendre.

Toutefois, DBCC CHECKDB l’instruction se termine correctement. Vous pouvez ignorer le message d’erreur en toute
sécurité.

Cause
Ce problème se produit parce qu’un délai d’SQL Server passe par les chaînes IAM (Index Allocation Map). Le
verrou mentionné dans le message d’erreur est utilisé pour empêcher d’autres threads d’accéder à une liste.
Cette liste est construite par un thread qui parcourt les chaînes IAM pour tous les index associés à un tableau
donné. Si la table est suffisamment grande pour que la traversée de ces chaînes IAM prenne plus de 5 minutes,
vous pouvez faire l’expérience du délai d’verrouillage. En outre, ce problème est généralement pire lorsque les
I/S disque sont lents.

Statut
Ce comportement est inhérent au produit.

S’applique à
SQL Server Développeur 2008
SQL Server 2008 Enterprise
SQL Server 2008 Express
SQL Server 2008 Express avec services avancés
SQL Server 2008 R2 Datacenter
SQL Server 2008 R2 Developer
SQL Server 2008 R2 Enterprise
SQL Server 2008 R2 Express
SQL Server 2008 R2 Express avec services avancés
SQL Server 2008 R2 Standard
SQL Server 2008 R2 Édition Standard for Small Business
SQL Server 2008 R2 Web
SQL Server 2008 R2 Workgroup
SQL Server 2008 Standard
SQL Server Web 2008
SQL Server 2008 Workgroup
SQL Server 2012 Business Intelligence
SQL Server Développeur 2012
SQL Server 2012 Enterprise
SQL Server 2012 Express
SQL Server 2012 Standard
SQL Server Web 2012
SQL Server 2012 Enterprise Core
Description des algorithmes de journalisation et de
stockage des données qui étendent la fiabilité des
données SQL Server
13/08/2021 • 20 minutes to read

Résumé
Cet article explique comment la journalisation Microsoft SQL Server et les algorithmes de données étendent la
fiabilité et l’intégrité des données.
Pour en savoir plus sur les concepts sous-jacents des moteurs et sur ARIES (Algorithm for Recovery and
Isolation Exploiting Sémantics), voir le document transactions ACM suivant sur les systèmes de base de données
(sous Volume 17, Numéro 1, mars 1992) :
ARIES : une méthode de récupération des transactions prise en charge Fine-Granularity verrouillage et
restaurations partielles à l’aide de la journalisation Write-Ahead journalisation
Le rédacteur principal de ce document est C. Mohan. Le document traite des techniques SQL Server pour
étendre la fiabilité et l’intégrité des données en relation avec les défaillances.
Nous vous recommandons de lire les articles suivants de la Base de connaissances Microsoft pour plus
d’informations sur la mise en cache et les discussions sur les modes d’échec alternatifs :
Description de la mise en cache des contrôleurs de disque dans SQL Server
Informations sur l’utilisation de caches de disque avec des SQL Server que chaque administrateur de
base de données doit connaître
Version du produit d’origine : SQL Server 2014, SQL Server 2012, SQL Server 2008, SQL Server 2005
Numéro de la ko d’origine : 230785

Plus d’informations
Avant de commencer la discussion approfondie, certains des termes utilisés tout au long de cet article sont
définis dans le tableau suivant.

T ERM E DÉF IN IT IO N

Batterie Installation de sauvegarde de batterie distincte et localisée


directement disponible et contrôlée par le mécanisme de
mise en cache pour éviter la perte de données.
Il ne s’agit pas d’un système UPS (Uninterruptible Power
Supply). Un ups ne garantit aucune activité d’écriture et peut
être déconnecté du périphérique de mise en cache.

Cache Mécanisme de stockage intermédiaire utilisé pour optimiser


les opérations d’opérations physiques et améliorer les
performances.
T ERM E DÉF IN IT IO N

Dirty Page Page contenant les modifications de données qui n’ont pas
encore été vidées vers un stockage stable. Pour plus
d’informations sur les tampons de page sales, consultez la
rubrique « Écriture depages» SQL Server Books Online.
Le contenu s’applique également Microsoft SQL Server 2012
et versions ultérieures.

Échec Tout ce qui peut provoquer une panne inattendue du


processus de SQL Server de travail. Exemples : panne
d’alimentation, réinitialisation de l’ordinateur, erreurs de
mémoire, autres problèmes matériels, secteurs de mauvaise
qualité, pannes de disque, défaillances système, etc.

Flush Forçage d’une mémoire tampon de cache vers un stockage


stable.

Verrou Objet de synchronisation utilisé pour protéger la cohérence


physique d’une ressource.

Stockage nonvolatile Tout support qui reste disponible en cas de défaillance du


système.

Page épinglée Page qui reste dans le cache de données et ne peut pas être
vidée vers un stockage stable tant que tous les
enregistrements journaux associés ne sont pas sécurisés
dans un emplacement de stockage stable.

Stockage stable Identique au stockage nonvolatile.

Stockage volatile Tout support qui ne restera pas intact en cas d’échec.

protocole Write -Ahead Logging (WAL )


Le terme protocole est un excellent moyen de décrire LAR. Il s’agit d’un ensemble spécifique et défini d’étapes
d’implémentation nécessaires pour s’assurer que les données sont stockées et échangées correctement et
qu’elles peuvent être récupérées à un état connu en cas de défaillance. Tout comme un réseau contient un
protocole défini pour échanger des données de manière cohérente et protégée, le RÉSEAU d’échange de
données décrit également le protocole pour protéger les données.
Le document ARIES définit la loi DER comme suit :
Le protocole WAL indique que les enregistrements journaux représentant les modifications apportées à
certaines données doivent déjà se trouver dans un stockage stable avant que les données modifiées ne soient
autorisées à remplacer la version précédente des données dans un stockage nonvolatile. Autrement dit, le
système n’est pas autorisé à écrire une page mise à jour dans la version de stockage nonvolatile de la page tant
qu’au moins les parties d’annuler les enregistrements du journal, qui décrivent les mises à jour de la page, n’ont
pas été écrites dans un stockage stable.
Pour plus d’informations sur la journalisation à l’avance, consultez la rubrique Write-Ahead Transaction Log SQL
Server Books Online.
SQL Server et LAS
SQL Server utilise le protocole WAL. Pour s’assurer qu’une transaction est correctement committede, tous les
enregistrements journaux associés à la transaction doivent être sécurisés dans un stockage stable.
Pour clarifier cette situation, prenons l’exemple spécifique suivant.

NOTE
Pour cet exemple, supposons qu’il n’y a pas d’index et que la page concernée est la page 150.

BEGIN TRANSACTION
INSERT INTO tblTest VALUES (1)
COMMIT TRANSACTION

Ensuite, décomposez l’activité en étapes de journalisation, comme décrit dans le tableau suivant.

STAT EM EN T A C T IO N S EF F EC T UÉES

BEGIN TRANSACTION Écrit dans la zone de cache du journal. Toutefois, il n’est pas
nécessaire de vider le stockage stable, car le SQL Server n’a
pas apporté de modifications physiques.

INSERT INTO tblTest


1. La page de données 150 est récupérée dans SQL Server
cache de données, si elle n’est pas déjà disponible.
2. La page est verrouillée, épinglée et marquée comme «
dirty » et les verrous appropriés sont obtenus.
3. Un enregistrement Insérer un journal est créé et ajouté au
cache du journal.
4. Une nouvelle ligne est ajoutée à la page de données.
5. Le verrou est relâché.
6. Les enregistrements journaux associés à la transaction ou
à la page n’ont pas besoin d’être vidés à ce stade, car toutes
les modifications restent dans un stockage volatile.

VALIDER LA TRANSACTION
1. Un enregistrement du journal de validation est créé et les
enregistrements journaux associés à la transaction doivent
être écrits dans un stockage stable. La transaction n’est pas
considérée comme étant engager tant que les
enregistrements journaux ne sont pas correctement affectés
à un stockage stable.
2. La page de données 150 reste dans SQL Server cache de
données et n’est pas immédiatement vidée vers un stockage
stable. Lorsque les enregistrements journaux sont
correctement sécurisés, la récupération peut rétablir
l’opération, si nécessaire.
3. Les verrous transactionnels sont libérés.

Ne vous confondez pas avec les termes « verrouillage » et « journalisation ». Bien qu’il soit important, le
verrouillage et la journalisation sont des problèmes distincts lorsque vous traitez la clé d’enregistrement en cas
de problème. Dans l’exemple précédent, SQL Server place généralement le verrou sur la page 150 pour le temps
nécessaire pour effectuer les modifications d’insertion physique sur la page, et non pendant toute la durée de la
transaction. Le type de verrou approprié est établi pour protéger la ligne, la plage, la page ou le tableau si
nécessaire. Pour plus d’informations sur les types de verrous, reportez-vous SQL Server sections de verrouillage
Books Online.
Si vous regardez l’exemple plus en détail, vous pouvez vous demander ce qui se produit lorsque les processus
LazyWriter ou CheckPoint s’exécutent. SQL Server tous les purges appropriés vers un stockage stable pour les
enregistrements journaux transactionnels associés à la page sales et épinglées. Cela permet de s’assurer que la
page de données du protocole WAL ne peut jamais être écrite dans un stockage stable tant que les
enregistrements journaux transactionnels associés n’ont pas été vidés.
SQL Server stockage stable et stable
SQL Server améliore les opérations de page de données et de journal en incluant la connaissance des tailles de
secteur de disque (généralement 4 096 octets ou 512 octets).
Pour conserver les propriétés DE LASO d’une transaction, l’SQL Server doit tenir compte des points d’échec. En
cas de défaillance, de nombreuses spécifications de disque ne garantissent qu’un nombre limité d’opérations
d’écriture de secteur. La plupart des spécifications garantissent la réalisation d’une écriture à secteur unique en
cas de défaillance.
SQL Server utilise des pages de données de 8 Ko et le journal (s’il est vidé) sur des multiples de la taille du
secteur. (La plupart des lecteurs de disque utilisent 512 octets comme taille de secteur par défaut.) En cas de
défaillance, les SQL Server peuvent prendre en compte des opérations d’écriture plus importantes qu’un secteur
en retentant la parité de journal et en faisant appel à des techniques d’écriture de nettoyage.
Détection de page de resserr
Cette option permet de détecter SQL Server opérations d’exploitation incomplètes provoquées par des pannes
de courant ou d’autres pannes du système. Lorsque la valeur est True, un bit est retourné pour chaque secteur
de 512 octets dans une page de base de données de 8 kilo-octets (Ko) chaque fois que la page est écrite sur le
disque. Si un bit se trouve dans un état incorrect lorsque la page est lue par SQL Server, la page a été écrite de
manière incorrecte . une page de papier est détectée. Les pages pleines sont détectées pendant la récupération,
car toute page écrite de manière incorrecte est susceptible d’être lue par la récupération.
Bien SQL Server pages de base de données soient de 8 Ko, les disques effectuent des opérations d’entreprise à
l’aide d’un secteur de 512 byte. Par conséquent, 16 secteurs sont écrits par page de base de données. Une page
pleine peut se produire si le système tombe en panne (par exemple, en raison d’une panne d’alimentation) entre
le moment où le système d’exploitation écrit le premier secteur de 512 byte sur le disque et la fin de l’opération
d’E/S de 8 Ko. Si le premier secteur d’une page de base de données est correctement écrit avant la défaillance, la
page de base de données sur le disque s’affiche comme mise à jour, bien qu’elle n’a peut-être pas réussi.
En utilisant des caches de contrôleurs de disque avec batterie, vous pouvez vous assurer que les données sont
écrites correctement sur le disque ou qu’elles ne sont pas écrites du tout. Dans ce cas, ne définissez pas la
détection de page de recherche sur « true », car cela n’est pas nécessaire.

NOTE
La détection des pages de recherche n’est pas activée par défaut dans SQL Server. Pour plus d’informations, voir le site
web MSDN suivant :

ALTER DATABASE SET Options (Transact-SQL)


Parité de journal
La vérification de la parité des journaux est similaire à la détection de page de ressaisie. Chaque secteur de 512
caractères contient des bits de parité. Ces bits de parité sont toujours écrits avec l’enregistrement journal et
évalués lors de la récupération de l’enregistrement journal. En forçant les écritures des journaux sur une limite
de 512 SQL Server, les opérations de validation sont écrites sur les secteurs de disque physique.
Impact sur les performances
Toutes les versions SQL Server ouvrir les fichiers journaux et de données à l’aide de la fonction Win32
CreateFile. Le membre dwFlagsAndAttributes inclut l’option lorsqu’ils sont ouverts FILE_FLAG_WRITE_THROUGH par
SQL Server.
FILE_FLAG_WRITE_THROUGH
Indique au système d’écrire via n’importe quel cache intermédiaire et d’aller directement sur le disque. Le
système peut toujours mettre en cache les opérations d’écriture, mais ne peut pas les vider.
L’option permet de s’assurer que lorsqu’une opération d’écriture renvoie une exécution réussie, les données sont
correctement stockées FILE_FLAG_WRITE_THROUGH dans un stockage stable. Cela s’aligne sur le protocole WAL qui
garantit les données.
De nombreux disques (SCSI et IDE) contiennent des caches intégrés de 512 Ko, 1 Mo ou plus. Toutefois, les
caches de disque reposent généralement sur un chargeur et non sur une solution avec batterie. Ces mécanismes
de mise en cache ne peuvent pas garantir des écritures sur un cycle d’alimentation ou un point de défaillance
similaire. Elles garantissent uniquement la fin des opérations d’écriture de secteur. C’est précisément pourquoi la
détection de parité d’écriture et de journal de construction a été intégrée SQL Server 7.0 et versions ultérieures.
À mesure que la taille des lecteurs augmente, les caches deviennent plus volumineux et peuvent exposer des
quantités de données plus importantes en cas de défaillance.
De nombreux fournisseurs de matériel fournissent des solutions de contrôleur de disque avec batterie. Ces
caches de contrôleurs peuvent conserver les données dans le cache pendant plusieurs jours et même permettre
au matériel de mise en cache d’être placé sur un deuxième ordinateur. Lorsque l’alimentation est correctement
restaurée, les données non écrites sont vidées avant que l’accès aux données supplémentaire ne soit autorisé.
Bon nombre d’entre elles permettent d’établir un pourcentage de cache de lecture ou d’écriture pour des
performances optimales. Certaines contiennent des zones de stockage de mémoire importantes. En fait, pour un
segment spécifique du marché, certains fournisseurs de matériel fournissent des systèmes de contrôleurs de
mise en cache de disque haute batterie avec 6 Go de cache. Celles-ci peuvent améliorer considérablement les
performances de la base de données.
Les implémentations de mise en cache avancées gèrent la demande en ne désactivant pas le cache du
contrôleur, car elles peuvent fournir de réelles fonctionnalités de réécriture en cas de réinitialisation du système,
de panne d’alimentation ou d’un autre FILE_FLAG_WRITE_THROUGH point d’échec.
Les transferts d’I/S sans l’utilisation d’un cache peuvent être plus longs en raison du temps mécanique
nécessaire pour déplacer les têtes de lecteur, les vitesses de rotation et d’autres facteurs limitants.
Ordre des secteurs
L’ordre des secteurs est une technique courante utilisée pour accroître les performances des O/S. Pour éviter les
mouvements mécaniques de la tête, les demandes de lecture/écriture sont triées, ce qui permet de récupérer ou
de stocker des données dans un mouvement plus cohérent de la tête.
Le cache peut contenir plusieurs demandes d’écriture de données et de journaux en même temps. Le protocole
WAL et l SQL Server de mise en œuvre du protocole WAL nécessitent le purgement des écritures du journal
dans un stockage stable avant que l’écriture de page puisse être émise. Toutefois, l’utilisation du cache peut
renvoyer le succès d’une demande d’écriture de journal sans que les données ne sont écrites sur le lecteur réel
(c’est-à-dire, écrites dans un stockage stable). Cela peut entraîner l’SQL Server la demande d’écriture de page de
données.
Avec l’implication du cache d’écriture, les données sont toujours considérées comme étant dans un stockage
volatile. Toutefois, à partir de l’appel WriteFile de l’API Win32, exactement SQL Server l’activité, un code de
retour réussi a été obtenu. SQL Server ou tout processus qui utilise l’appel d’API WriteFile peut déterminer
uniquement que les données ont correctement obtenu un stockage stable.
À des fins de discussion, supposons que tous les secteurs de la page de données sont triés pour être écrits avant
les secteurs des enregistrements journaux correspondants. Cela enfreint immédiatement le protocole WAA. Le
cache écrit une page de données avant les enregistrements du journal. À moins que le cache ne soit entièrement
alimenté par la batterie, une défaillance peut entraîner des résultats catastrophiques.
Lorsque vous évaluez les facteurs de performances optimaux pour un serveur de base de données, de
nombreux facteurs sont à prendre en compte. Le plus important est la question « Mon système autorise-t-il des
FILE_FLAG_WRITE_THROUGH fonctionnalités valides ? »

NOTE
Tout cache que vous utilisez doit entièrement prendre en charge une solution avec batterie. Tous les autres mécanismes
de mise en cache sont suspectés d’altération des données et de perte de données. SQL Server fait tout son possible pour
garantir la mise à jour de la qualité de l’accès en activant FILE_FLAG_WRITE_THROUGH .

Les tests ont montré que de nombreuses configurations de disque dur peuvent contenir une mise en cache
d’écriture sans la sauvegarde de batterie appropriée. Les lecteurs SCSI, IDE et EIDE tirez pleinement parti des
caches d’écriture. Pour plus d’informations sur la façon dont les SSD fonctionnent avec SQL Server, consultez
l’article du blog CSS SQL Server Engineers :
SQL Server et SSD - Notes de Learning RDORR - Partie 1
Dans de nombreuses configurations, le seul moyen de désactiver correctement la mise en cache d’écriture d’un
lecteur IDE ou EIDE est d’utiliser un utilitaire de fabricant spécifique ou des jumpers situés sur le lecteur lui-
même. Pour vous assurer que le cache d’écriture est désactivé pour le lecteur lui-même, contactez le fabricant
du lecteur.
Les lecteurs SCSI ont également des caches d’écriture. Toutefois, ces caches peuvent généralement être
désactivés par le système d’exploitation. En cas de question, contactez le fabricant du lecteur pour obtenir les
utilitaires appropriés.
Écriture de l’empilement de cache
L’empilement du cache d’écriture est similaire au secteur. La définition suivante a été directement tirée du site
web d’un fabricant de disque IDE de premier plan :
Normalement, ce mode est actif. Le mode cache d’écriture accepte les données d’écriture de l’hôte dans la
mémoire tampon jusqu’à ce que la mémoire tampon soit pleine ou que le transfert de l’hôte soit terminé.
Une tâche d’écriture de disque commence à stocker les données hôtes sur le disque. Les commandes d’écriture
de l’hôte continuent d’être acceptées et les données transférées vers la mémoire tampon jusqu’à ce que la pile
de commandes d’écriture soit pleine ou que la mémoire tampon de données soit pleine. Le lecteur peut réorder
les commandes d’écriture pour optimiser le débit du lecteur.
Réaffectation automatique d’écriture (AWR )
Une autre technique courante utilisée pour protéger les données consiste à détecter les secteurs de mauvaise
qualité lors de la manipulation des données. L’explication suivante provient du site web d’un fabricant de disque
IDE de premier plan :
Cette fonctionnalité fait partie du cache d’écriture et réduit le risque de perte de données pendant les opérations
d’écriture différée. Si une erreur de disque se produit pendant le processus d’écriture du disque, la tâche du
disque s’arrête et le secteur suspect est réaffecté à un pool de secteurs alternatifs situés à la fin du lecteur. Après
la réaffectation, la tâche d’écriture de disque se poursuit jusqu’à ce qu’elle soit terminée.
Cette fonctionnalité peut être puissante si la sauvegarde de batterie est fournie pour le cache. Cela permet une
modification appropriée au redémarrage. Il est préférable de détecter les erreurs de disque, mais la sécurité des
données du protocole WAL nécessiterait une nouvelle fois que cette action soit effectuée en temps réel et non de
manière différée. Dans les paramètres WR, la technique AWR ne peut pas tenir compte d’une situation dans
laquelle une écriture de journal échoue en raison d’une erreur de secteur, mais le lecteur est plein. Le moteur de
base de données doit immédiatement connaître la défaillance afin que la transaction puisse être correctement
abandonnée, que l’administrateur puisse être averti et que les mesures appropriées soient prises pour sécuriser
les données et corriger la situation de défaillance multimédia.
Sécurité des données
Un administrateur de base de données doit prendre plusieurs précautions pour garantir la sécurité des données.
Il est toujours bon de s’assurer que votre stratégie de sauvegarde est suffisante pour récupérer après une
défaillance catastrophique. Le stockage hors site et d’autres précautions sont appropriés.
Testez régulièrement l’opération de restauration de base de données dans une base de données secondaire
ou de test.
Assurez-vous que tous les périphériques de mise en cache peuvent gérer toutes les situations de panne
(coupure de courant, secteurs mauvais, lecteurs de mauvaises commandes, panne du système, verrouillages,
pics d’alimentation, et ainsi de suite).
Assurez-vous que votre périphérique de mise en cache :
A intégré la sauvegarde de batterie
Peut rééditer des écritures lors de l’alimentation
Peut être entièrement désactivé si nécessaire
Gère le remappage de secteurs non bon en temps réel
Activer la détection de pages de découverte. (Cela a peu d’effet sur les performances.)
Configurez les lecteurs RAID permettant un échange à chaud d’un lecteur de disque défectueux, si possible.
Utilisez des contrôleurs de mise en cache plus nouveaux qui vous permet d’ajouter davantage d’espace
disque sans redémarrer le système d’exploitation. Il peut s’agit d’une solution idéale.
Lecteurs de test
Pour sécuriser entièrement vos données, vous devez vous assurer que la mise en cache des données est
correctement gérée. Dans de nombreux cas, vous devez désactiver la mise en cache d’écriture du lecteur de
disque.

NOTE
Assurez-vous qu’un autre mécanisme de mise en cache peut gérer correctement plusieurs types d’échec.

Microsoft a effectué des tests sur plusieurs lecteurs SCSI et IDE à l’aide de SQLIOSim l’utilitaire. Cet utilitaire
simule une activité de lecture/écriture asynchrone importante sur un périphérique de données et un
périphérique de journal simulés. Les statistiques de performances des tests indiquent les opérations d’écriture
moyennes par seconde entre 50 et 70 pour un lecteur dont la mise en cache d’écriture est désactivée et une
plage de temps de travail par minute entre 5 200 et 7 200.
Pour plus d’informations sur SQLIOSim l’utilitaire, voir l’article suivant dans la Base de connaissances Microsoft :
Utilisation de l’utilitaire SQLIOSim pour simuler SQL Server activité sur un sous-système de disque
De nombreux fabricants d’ordinateurs commandent les lecteurs en désactivant le cache d’écriture. Toutefois, les
tests montrent que ce n’est pas toujours le cas. Par conséquent, testez toujours complètement.
Périphériques de données
Dans toutes les situations, à l’SQL Server, seuls les enregistrements journaux doivent être vidés. Lors
d’opérations non enregistrées, les pages de données doivent également être vidées vers un stockage stable . il
n’existe aucun enregistrement de journal individuel pour régénérer les actions en cas de défaillance.
Les pages de données peuvent rester en cache jusqu’à ce que le processus LazyWriter ou CheckPoint les vide
vers un stockage stable. L’utilisation du protocole WAL pour s’assurer que les enregistrements journaux sont
correctement stockés permet de s’assurer que la récupération peut récupérer une page de données à un état
connu.
Cela ne signifie pas qu’il est conseillé de placer des fichiers de données sur un lecteur mis en cache. Lorsque le
SQL Server vide les pages de données vers un stockage stable, les enregistrements du journal peuvent être
tronqués à partir du journal des transactions. Si les pages de données sont stockées dans un cache volatile, il est
possible de tronqué les enregistrements journaux qui seraient utilisés pour récupérer une page en cas de
défaillance. Assurez-vous que vos périphériques de données et de journaux s’accommodent correctement du
stockage stable.
Augmentation des performances
La première question qui peut vous être posée est la suivante : « J’ai un lecteur IDE qui était en cache. Mais
lorsque je l’ai désactivée, mes performances sont devenues inférieures aux attentes. Pourquoi ?
La plupart des lecteurs IDE testés par Microsoft s’exécutent à 5 200 TPM et les lecteurs SCSI à 7 200 TPM.
Lorsque vous désactivez la mise en cache d’écriture du lecteur IDE, les performances mécaniques peuvent
devenir un facteur.
Pour résoudre la différence de performances, la méthode à suivre est claire : « Corriger le taux de transactions ».
De nombreux systèmes de traitement des transactions en ligne (OLTP) nécessitent un taux de transactions élevé.
Pour ces systèmes, envisagez d’utiliser un contrôleur de mise en cache qui peut prendre en charge un cache
d’écriture approprié et fournir l’amélioration des performances souhaitée tout en garantissant l’intégrité des
données.
Pour observer des changements de performances significatifs qui se produisent SQL Server sur un lecteur de
mise en cache, le taux de transactions a été augmenté à l’aide de petites transactions.
Les tests montrent que l’activité d’écriture élevée des mémoires tampons inférieure à 512 Ko ou supérieure à 2
Mo peut entraîner un ralentissement des performances.
Prenons l'exemple suivant :

CREATE TABLE tblTest ( iID int IDENTITY(1,1), strData char(10))


GO

SET NOCOUNT ON
GO

INSERT INTO tblTest VALUES ('Test')


WHILE @@IDENTITY < 10000
INSERT INTO tblTest VALUES ('Test')

Voici des exemples de résultats de test pour SQL Server :

SCSI(7200 RPM) 84 seconds


SCSI(7200 RPM) 15 seconds (Caching controller)

IDE(5200 RPM) 14 seconds (Drive cache enabled)


IDE(5200 RPM) 160 seconds

Le processus d’habillage de toute la série d’opérations en une seule transaction s’exécute en environ INSERT
quatre secondes dans toutes les configurations. Cela est dû au nombre de purges de journaux requises. Si vous
ne créez pas de transaction unique, toutes les transactions sont traitées INSERT comme une transaction
distincte. Par conséquent, tous les enregistrements journaux de la transaction doivent être vidés. Chaque purge a
une taille de 512 octets. Cela nécessite une intervention importante du lecteur mécanique.
Lorsqu’une transaction unique est utilisée, les enregistrements journaux de la transaction peuvent être
regroupés et une seule écriture plus importante peut être utilisée pour vider les enregistrements du journal
collectés. Cela réduit considérablement l’intervention mécanique.
WARNING
Nous vous recommandons de ne pas augmenter l’étendue de votre transaction. Les transactions de longue durée
peuvent entraîner un blocage excessif et indésirable, ainsi qu’une surcharge accrue. Utilisez les SQL Server:D de données
SQL Server des compteurs de performance pour afficher les compteurs basés sur le journal des transactions. Plus
précisément, le journal des octets vidés/s peut indiquer de nombreuses petites transactions qui peuvent entraîner une
activité de disque mécanique élevée.

Examinez les instructions associées au purgement du journal pour déterminer si la valeur Des octets du journal
vidés/s peut être réduite. Dans l’exemple précédent, une seule transaction a été utilisée. Toutefois, dans de
nombreux scénarios, cela peut entraîner un comportement de verrouillage non prévu. Examinez la conception
de la transaction. Vous pouvez utiliser du code semblable à ce qui suit pour exécuter des lots afin de réduire
l’activité de purge des journaux fréquente et faible :

BEGIN TRAN
GO

INSERT INTO tblTest VALUES ('Test')


WHILE @@IDENTITY < 50
BEGIN
INSERT INTO tblTest VALUES ('Test')

if(0 = cast(@@IDENTITY as int) % 10)


BEGIN
PRINT 'Commit tran batch'
COMMIT TRAN
BEGIN TRAN
END
END
GO

COMMIT TRAN
GO

SQL Server les systèmes doivent prendre en charge la distribution garantie sur des supports stables, comme
décrit dans le document de téléchargement SQL Server conditions requises pour la révision du programme de
fiabilité des SQL Server. Pour plus d’informations sur les exigences en matière d’entrée et de sortie pour le
moteur de base de données SQL Server, voir Moteur de base de données Microsoft SQL Server Input/Output
Requirements
Gérer le journal d’SQL Server journal des erreurs
13/08/2021 • 2 minutes to read

Cet article explique comment gérer le journal d’SQL Server journal des erreurs.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2199578

Résumé
Le journal Microsoft SQL Server’erreurs contient de nombreuses informations générées par le SQL Server. Le
journal des erreurs contient des messages d’information, des avertissements et des informations sur les
événements critiques. Le journal des erreurs contient également des informations sur les messages générés par
l’utilisateur et des informations d’audit telles que les événements de connexion (réussite et échec).
Le journal des erreurs est un point de données précieux pour SQL Server administrateurs. En tant
qu’administrateur, vous devez gérer la taille des journaux d’erreurs afin de pouvoir les utiliser lorsqu’ils sont
nécessaires.
Le fichier journal des erreurs est initialisé chaque fois que l’instance de SQL Server est démarrée. Si l’instance de
SQL Server n’a pas été redémarré pendant un certain temps, le fichier journal des erreurs peut devenir
important. Si de nombreuses exceptions (par exemple, des violations d’accès) ou des événements critiques (par
exemple, des assertions SQL Server) se produisent, ces événements peuvent générer un grand nombre
d’informations écrites dans le journal d’erreurs SQL Server.

Réinitialisation des journaux SQL Server’erreurs


Vous pouvez utiliser la procédure stockée pour réinitialiser régulièrement les sp_cycle_errorlog journaux
d’erreurs. Pour plus d’informations, voir sp_cycle_errorlog (Transact-SQL).

Configuration du nombre et de la taille des journaux d SQL Server des


erreurs
Pour plus d’informations sur la configuration de la taille et du nombre de journaux d’erreurs SQL Server pour
une révision d’instance Configure SQL Server Error Logs.

Plus d’informations
Pour plus d’informations sur la configuration de ces valeurs à l’aide de T-SQL, consultez les billets de blog
suivants de Paul Randal et Jan Kare Lokna :
Limitation de la taille du fichier journal des erreurs SQL Server 2012
Limiter la taille du journal des erreurs
Afficher le journal SQL Server’erreurs dans SQL Server Management Studio (SSMS)

Exclusion de responsabilité de tiers


Exclusion de responsabilité de tiers
Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de
Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces
produits.
Transmettre une variable à une requête de serveur
lié
13/08/2021 • 2 minutes to read

Cet article explique comment transmettre une variable à une requête de serveur liée.
Version du produit d’origine : SQL Server Livres en ligne
Numéro de la ko d’origine : 314520

Résumé
Lorsque vous interrogez un serveur lié, vous effectuez fréquemment une requête pass-through qui utilise
OPENQUERY OPENROWSET le , ou OPENDATASOURCE instruction. Vous pouvez consulter les exemples de SQL Server
Books Online pour savoir comment faire à l’aide de chaînes Transact-SQL prédéfinées, mais il n’existe aucun
exemple de la façon de transmettre une variable à ces fonctions. Cet article fournit trois exemples de passage
d’une variable à une requête de serveur liée.
Pour transmettre une variable à l’une des fonctions pass-through, vous devez créer une requête dynamique.
Toutes les données qui incluent des guillemets doivent être particulièrement manipulées.

Transmettre des valeurs de base


Lorsque l’instruction Transact-SQL de base est connue, mais que vous devez transmettre une ou plusieurs
valeurs spécifiques, utilisez un code semblable à l’exemple suivant :

DECLARE @TSQL varchar(8000), @VAR char(2)


SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = '''''
+ @VAR + ''''''')'
EXEC (@TSQL)

Transmettre l’intégralité de la requête


Lorsque vous devez transmettre l’intégralité de la requête Transact-SQL ou le nom du serveur lié (ou les deux),
utilisez un code semblable à l’exemple suivant :

DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)


SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@OPENQUERY+@TSQL)

Utiliser la Sp_executesql stockée


Pour éviter les guillemets multicités, utilisez un code semblable à l’exemple suivant :
DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR

Voir aussi
Pour plus d’informations, voir les rubriques suivantes :
OPENROWSET (Transact-SQL)
OPENQUERY (Transact- SQL)
OPENDATASOURCE (Transact-SQL)
sp_executesql (Transact-SQL)
Interopérabilité des index Columnstore avec le
modèle de mémoire de grande page dans SQL
Server
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème de performances lorsque vous utilisez un modèle de mémoire de
fonctionnalité et de Columnstore Index grande page dans SQL Server.
Version du produit d’origine : SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL
Server 2019
Numéro de la ko d’origine : 3210239

Symptômes
Prenons l’exemple du scénario suivant :
Dans une instance de SQL Server, vous utilisez l’indicateur de suivi 834 comme indicateur de démarrage.
Cette opération permet d’activer les allocations de pages importantes par le gestionnaire de mémoire
SQL Server afin d’améliorer les performances de l’instance 64 bits.
Vous utilisez la Columnstore Index fonctionnalité.
Dans ce scénario, vous devez faire face à un ou plusieurs des problèmes de performances suivants :
Erreur du Scheduler non rapportant et vidages de mémoire associés dans le journal SQL Server’erreurs.
Les requêtes Columnstore déclenchent des problèmes de performances graves.
Une SQL Server instance déclenche des violations d’accès lorsque vous exécutez des requêtes
Columnstore.
Vous rencontrez l’erreur suivante lorsque vous exécutez sp_createstats :

Mémoire système insuffisante dans la réserve de ressources « par défaut » pour exécuter cette
requête

Résolution
Pour résoudre ce problème, supprimez l’indicateur de suivi 834 (-T834) de SQL Server paramètres de
démarrage sur SQL Server instances qui utilisent des index Columnstore. Dans ces environnements, Microsoft
ne recommande pas l’utilisation d’un modèle de mémoire et encourage les clients à revenir à un modèle
large page conventional de lock pages mémoire.

NOTE
À partir SQL Server 2019, l’indicateur de suivi (TF) 876 est disponible pour activer le modèle de mémoire de grande page
pour columnstore. Voir DBCC TRACEON - Trace Flags (Transact-SQL).

Plus d’informations
SQL Server mémoire
SQL Server pages de grande taille expliquées
Optimisation des options de SQL Server lors de l’exécution dans des charges de travail hautes performances
Message d’erreur 34052 et PBM génère des alertes
sur les stratégies qui ont un mode d’évaluation SQL
Server
14/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où un travail d’agent SQL génère de fausses alertes lors de
l’utilisation de la gestion basée sur la stratégie (PBM).
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2923956

Symptômes
Prenons l’exemple du scénario suivant :
Vous créez une stratégie à l’aide de PBM dans SQL Server.
Le mode d’évaluation de la stratégie est à l’heure prévue.
L’une des conditions de la stratégie contient la ExecuteSql() fonction.
Dans ce scénario, lorsque le travail de l’agent SQL Server est exécuté, l’agent génère de fausses alertes et le
message d’erreur suivant est consigné dans le fichier journal d’erreurs SQL Server :

Erreur : 34052, Gravité : 16, État : 1.


La stratégie <Policy name> ' ' a été violée.

NOTE
Ce problème ne se produit pas lorsque vous exécutez ce travail manuellement.

Cause
Ce problème se produit en raison de la violation d’une stratégie PBM créée. PbM place les messages de violation
de stratégie dans le journal des erreurs comme mécanisme de suivi. Cela indique que vous devez examiner la
configuration du serveur pour déterminer pourquoi la stratégie est enfreinte.
Le problème est dû à l’utilisation de la ExecuteSql() fonction dans la stratégie. Cette fonction permet à l’auteur
de la stratégie de créer une condition exprimée dans Transact-SQL et peut également exécuter n’importe quel
code Transact-SQL dans PBM. Par conséquent, par défaut, le contexte de sécurité sous lequel le code s’exécute est
un compte à faibles privilèges MS_PolicyTsqlExecutionLogin. Le compte MS_PolicyTsqlExecutionLogin n’a pas
d’autorisations pour une base de données en plus de la msdb base de données. Toutefois, lorsqu’un travail
programmé s’exécute, l’une des premières instructions ajoutées automatiquement est l’instruction use [
<DBName> ] . Cette instruction entraîne l’échec de la vérification de stratégie.
Lorsque vous exécutez ce travail manuellement, SQL Server utilise votre contexte de sécurité actuel. Tant que
vous êtes autorisé à exécuter les requêtes dans la stratégie, ce travail sera évalué correctement.

Solution de contournement
Pour résoudre ce problème, accordez au compte MS_PolicyTsqlExecutionLogin les droits corrects pour exécuter
les instructions nécessaires.
Par exemple, le rôle public est suffisamment bon pour que certaines requêtes s’exécutent. Ce rôle peut être
modifié si nécessaire en fonction des besoins de l’entreprise et des stratégies de l’entreprise. Toutefois, il est peu
probable qu’il change, car ce comportement est destiné à des raisons de sécurité.
La restauration ou la récupération peut échouer ou
prendre beaucoup de temps si la notification de
requête est utilisée dans une base de données
14/08/2021 • 4 minutes to read

Cet article vous aide à résoudre le problème où la restauration ou la récupération peut échouer ou prendre
beaucoup de temps si la notification de requête est utilisée dans une base de données.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2483090

Symptômes
Vous remarquerez peut-être un ou plusieurs des symptômes suivants avec une base de données configurée
pour les abonnements aux notifications de requête :
Symptôme 1 : la restauration de la base de données à partir de sa sauvegarde peut échouer avec le
message d’erreur 1205 si NEW_BROKER option est spécifiée pendant l’opération de restauration. En
outre, les fichiers de vidage sont générés dans SQL Server dossier Errorlog de l’utilisateur.
Symptôme 2 : la restauration de la base de données à partir de sa sauvegarde échoue et la base de
données est déconnectée. En outre, les messages suivants sont enregistrés dans le journal SQL
Server’erreurs :

<Datetime> Erreur spid61 : 9768, Gravité : 16, État : 1.


<Datetime> spid61 Un utilisateur de base de données associé à la conversation sécurisée a été
abandonné avant que les informations d’identification n’ont été échangées avec le point de
terminaison éloigné. Évitez d’utiliser DROP USER pendant la création des conversations.
<Datetime> spid61 N’a pas pu vérifier les notifications de requête en attente dans la base de
données « 5 » en raison de l’erreur suivante lors de l’ouverture de la base de données : « Un
utilisateur de base de données associé à la conversation sécurisée a été abandonné avant l’échange
des informations d’identification avec le point de terminaison éloigné. Évitez d’utiliser DROP USER
pendant la création des conversations. Échec de l’opération de nettoyage des abonnements aux
notifications de requête. Consultez les erreurs précédentes pour plus d’informations.
<Datetime> Erreur spid61 : 9001, Gravité : 16, État : 5.
<Datetime> spid61 Le journal de la base de données « Test » n’est pas disponible. Consultez le
journal des événements pour les messages d’erreur associés. Résolvez les erreurs et redémarrez la
base de données.
<Datetime> Erreur spid61 : 3314, Gravité : 21, État : 4.
<Datetime> spid61 Lors de l’opération enregistrée dans la base de données « Test » une erreur s’est
produite au niveau de l’ID de l’enregistrement journal (1835:7401:137). En règle générale, l’échec
spécifique est consigné précédemment en tant qu’erreur dans le service Windows journal des
événements. Restituer la base de données ou le fichier à partir d’une sauvegarde ou réparer la base
de données.
NOTE
Vous pouvez rencontrer le problème lors de la phase de récupération de la base de données. La récupération est
également exécuté sur une base de données lorsque la base de données est mise en ligne, que le serveur est
redémarré, etc.

Symptôme 3 : la restauration de la base de données à partir de sa sauvegarde peut prendre beaucoup de


temps et les messages semblables à ce qui suit sont consignés SQL Server journal des erreurs :

Date Time SPID Query notification delivery could not send message on dialog '{ Dialog ID }.'. La
remise a échoué pour la notification ' ? <qn:QueryNotification
xmlns:qn="https://schemas.microsoft.com/SQL/Notifications/QueryNotification" id="2881"
type="change" source="database" info="restart" database_id="7"
sid="0x010500000000000515000000FA48F22A6990BA52422C73DFF9030000"> <qn:Message>
4a4c696b-645c-40fd-bfef-4f2bc7c599b4;eb99973e-3cc9-4c7e-b4b9 -47d8cf590c43</qn:Message>
</qn:QueryNotification>' because of the following error in service broker: 'The conversation handle
<Conversation Handler> " « is not found.'

NOTE
Vous pouvez rencontrer le problème lors de la phase de récupération de la base de données. La récupération est
également exécuté sur une base de données lorsque la base de données est mise en ligne, que le serveur est
redémarré, etc.

Cause
Cause du symptôme 1 : lorsque vous spécifiez une option NEW_BROKER lors de l’opération de restauration,
SQL Server tente de tronqué toutes les tables liées au Service Broker. La troncation nécessite SCH_M verrouiller
l’objet tronqué. La transaction principale contient donc un SCH_M sur sysdesend. Lorsqu’une base de données
est récupérée ou restaurée, par défaut, SQL Server tente de tirer toutes les notifications de requête en suspens,
ce qui nécessite l’insertion de lignes (messages) dans une table sysdesend. Cette opération nécessite un
verrouillage SCH_S la table. Toutefois, cette opération se produit sur une autre transaction et la tentative
d’acquisition SCH_S verrou est bloquée par le verrou SCH_M la première transaction. Par conséquent, le thread
qui exécute la restauration est désormais bloqué sur une ressource qu’il possède, une situation appelée blocage
autonome. Le blocage est détecté par le moniteur de blocage et le thread est interrompu, ce qui met fin à
l’opération de restauration.
Pour plus d’informations sur les verrous, voir Modes de verrouillage. Les autres symptômes mentionnés dans la
section Symptômes sont dus à des problèmes connus documentés dans les articles de résolution mentionnés
dans la section Résolution ci-dessous.

Résolution
Solution de contournement pour Symptôme 1 : vous pouvez contourner le problème en activant l’indicateur de
suivi au niveau de la session 9109 avant de tenter l’opération de restauration. Un exemple de script est illustré
ci-dessous :
dbcc traceon (9109)
go
RESTORE DATABASE [Test]
FROM DISK = N'C:\TestBackup.bak' WITH FILE = 1,
MOVE N'test_Data' TO N'C:\test.mdf',
MOVE N'test_Log' TO N'C:\test_1.ldf',
NOUNLOAD,
STATS = 1,
NEW_BROKER
go
dbcc traceoff (9109)
go

NOTE
Une fois la base de données entièrement restaurée ou récupérée, il est vivement recommandé de vérifier que les
notifications de requête sont bien tirées. Le moyen le plus simple d’y parvenir consiste à modifier l’état de la base de
données en lecture seule et à la revenir en lecture-écriture. Il existe d’autres façons de vérifier cela, notamment le
détachement et le rattachement de la base de données, le redémarrage SQL Server, etc.

Vous pouvez également éviter le problème en ne spécifiant pas l’option NEW_BROKER sur l’opération de
restauration et en l’utilisez avec l’option NEW_BROKER une fois la base de données ALTER DATABASE restaurée.
Pour plus d’informations, voir DBCC TRACEON - Trace Flags (Transact-SQL).
Exécuter un objet COM basé sur une DLL en dehors
SQL Server processus
14/08/2021 • 9 minutes to read

Cet article explique comment exécuter un objet COM basé sur une DLL en dehors SQL Server processus.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 198891

Résumé
Microsoft SQL Server permet de charger et d’exécuter des objets COM (Component Object Model)
personnalisés par le biais d’un ensemble de procédures stockées OLE Automation ou de procédures stockées
étendues. Par défaut, les objets COM basés sur une DLL sont chargés comme dans le serveur de processus, ce
qui signifie que les objets COM ne sont pas uniquement chargés dans l’espace d’adressa traitement de la
mémoire SQL Server, mais qu’ils ont également un accès complet à cet espace d’adressa visite mémoire. Par
conséquent, un objet COM chargé dans l’espace SQL Server processus doit respecter les mêmes règles que
n’importe quel fichier DLL. Il est possible qu’un objet COM soit en train de SQL Server mémoire ou de fuite de
ressources, ce qui peut provoquer une instabilité.
S’il est suspecté qu’un objet COM affecte la robustesse du processus SQL Server, vous pouvez utiliser les étapes
de cet article pour insérer l’objet COM en dehors de l’espace SQL Server processus. L’implémentation de la
spécification DCOM (Distributed Component Object Model) de transparence de l’emplacement dans le système
d’exploitation a permis d’exécuter un objet COM basé sur DLL en dehors de l’espace SQL Server processus.
Le processus d’exécution d’un objet COM basé sur une DLL en dehors de l’espace d’adressarage de l’application
principale est appelé « remoting ». La remoting nécessite qu’un autre exécutable soit un processus de
substitution à la place du SQL Server exécutable. L’exécutable par défaut utilisé par le Gestionnaire de contrôle
de service DCOM (Rpcss.exe) est nommé Dllhost.exe. La structure de prise en charge DCOM utilise le fichier
Dllhost.exe pour charger la DLL dans son espace de traitement, puis utilise des paires proxy/stub pour marshaler
l’interface demandée de manière transparente au client, qui est dans ce cas le SQL Server. Ce exécutable peut
accepter plusieurs demandes d’interface/méthode simultanément. Une fois l’utilisation de l’interface terminée,
le Gestionnaire de contrôle de service DCOM (SCM) gère le nettoyage et le déchargement du fichier Dllhost.exe.
Il n’est pas prévu que les objets COM conservent les informations d’état entre les ins instantiations.
Les étapes suivantes peuvent s’appliquer à tout objet COM basé sur une DLL créé dans l’espace de traitement
SQL Server, qu’il soit ins instantié par le biais d’une procédure stockée étendue ou par le biais d’une procédure
stockée sp_OACreate étendue.

Plus d’informations
Les informations sur les deux méthodes de base que vous pouvez utiliser pour inssérer l’objet COM hors
processus suivent.

Le client COM demande l’accès à la remoting de l’objet


En modifiant la façon dont vous voquez l’objet COM, vous pouvez demander que l’objet soit créé en dehors de
l’espace d’adressa SQL Server’adresse.
Si l’objet COM est chargé à l’aide de la procédure, par sp_OACreate défaut, il est chargé en cours.
Toutefois, il existe un troisième paramètre facultatif à cette procédure que vous pouvez utiliser pour
indiquer le contexte de l’endroit où créer l’objet. Si ce paramètre n’est pas spécifié, la valeur par défaut de
5 (5) est utilisée, ce qui signifie que l’objet est exécuté à l’intérieur ou à l’extérieur du processus. Vous
devez modifier le paramètre sur quatre (4), ce qui indique à DCOM que ce composant doit s’exécuter en
tant qu’exécutable local. Utilisez une syntaxe similaire à l’exemple suivant pour informer explicitement
DCOM de l’exécuter hors processus à l’aide de sp_OACreate la procédure stockée :

DECLARE @object int


DECLARE @hr int
EXEC @hr = sp_OACreate 'SQLOLE.SQLServer', @object OUT, 4

Si l’objet COM est créé dans une procédure stockée étendue, le troisième paramètre de .
CoCreateInstance CoCreateInstanceEx CLSCTX_LOCAL_SERVER Ceci est illustré dans l’exemple de code
suivant à l’aide CoCreateInstance de :

HRESULT hr = CoCreateInstance(CLSID_Test, NULL, CLSCTX_LOCAL_SERVER,


IID_IUnknown, (void**)&piunknown);

Modifier le Registre pour forcer la remoting de l’objet


Si vous ne pouvez pas modifier le client COM pour demander la création de l’objet hors processus, deux
méthodes différentes existent pour forcer la création de l’objet hors processus.
Utilisez la visionneuse d’objets OLE/COM (Oleview.exe) livrée avec Visual C++ et recherchez le ProgID
sous tous les OLEComponent.Object objets. Sélectionnez l’objet COM, puis, dans le menu Objet,
CoCreateInstance sélectionnez Indicateurs. Assurez-vous que CLSCTX_LOCAL_SERVER seule la sélection est
sélectionnée. Ensuite, sous les onglets Implémentation et Serveur Inproc, sélectionnez Utiliser le
processus de substitution et laissez le chemin d’accès au substitut personnalisé vide, ce qui permet au
fichier Dllhost.exe d’être chargé et à la DLL COM de s’y trouver.
Utilisez les étapes suivantes pour mettre à jour manuellement le Registre.

WARNING
Toute modification incorrecte du Registre à l’aide de l’Éditeur du Registre ou d’une autre méthode peut entraîner
des problèmes sérieux. Ces problèmes peuvent nécessiter la réinstallation du système d'exploitation. Microsoft ne
peut pas garantir que ces problèmes puissent être résolus. Vous assumez l’ensemble des risques liés à la
modification du Registre.

1. Obtenez l’identificateur de classe (CLSID) de l’objet COM. Le CLSID est un nombre 128 bits et
considéré comme un identificateur global unique (GUID) utilisé pour identifier de manière unique
le composant, le module ou le fichier qui contient cet objet COM. Lors de la création d’objets COM
à l’aide des procédures stockées OLE Automation, le premier paramètre de la procédure stockée
est un identificateur programmatique ou le ProgID de l’objet OLE est utilisé pour dériver le CLSID.
Cette chaîne de caractères décrit la classe de l’objet OLE et a la forme suivante :

OLEComponent.Object

2. Vous pouvez utiliser l’identificateur programmatique pour rechercher l’identificateur de classe


d’un objet COM.
Ouvrez l’Éditeur du Registre (Regedit.exe) et, sous la clé, utilisez la méthode pour localiser une clé
avec le nom de votre < HKEY_CLASSES_ROOT Find OLEComponent.Object>. Vous le trouverez à
d’autres niveaux, mais il doit se trouver au niveau juste en dessous du HKEY_CLASSES_ROOT . Après
avoir localisé la clé, développez le dossier pour le nom de la clé et vous devez voir une sous-clé
nommée CLSID. Cliquez sur ce dossier pour voir les valeurs dans cette clé. Sur le côté droit de
l’écran se trouve un titre nommé (Valeur par défaut). Les données de cette clé doivent se faire sous
la forme suivante :
{59F929A0-74D8-11D2-8CBC-08005A390B09}

Notez cette valeur ou copiez-la dans Bloc-notes. Incluez les crochets.


3. Naviguez sous la HKEY_CLASSES_ROOT\CLSID clé et recherchez la sous-clé avec ce numéro de GUID.
Après avoir mis en surbrillez la clé, vous pouvez utiliser la fonction Rechercher dans l’Éditeur du
Registre (sous le menu Edition) et coller le GUID dans la boîte de HKEY_CLASSES_ROOT\CLSID
dialogue Rechercher. Assurez-vous que vous avez trouvé l’interface appropriée en inspectant la
sous-clé InprocServer32 sous cette clé, qui pointe vers l’emplacement de votre fichier DLL COM.
S’il existe une clé TypeLib, vérifiez cette valeur GUID. Cela doit être différent de ce que vous avez
noté à l’étape 1. Dans le cas contraire, vous avez le GUID TypeLib et non le GUID de l’objet COM. La
sous-clé ProgID aura la valeur « OLEComponent.Object.1 ». Celui qui se trouve à la fin est
uniquement pour cet exemple et est utilisé pour les informations de version.
4. Sous la sous-clé InprocServer32 du GUID, assurez-vous qu’une valeur existe et qu’elle est définie
sur Both ou Free pour vous assurer que le marshaling comprend le modèle de thread de l’objet
COM pour permettre l’exécution de COM en dehors de l’espace de processus ThreadingModel SQL
Server. S’il n’existe pas de valeur ou si elle est définie sur ThreadingModel Apartment, l’insération
d’objet COM risque de ne pas être cohérente.

NOTE
Si vous ajoutez la ThreadingModel valeur, veillez à tester votre objet COM avant de l’implémenter.

5. Mettez en surbrill niveau le numéro de GUID/sous-clé sous la HKEY_CLASSES_ROOT\CLSID clé. Dans le


menu Edition, cliquez sur Nouveau, puis sélectionnez Valeur de chaîne. Sous la colonne Nom,
tapez ce qui suit : AppID
6. Appuyez sur Entrée, puis insérez l’identificateur de classe ou le numéro GUID que vous avez noté à
l’étape 1 comme valeur. Le GUID doit être entre crochets comme dans l’exemple suivant :

{59F929A0-74D8-11D2-8CBC-08005A390B09}

L’identificateur d’application AppID est utilisé par DCOM pour associer la DLL à un fichier
exécutable.
7. Ajoutez une nouvelle sous-clé sous le nom et définissez son nom sur le même identificateur de
classe ou le même numéro GUID avec les HKEY_CLASSES_ROOT\AppID crochets insérés à l’étape
précédente.
8. Mettez en surbrillant le nom du GUID. Dans le menu Edition, cliquez sur Nouveau, puis
sélectionnez Valeur de chaîne. Sous la colonne Nom, tapez : DllSurrogate.
Laissez la colonne Données vide pour cette valeur. Étant donné que la colonne de données est vide,
cela indique à DCOM d’exécuter le fichier exécutable par défaut, Dllhost.exe et de charger l’objet
COM dans son espace de traitement.
9. Fermez l’Éditeur du Registre. Cliquez sur Démarrer , puis sur Exécuter . Dans la boîte de dialogue
Exécuter, tapez : DCOMCNFG.
Appuyez sur la touche Entrée pour ouvrir la boîte de dialogue Propriétés de configuration
COM distribuées. Cliquez sur l’onglet Propriétés par défaut et assurez-vous que l’option
Activer LE COM distribué sur cet ordinateur est sélectionnée. Si ce n’est pas le cas, sélectionnez-
le, puis cliquez sur Appliquer.
10. Assurez-vous que Windows compte d’utilisateur NT sous SQL Server est en cours d’exécution
dispose de l’autorisation Contrôle total sur les clés de Registre pour cet objet. Si les autorisations
ne sont pas suffisantes ou si les clés de Registre sont entrées de manière incorrecte, les erreurs
suivantes peuvent se produire lorsque vous créez l’objet COM :

Informations sur les erreurs OLE Automation


HRESULT : 0x80040154
Source : procédure étendue ODSOLE
Description : classe non enregistrée
Informations sur les erreurs OLE Automation
HRESULT : 0x80070005
Source : procédure étendue ODSOLE
Description : l’accès est refusé.
Informations sur les erreurs OLE Automation
HRESULT : 0x80080005
Source : procédure étendue ODSOLE
Description : échec de l’exécution du serveur

11. Testez et voyez si cela exécute le fichier Dllhost.exe et charge l’objet COM dans son espace de
traitement. Pour ce faire, le Kit Windows ressources NT se trouve sur Windows ordinateur NT sur
lequel SQL Server’exécution. Ouvrez une invite de commandes et, à partir de l’invite de
commandes, exécutez le fichier Tlist.exe, qui affiche tous les processus et leurs identificateurs de
processus associés, ou identificateurs de processus (PID). Dans le script Transact-SQL qui est
exécuté et après l’exécution de cet appel, mais avant la fin du script, utilisez ce qui suit pour
retarder la fin du script de 20 secondes supplémentaires sp_OACreate :

WAITFOR DELAY '000:00:20'

Exécutez le script, accédez immédiatement à l’invite de commandes et exécutez Tlist.exe fichier.


Notez le Dllhost.exe piD. Réexécutez Tlist.exe et passez le PID en tant que paramètre. Cela affiche
les DLLs qui sont chargées dans l’espace Dllhost.exe processus. L’objet COM basé sur une DLL doit
être répertorié comme s’exécutant dans ce processus. Une fois le script de retour, lTlist.exe de
nouveau révèle que le processus Dllhost.exe n’est plus en cours d’exécution.
Dans l’exemple de sortie suivant, ADODB. L’objet Connection est créé en dehors de l’espace SQL
Server processus. Cette capture instantanée à lTlist.exe été effectuée alors que l’objet COM existait
dans lDllhost.exe de traitement. Notez que le module Msado15.dll, qui est le module qui contient
l’objet COM, est chargé.
C:\>tlist dllhost
275 dllhost.exe
CWD: C:\NT40\system32\
CmdLine: C:\NT40\System32\dllhost.exe {00000514-0000-0010-8000-00AA006D2EA4}
-Embedding
VirtualSize: 19180 KB PeakVirtualSize: 19180 KB WorkingSetSize: 1780 KB
PeakWorkingSetSize: 1780 KB
NumberOfThreads: 3
278 Win32StartAddr:0x01001920 LastErr:0x00000000 State:Waiting
215 Win32StartAddr:0x00001b5e LastErr:0x00000000 State:Waiting
253 Win32StartAddr:0x00001b60 LastErr:0x000000cb State:Waiting
4.0.1381.105 shp 0x01000000 dllhost.exe
4.0.1381.130 shp 0x77f60000 ntdll.dll
4.0.1381.121 shp 0x77dc0000 ADVAPI32.dll
4.0.1381.133 shp 0x77f00000 KERNEL32.dll
4.0.1381.133 shp 0x77e70000 USER32.dll
4.0.1381.115 shp 0x77ed0000 GDI32.dll
4.0.1381.131 shp 0x77e10000 RPCRT4.dll
4.0.1381.117 shp 0x77b20000 ole32.dll
6.0.8267.0 shp 0x78000000 MSVCRT.dll
0x1f310000 msado15.dll
2.30.4265.1 shp 0x766f0000 OLEAUT32.dll
4.0.1381.72 shp 0x77bf0000 rpcltc1.dll

Références
OLE Automation Stored Procedures (Transact-SQL)
Planifier et automatiser les sauvegardes de bases de
données SQL Server dans SQL Server Express
13/08/2021 • 5 minutes to read

Cet article présente l’utilisation d’un script transact-SQL et d’un programmeur de tâches Windows pour
automatiser les sauvegardes de bases de données SQL Server Express de manière programmée.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2019698

Résumé
SQL Server Express éditions ne proposent aucun moyen de planifier des travaux ou des plans de maintenance,
car le composant agent SQL Server n’est pas inclus dans ces éditions. Par conséquent, vous devez utiliser une
approche différente pour la back up de vos bases de données lorsque vous utilisez ces éditions.
Actuellement, SQL Server Express utilisateurs peuvent back up leurs bases de données à l’aide de l’une des
méthodes suivantes :
Utilisez SQL Server Management Studio ou Azure Data Studio. Pour plus d’informations sur l’utilisation de ces
outils pour la back up d’une base de données, voir les liens suivants :
Créer une sauvegarde de base de données complète
Didacticiel : Back up and restore databases using Azure Data Studio
Utilisez un script transact-SQL qui utilise la famille de commandes BACKUP DATABASE. Pour plus
d’informations, voir BACKUP (Transact-SQL).
Cet article explique comment utiliser un script Transact-SQL avec le Programmeur des tâches pour automatiser
les sauvegardes de bases de données SQL Server Express données de manière programmée.

NOTE
Cela s’applique uniquement SQL Server éditions express et non aux éditions SQL Server Express Base de données locale.

Plus d’informations
Vous devez suivre les quatre étapes suivantes pour SQL Server bases de données de gestion à l’aide Windows
de planification des tâches :
Étape A : créez une procédure stockée pour la back up de vos bases de données.
Connecter à votre instance SQL instance express et créez sp_BackupDatabases procédure stockée dans votre
base de données maître à l’aide du script à l’emplacement suivant :
SQL_Express_Backups
Étape B : Téléchargez l’outil SQLCMD (le cas échéant).
sqlcmd L’utilitaire vous permet d’entrer des instructions Transact-SQL, des procédures système et des fichiers
de script. Dans SQL Server 2014 et versions inférieures, l’utilitaire est livré dans le cadre du produit. À partir
SQL Server 2016, l’utilitaire est sqlcmd proposé en téléchargement séparé. Pour plus d’informations, examinez
l’utilitaire sqlcmd.
Étape C : Créer un fichier de lots à l’aide de l’éditeur de texte.
Dans un éditeur de texte, créez un fichier de lots nommé Sqlbackup.bat, puis copiez le texte de l’un des exemples
suivants dans ce fichier, selon votre scénario :
Tous les scénarios ci-dessous D:\SQLBackups s’utilisent en tant que titulaire d’une place. Le script doit être
ajusté à l’emplacement approprié du lecteur et du dossier de sauvegarde dans votre environnement.
Si vous utilisez l’authentification SQL, assurez-vous que l’accès au dossier est limité aux utilisateurs
autorisés, car les mots de passe sont stockés en texte clair.

NOTE
Le dossier du fichier exécutable se trouve généralement dans les variables Path du serveur une fois SQL Server installé ou
après l’avoir installé en tant SQLCMD qu’outil autonome. Toutefois, si la variable Path ne liste pas ce dossier, vous pouvez
ajouter son emplacement à la variable Path ou spécifier le chemin d’accès complet à l’utilitaire.

Exemple 1 : Sauvegardes complètes de toutes les bases de données dans l’instance nommée locale de
SQLEXPRESS à l’aide de l Windows authentification.

// Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"

Exemple 2 : Sauvegardes différentielle de toutes les bases de données dans l’instance nommée locale de
SQLEXPRESS à l’aide d’un SQLLogin et de son mot de passe.

// Sqlbackup.bat
sqlcmd -U <YourSQLLogin> -P <StrongPassword> -S .\SQLEXPRESS -Q "EXEC sp_BackupDatabases@backupLocation
='D:\SQLBackups', @BackupType='D'"

NOTE
SQLLogin doit avoir au moins le rôle Opérateur de sauvegarde dans SQL Server.

Exemple 3 : Journal des sauvegardes de toutes les bases de données dans l’instance nommée locale de
SQLEXPRESS à l’aide Windows Authentification unique

// Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"

Exemple 4 : Sauvegardes complètes de la base de données USERDB dans l’instance nommée locale de
SQLEXPRESS à l’aide de l’authentification Windows données

// Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',
@databaseName='USERDB', @backupType='F'"

De même, vous pouvez effectuer une sauvegarde différentielle de USERDB en le césant dans « D » pour le
paramètre et une sauvegarde de journal de USERDB en le césant dans « L » pour @backupType le
@backupType paramètre.
Étape D : Planifier un travail à l’aide Windows de planification des tâches pour exécuter le fichier de lots que
vous avez créé à l’étape B. Pour ce faire, suivez les étapes suivantes :
1. Sur l’ordinateur qui s’SQL Server Express, cliquez sur Démarrer, puis dans la zone de texte tapez

Planification des tâches.


2. SousMeilleure correspondance, cliquezsur Programmeur des tâches pour le lancer.
3. Dans le Programmeur des tâches, cliquez avec le bouton droit sur Bibliothèque de planification des
tâches et cliquez sur Créer une tâche de base....
4. Entrez le nom de la nouvelle tâche (par exemple : SQLBackup) et cliquez sur Suivant .
5. Sélectionnez Tous les jours pour le déclencheur de tâche, puis cliquez sur Suivant.
6. Définissez la récurrence sur un jour et cliquez surSuivant .
7. Sélectionnez Démarrer un programme en tant qu’action, puis cliquez sur Suivant.
8. Cliquez sur Parcourir, cliquez sur le fichier de lots que vous avez créé à l’étape C, puis cliquez sur
Ouvrir.
9. Cochez la case Ouvrir la boîte de dialogue Propriétés pour cette tâche lorsque je clique sur Terminer.
10. Dans l’onglet Général,
a. Examinez les options de sécurité et assurez-vous que le compte d’utilisateur qui exécute la tâche
est le suivant (répertorié sous Lors de l’exécution de la tâche, compte d’utilisateur suivant :)
Le compte doit au moins avoir les autorisations Lecture et Exécution pour lancer l’utilitaire sqlcmd.
En outre,
Si vous utilisez Windows’authentification par lots dans le fichier de lots, assurez-vous que le
propriétaire des autorisations de tâche doit SQL sauvegardes.
Si vous SQL l’authentification par lots dans le fichier de lots, l’SQL utilisateur doit avoir les
autorisations nécessaires pour SQL sauvegardes.
b. Ajustez les autres paramètres en fonction de vos besoins.

TIP
En tant que test, exécutez le fichier de commandes de l’étape C à partir d’une invite de commandes qui est démarrée avec
le même compte d’utilisateur propriétaire de la tâche.

N’ignorez pas les choses suivantes lorsque vous utilisez la procédure documentée dans cet article :
Le service De planification des tâches doit être en cours d’exécution au moment où le travail est
programmé pour s’exécuter. Nous vous recommandons de définir le type de démarrage pour ce service
commeautomatique . Cela permet de s’assurer que le service sera en cours d’exécution même lors d’un
redémarrage.
Il doit y avoir beaucoup d’espace sur le lecteur sur lequel les sauvegardes sont en cours d’écriture. Nous
vous recommandons de nettoyer régulièrement les anciens fichiers du dossier de sauvegarde pour vous
assurer que vous ne manquez pas d’espace disque. Le script ne contient pas la logique de nettoyage des
anciens fichiers.

Références complémentaires
Vue d’ensemble du Programmeur de tâches
Configurer et dépanner un serveur lié à une base
de données Oracle dans SQL Server
14/08/2021 • 14 minutes to read

Cet article explique comment configurer un serveur lié à partir d’un ordinateur exécutant Microsoft SQL Server
vers une base de données Oracle et fournit des étapes de dépannage de base pour les erreurs courantes que
vous pouvez connaître lorsque vous définissez un serveur lié sur une base de données Oracle.
Version du produit d’origine : Microsoft SQL Server 2005 Édition Standard, Microsoft SQL Server 2005
Developer Edition, Microsoft SQL Server 2005 Êdition Entreprise, Microsoft SQL Server 2005 Express Edition,
Microsoft SQL Server 2005 Workgroup Edition
Numéro de la ko d’origine : 280106

Résumé
Cet article explique comment configurer un serveur lié à partir d’un ordinateur exécutant Microsoft SQL Server
vers une base de données Oracle et fournit des étapes de dépannage de base pour les erreurs courantes que
vous pouvez connaître lorsque vous définissez un serveur lié sur Oracle. La plupart des informations de cet
article s’appliquent aux environnements configurés pour utiliser le fournisseur MICROSOFT OLEDB pour Oracle
(MSDAORA). Évitez d’utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de
modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt le fournisseur OLE DB
d’Oracle.
Pour plus d’informations sur la configuration d’un serveur lié à l’aide du fournisseur OLEDB d’Oracle, voir
Comment être opérationnel avec Oracle et les serveurs liés.

IMPORTANT
La version actuelle du pilote ODBC Microsoft pour Oracle est conforme à la spécification ODBC 2.5, tandis que le
fournisseur OLE DB pour Oracle est un fournisseur d’API OCI Oracle 7 natif. Le pilote et le fournisseur utilisent le client
SQL*Net (ou client Net8 pour Oracle 8x) et la bibliothèque OCI (Oracle Call Interface), ainsi que d’autres composants
clients Oracle, pour se connecter aux bases de données Oracle et récupérer des données. Les composants clients Oracle
sont importants et doivent être configurés correctement pour se connecter correctement aux bases de données Oracle à
l’aide du pilote et du fournisseur.

À partir de Microsoft Data Access Components (MDAC) version 2.5 et versions ultérieures, le pilote ODBC
Microsoft et le fournisseur OLE DB ne viennent en charge que Oracle 7 et Oracle 8i avec les limitations suivantes
:
Les types de données spécifiques à Oracle 8.x, tels que LESB, BLOB, BFILE, NCHAR, NCLOB et
NVARCHAR2, ne sont pas pris en charge.
La fonctionnalité Unicode sur les serveurs Oracle 7.x et 8.x n’est pas prise en charge.
Plusieurs instances de client Oracle, ou plusieurs domiciles Oracle, ne sont pas pris en charge, car elles
reposent sur la première occurrence de la maison Oracle dans la variable SYSTEM PATH.
Le renvoi de plusieurs jeux de résultats à partir d’une procédure stockée ou d’une instruction SQL par lot
n’est pas pris en charge à l’aide d’ADO ou d’OLEDB.
Les jointeurs externes imbrmbrées ne sont pas pris en charge.
La persistance XML n’est pas prise en charge.
La version supérieure à 8i n’est pas prise en charge à l’aide de ces pilotes.

NOTE
Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft.
Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Étapes de la mise en place d’un serveur lié à Oracle


1. Vous devez installer le logiciel client Oracle sur l’ordinateur qui exécute SQL Server où le serveur lié est
installé.
2. Installez le pilote que vous souhaitez sur l’ordinateur qui exécute SQL Server. Microsoft prend
uniquement en charge Fournisseur Microsoft OLE DB pour Oracle et le pilote ODBC Microsoft pour
Oracle. Si vous utilisez un fournisseur tiers ou un pilote tiers pour vous connecter à Oracle, vous devez
contacter le fournisseur respectif pour tout problème que vous pouvez avoir à l’aide de son fournisseur
ou de son pilote.
3. Si vous utilisez Fournisseur Microsoft OLE DB pour Oracle et le pilote ODBC Microsoft pour Oracle,
prenez en compte les facteurs suivants :
Le fournisseur OLE DB et le pilote ODBC inclus dans Microsoft Data Access Components (MDAC)
nécessitent SQL*Net 2.3.x ou une version ultérieure. Vous devez installer le logiciel client Oracle
7.3.x, ou une version ultérieure, sur l’ordinateur client. L’ordinateur client est l’ordinateur qui
exécute SQL Server.
Assurez-vous que MDAC 2.5, ou une version ultérieure, est installé sur l’ordinateur qui exécute
SQL Server. Avec MDAC 2.1 ou une version antérieure, vous ne pouvez pas vous connecter aux
bases de données qui utilisent Oracle 8. x ou version ultérieure.
Pour que MDAC 2.5, ou versions ultérieures, fonctionne avec le logiciel client Oracle, le Registre
doit être modifié sur l’ordinateur client qui exécute SQL Server comme indiqué dans le tableau
suivant.

Oracle
Client Microsoft Windows 2000 and later versions
--------------------------------------------------------------------------

7.x [HKEY_LOCAL_MACHINE\SOFTWARE
Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="xa73.dll"
"OracleSqlLib"="SQLLib18.dll"
"OracleOciLib"="ociw32.dll"

8.0 [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="xa80.dll"
"OracleSqlLib"="sqllib80.dll"
"OracleOciLib"="oci.dll"

8.1 [HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient8.dll"
"OracleSqlLib"="orasql8.dll"
"OracleOciLib"="oci.dll"

4. Redémarrez l’ordinateur qui s’exécute SQL Server après avoir installé le logiciel client Oracle.
5. Sur l’ordinateur qui exécute SQL Server, définissez un serveur lié à l’aide du script suivant.

-- Adding linked server (from SQL Server Books Online):


/* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name']
[, [@provider =] 'provider_name']
[, [@datasrc =] 'data_source']
[, [@location =] 'location'] [, [@provstr =] 'provider_string']
[, [@catalog =] 'catalog']
*/

EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'

-- Adding linked server login:


/* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself']
[,[@locallogin =] 'locallogin']
[,[@rmtuser =] 'rmtuser']
[,[@rmtpassword =] 'rmtpassword']
*/

EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'

-- Help on the linked server:


EXEC sp_linkedservers
EXEC sp_helpserver
select * from sysservers

NOTE
Si vous utilisez le pilote ODBC Microsoft pour Oracle, vous pouvez utiliser le paramètre @datasrc pour spécifier
un nom de DSN. Pour une connexion sans DSN, la chaîne de fournisseur est fournie par le biais du @provstr
paramètre. Avec Fournisseur Microsoft OLE DB pour Oracle, utilisez l’alias de serveur Oracle configuré dans le
fichier TNSNames.Ora pour le @datasrc paramètre. Pour plus d’informations, voir la rubrique « sp_addlinkedserver
» dans SQL Server Books Online.

Messages d’erreur courants et résolution des problèmes


IMPORTANT
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des
problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces
étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le
restaurer en cas de problème. Pour plus d’informations sur la façon de la back up et de la restauration du Registre, cliquez
sur le numéro d’article suivant pour afficher l’article de la Base de connaissances Microsoft : 322756 How to back up and
restore the Registry in Windows

Vous pouvez utiliser l’une des deux méthodes suivantes pour récupérer des informations étendues sur les
erreurs que vous pouvez voir lors de l’exécution d’une requête distribuée.
Méthode 1
Connecter à SQL Server l’SQL Server Management Studio et exécutez le code suivant pour activer
l’indicateur de suivi 7300.

DBCC Traceon(7300)

Méthode 2
Capturez l’événement « Erreurs OLEDB » qui se trouve dans la catégorie d’événement « Erreurs et
avertissements » dans SQL Profiler. Le format du message d’erreur est le suivant :

Interface::Method failed with hex-error code.

Vous pouvez rechercher du code d’erreur hexadm dans le fichier Oledberr.h inclus dans le Kit de
développement logiciel (SDK) MDAC.
Voici une liste des messages d’erreur courants qui peuvent se produire, ainsi que des informations sur la façon
de résoudre le message d’erreur.

NOTE
Si vous utilisez SQL Server version 2005 ou ultérieure, ces messages d’erreur peuvent être légèrement différents.
Toutefois, les ID d’erreur de ces messages d’erreur sont identiques à ceux des versions antérieures de SQL Server. Par
conséquent, vous pouvez les identifier par les ID d’erreur. Pour les problèmes liés aux performances, recherchez SQL Server
Books Online pour la rubrique Optimiser les requêtes distribuées.

Message 1

Erreur 7399 : le fournisseur OLE DB « %ls » pour le serveur lié « %ls » a signalé une erreur. %ls

Activer l’indicateur de suivi 7300 ou utiliser SQL Profiler pour capturer l’événement Erreurs OLEDB afin
de récupérer des informations d’erreur OLEDB étendues.
Message 2a

« ORA-12154 : TNS : n’a pas pu résoudre le nom du service »

Message 2b

« Le client Oracle(tm) et les composants réseau n’ont pas été trouvés. Ces composants sont fournis
par Oracle Corporation et font partie de l’installation logicielle cliente Oracle version 7.3.3 (ou
supérieure) »

Ces erreurs se produisent en cas de problème de connectivité au serveur Oracle. Examinez la section
Techniques pour résoudre les problèmes de connectivité au serveur Oracle ci-dessous pour résoudre
d’autres problèmes.
Message 3

Erreur 7302 : Impossible de créer une instance du fournisseur OLE DB « MSDAORA » pour le serveur
lié « %ls ».

Assurez-vous que MSDAORA.dll fichier est enregistré correctement. (Le MSDAORA.dll est le fournisseur
Microsoft OLE DB pour le fichier Oracle.) Utilisez RegSvr32.exe pour inscrire Fournisseur Microsoft OLE
DB pour Oracle.
NOTE
Si vous utilisez un fournisseur Oracle tiers et que votre fournisseur Oracle ne peut pas s’exécuter en dehors d’un
processus SQL Server, autorisez-le à s’exécuter in-process en modifiant les options du fournisseur. Pour modifier
les options du fournisseur, utilisez l’une des méthodes suivantes.
Méthode 1 Recherchez la clé de Registre suivante. Ensuite, modifiez la valeur de l’entrée AllowInProcess
(DWORD) sur 1. Cette clé de Registre se trouve sous le nom du fournisseur correspondant :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName .

Méthode 2 Définissez l’option Autoriser l’inprocesseur directement via SQL Server Entreprise lorsque vous
ajoutez un nouveau serveur lié. Cliquez sur Options du fournisseur, puis cochez la case Autoriser inProcess.

Message 4

Erreur 7303 : Impossible d’initialiser l’objet de source de données du fournisseur OLE DB «


MSDAORA » pour le serveur lié « %ls ». [Message renvoyé par le fournisseur OLE/DB : ORA-01017 :
nom d’utilisateur/mot de passe non valide ; connexion refusée] Suivi des erreurs OLE DB [OLE/DB
Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d].

Ce message d’erreur indique que le serveur lié n’a pas de mappage de connexion correct. Vous pouvez
exécuter la sp_helplinkedsrvlogin procédure stockée pour définir correctement les informations de
connexion. Vérifiez également que vous avez spécifié les paramètres corrects pour la configuration du
serveur lié.
Message 5

Erreur 7306 : Impossible d’ouvrir la table « %ls » à partir du fournisseur OLE DB « MSDAORA » pour
le serveur lié « %ls ». La table spécifiée n’existe pas. [Message renvoyé par le fournisseur OLE/DB : La
table n’existe pas.] [Message renvoyé par le fournisseur OLE/DB : ORA-00942 : la table ou la vue
n’existe pas] Suivi des erreurs OLE DB [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset
returned 0x80040e37: The specified table does not exist.].

Erreur 7312 : Utilisation incorrecte du schéma et/ou du catalogue pour le fournisseur OLE DB « %ls »
pour le serveur lié « %ls ». Un nom en quatre partie a été fourni, mais le fournisseur n’expose pas les
interfaces nécessaires pour utiliser un catalogue et/ou un schéma.

Erreur 7313 : un schéma ou un catalogue non valide a été spécifié pour le fournisseur « %ls » pour le
serveur lié « %ls ».

Erreur 7314 : le fournisseur OLE DB « %ls » pour le serveur lié « %ls » ne contient pas la table « %ls ».
La table n’existe pas ou l’utilisateur actuel n’a pas d’autorisations sur cette table.

Si vous recevez ces messages d’erreur, il se peut qu’une table soit manquante dans le schéma Oracle ou
que vous ne soyez pas autorisé à le faire. Vérifiez que le nom du schéma a été tapé en minuscules. Le cas
alphabétique du tableau et des colonnes doit être tel que spécifié dans les tables système Oracle.
Côté Oracle, une table ou une colonne créée sans guillemets doubles est stockée en minuscules. Si la
table ou la colonne est entourée de guillemets doubles, la table ou la colonne est stockée telle qu’elle est.
L’appel suivant indique si la table existe dans le schéma Oracle. Cet appel indique également le nom exact
de la table.
sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'

Message 6

Erreur 7413 : Connexion au serveur lié « %ls » (fournisseur OLE DB « %ls »). Activez la délégation ou
utilisez une connexion SQL Server à distance pour l’utilisateur actuel. Msg 18456, Level 14, State 1,
Line 1 Login failed for user ' ' .

Ce message d’erreur indique qu’une requête distribuée est tentée pour une connexion authentifiée
microsoft Windows sans mappage de connexion explicite. Dans un environnement de système
d’exploitation dans lequel la délégation de sécurité n’est pas prise en charge, les connexions authentifiées
par Windows NT ont besoin d’un mappage explicite à une connexion à distance et à un mot de passe
créés à l’aide de sp_addlinkedsrvlogin .
Message 7

Erreur 7391 : L’opération n’a pas pu être effectuée car le fournisseur OLE DB « MSDAORA » pour le
serveur lié « %ls » n’a pas pu commencer une transaction distribuée. OLE DB error trace [OLE/DB
Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]

Vérifiez que les versions OCI sont correctement enregistrées, comme décrit plus tôt dans cet article.

NOTE
Si les entrées de Registre sont correctes, le fichier MtxOCI.dll est chargé. Si le MtxOCI.dll n’est pas chargé, vous ne
pouvez pas effectuer de transactions distribuées sur Oracle à l’aide de Fournisseur Microsoft OLE DB pour Oracle
ou à l’aide du pilote ODBC Microsoft pour Oracle. Si vous utilisez un fournisseur tiers et que vous recevez l’erreur
7391, vérifiez que le fournisseur OLE DB que vous utilisez prend en charge les transactions distribuées. Si le
fournisseur OLE DB prend en charge les transactions distribuées, vérifiez que le MSDTC (Microsoft Distributed
Transaction Coordinator) est en cours d’exécution et que l’accès réseau est activé.

Message 8

Erreur 7392 : Impossible de démarrer une transaction pour le fournisseur OLE DB « MSDAORA »
pour le serveur lié « %ls ». Suivi des erreurs OLE DB [OLE/DB Provider 'MSDAORA'
ITransactionLocal::StartTransaction returned 0x8004d013: ISOLEVEL=4096].

Le fournisseur OLE DB a renvoyé l’erreur 7392, car une seule transaction peut être active pour cette
session. Cette erreur indique qu’une instruction de modification de données est tentée contre un
fournisseur OLE DB lorsque la connexion se trouve dans une transaction explicite ou implicite, et que le
fournisseur OLE DB ne prend pas en charge les transactions imbrmbrées. SQL Server nécessite cette
prise en charge afin que, dans certaines conditions d’erreur, elle puisse mettre fin aux effets de
l’instruction de modification des données tout en continuant la transaction.
Si la valeur est ON, SQL Server ne nécessite pas la prise en charge des SET XACT_ABORT transactions
imbrmbrées du fournisseur OLE DB. Par conséquent, exécutez avant d’exécuter des instructions de
modification de données sur des tables distantes dans SET XACT_ABORT ON une transaction implicite ou
explicite. Faites-le au cas où le fournisseur OLE DB que vous utilisez ne prend pas en charge les
transactions imbrmbrées.

Techniques de résolution des problèmes de connectivité au serveur


Oracle
Pour déboguer les problèmes de connectivité Oracle avec le pilote ODBC Microsoft pour Oracle ou le
Fournisseur Microsoft OLE DB pour Oracle, suivez les étapes suivantes :
1. Utilisez l’utilitaire Oracle SQL Plus (utilitaire de requête basé sur une ligne de commande) pour vérifier
que vous pouvez vous connecter à Oracle et récupérer des données.

NOTE
Si vous ne pouvez pas vous connecter à Oracle et récupérer des données, vous avez une installation ou une
configuration des composants clients Oracle mauvaise ou vous n’avez pas correctement créé un alias de service
TNS (Transparent Network Substrate) pour le serveur Oracle lorsque vous avez utilisé l’utilitaire de configuration
simple SQL*Net ou Oracle Net8 Easy Configuration. Contactez votre administrateur de base de données Oracle
pour vérifier que les composants Oracle dont vous avez besoin sont correctement installés et configurés.

2. Vérifiez la version du client Oracle (version SQL Net) installée * sur l’ordinateur. Le pilote ODBC Microsoft
pour Oracle et le Fournisseur Microsoft OLE DB pour Oracle nécessitent l’installation de SQL*Net version
2.3 ou ultérieure sur l’ordinateur client.
La connectivité de SQL Plus (l’outil de requête client Oracle) peut sembler fonctionner, mais vous devez
redémarrer votre ordinateur pour que la connectivité ODBC/OLE DB fonctionne correctement.

NOTE
Lorsque vous utilisez Oracle 8i, le fichier .rgs est vide.

3. Si le client Oracle est installé et que vous recevez une erreur qui indique que les composants client Oracle
7.3 ou ultérieur doivent être installés sur l’ordinateur, vérifiez que la variable d’environnement PATH sur
l’ordinateur client contient le dossier dans lequel le client Oracle a été installé, par exemple,
Oracle_Root\Bin. Si vous ne trouvez pas ce dossier, ajoutez-le à la variable PATH pour résoudre l’erreur.
4. Vérifiez que le Ociw32.dll est dans le dossier Oracle_Root\bin. Ce .dll ne peut pas exister à un autre
emplacement sur l’ordinateur client. Assurez-vous que les DLL de composant client Oracle (par exemple,
le fichier Core40.dll et le fichier Ora.dll) n’existent pas en dehors du dossier Oracle_Root ou des * sous-
dossiers.
5. Vérifiez qu’une seule version du client Oracle est installée sur l’ordinateur. Plusieurs versions de SQL*Net
ne peuvent pas exister sur le même ordinateur client avec des interférences et des opérations critiques
(par exemple, recherche de TNS et d’alias).
6. Microsoft recommande d’avoir une installation locale du client Oracle et de ne pas le faire en m mappage
d’un client Oracle distant sur votre ordinateur, puis de l’inclure dans le chemin d’accès du système pour
vous connecter à Oracle via ODBC/OLE DB. Toutefois, le fournisseur et le pilote sont testés avec un client
Oracle installé localement et non sur un partage réseau.

Voir aussi
Historique des pilotes pour Microsoft SQL Server
Serveurs liés (Moteur de base de données)
L’espace utilisé par une table n’est pas
complètement libéré après l’utilisation d’une
instruction DELETE pour supprimer des données de
la table dans SQL Server
14/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème qu’une table utilise ne peut pas être libéré après avoir utilisé une
instruction DELETE pour supprimer toutes les données de la table.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 913399

Symptômes
Après avoir utilisé une instruction DELETE dans Microsoft SQL Server pour supprimer des données d’une table,
vous remarquerez peut-être que l’espace utilisé par la table n’est pas complètement libéré. Lorsque vous essayez
ensuite d’insérer des données dans la base de données, vous pouvez recevoir le message d’erreur suivant :

Could not allocate space for object 'TableName ' in database 'DatabaseName ' because the 'PRIMARY'
filegroup is full.

NOTE
TableName représente le nom de la table. DatabaseName représente le nom de la base de données qui contient la
table.

Cause
Ce problème se produit car SQL Server libère uniquement toutes les pages qu’une table de tas utilise lorsque
les conditions suivantes sont vraies :
Une suppression se produit dans cette table.
Un verrou au niveau de la table est maintenu.

NOTE
Une table de tas est une table qui n’est pas associée à un index en cluster.

Si les pages ne sont pas désattribuées, les autres objets de la base de données ne peuvent pas réutiliser les
pages.
Toutefois, lorsque vous activez un niveau d’isolation de ligne dans une base de données SQL Server 2005, les
pages ne peuvent pas être libérées même si un verrou au niveau de la versioning-based table est maintenu.
Pour plus d’informations sur les niveaux d’isolation des lignes, voir la rubrique « Utilisation des niveaux
d’isolation basés sur le système de version de ligne » dans versioning-based SQL Server 2005 Books Online.
Solution de contournement
Pour contourner ce problème, utilisez l’une des méthodes suivantes :
Incluez un conseil TABLOCK dans l’instruction DELETE si un niveau d’isolation basé sur le contrôle de
version de ligne n’est pas activé. Par exemple, utilisez une instruction semblable à ce qui suit :

DELETE FROM <TableName> WITH (TABLOCK)

NOTE
<TableName> représente le nom de la table.

Utilisez l’instruction TRUNCATE TABLE si vous souhaitez supprimer tous les enregistrements de la table.
Par exemple, utilisez une instruction semblable à ce qui suit :

TRUNCATE TABLE <TableName>

Créez un index en cluster sur une colonne du tableau. Pour plus d’informations sur la création d’un index
en cluster sur une table, voir la rubrique « Création d’un index en cluster » dans SQL Server Books Online.
Description de la prise en charge SQL Server de
données sur les volumes compressés
15/08/2021 • 4 minutes to read

Cet article décrit le comportement SQL Server de stockage des fichiers de base de données sur les lecteurs
compressés.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 231347

Résumé
SQL Server bases de données ne sont pas pris en charge sur les volumes compressés NTFS ou FAT, sauf dans
des circonstances particulières pour SQL Server 2005 et les versions ultérieures. Un volume compressé ne
garantit pas les écritures alignées sur le secteur, qui sont nécessaires pour garantir la récupération
transactionnelle dans certaines circonstances.
Pour SQL Server versions 2005 et ultérieures, le stockage des fichiers de base de données sur les lecteurs
compressés se comporte comme suit :
Si votre fichier de données appartient à un groupe de fichiers en lecture seule, le fichier est autorisé.
Si votre fichier de données appartient à une base de données en lecture seule, le fichier est autorisé.
Si votre fichier journal des transactions appartient à une base de données en lecture seule, le fichier est
autorisé.
Si vous essayez d’ouvrir une base de données en lecture/écriture avec des fichiers sur un lecteur
compressé, SQL Server génère l’erreur suivante :

Msg 5118, Level 16, State 2, Line 1 The file « < file_name > » is compressed but does not reside in a
read-only database or filegroup. Le fichier doit être décompressé.

Pour plus d’informations sur les exclusions pour les bases de données en lecture seule et les groupes de fichiers
en lecture seule dans SQL Server 2008, consultez le site web MSDN suivant :
Compression et groupes de fichiers en lecture seule

NOTE
Cette rubrique s’applique également SQL Server 2012 et versions ultérieures.

Plus d’informations
Bien qu’il soit physiquement possible d’ajouter SQL Server bases de données sur des volumes compressés, cela
n’est pas recommandé et nous ne le prisent pas en charge. Les raisons sous-jacentes de ce problème sont les
suivantes :
Performances
Les bases de données sur des volumes compressés peuvent entraîner une surcharge de performances
importante. Le montant varie en fonction du volume d’I/S et du rapport entre les écritures et les lectures.
Toutefois, une dégradation de plus de 500 % a été observée dans certaines conditions.
Récupération de base de données
Une récupération transactionnelle fiable de la base de données nécessite des écritures alignées sur le
secteur, et les volumes compressés ne la prisent pas en charge. Un deuxième problème concerne la
gestion de l’espace de récupération interne. SQL Server réserve en interne de l’espace alloué dans les
fichiers de base de données pour les récupérations. Il est possible sur les volumes compressés de
recevoir une erreur d’espace vide sur les fichiers préalloqués, ce qui interfère avec la récupération réussie.
Dans certains scénarios, une sauvegarde SQL Server vers un volume compressé ou un dossier compressé n’est
pas réussie. Lorsque ce problème se produit, vous recevez l’un des messages d’erreur suivants.
Dans Windows Vista et les versions ultérieures de Windows

STATUS_FILE_SYSTEM_LIMITATION l’opération demandée n’a pas pu être terminée en raison d’une


limitation du système de fichiers
Erreur du système d’exploitation 665(L’opération demandée n’a pas pu être effectuée en raison d’une
limitation du système de fichiers)

Dans les versions antérieures de Windows

STATUS_INSUFFICIENT_RESOURCES ressources système insuffisantes existent pour effectuer l’erreur


du système d’exploitation du service demandée 1450(Des ressources système insuffisantes existent
pour terminer la demande ou 33(Le processus ne peut pas accéder au fichier car un autre processus a
verrouillé une partie du fichier.)

Pour plus d’informations sur ce problème, voir un fichier fortement fragmenté dans un volume NTFS peut ne
pas croître au-delà d’une certaine taille.

NOTE
Le correctif logiciel pour Windows Vista et les versions ultérieures de Windows décrits dans l’article de la 967351 de la
Ko peut ne pas résoudre le problème des sauvegardes SQL Server qui ne sont pas réussies sur un volume compressé
ou sur un dossier compressé. Toutefois, ce correctif vous aidera à médiationr le problème.
Après avoir appliqué le correctif logiciel décrit dans l’article de la base de 967351, vous devez mettre en forme le
lecteur sur lequel la compression est activée à l’aide du /L paramètre. Lorsque vous formatez le lecteur sur lequel la
compression est activée à l’aide du paramètre, le segment Octets par enregistrement de fichier passe de 1 024 octets à
/L 4 096 octets.

SQL Server sauvegardes sur des volumes compressés peuvent économiser de l’espace disque. Toutefois, ils
peuvent augmenter l’utilisation du processeur pendant l’opération de sauvegarde. Nous vous recommandons
toujours d’utiliser les installations de sommes de contrôle BACKUP pour garantir l’intégrité des données.
SQL Server systèmes doivent prendre en charge la distribution garantie sur des supports stables, comme
indiqué dans la SQL Serverdes programmes de fiabilité des SQL Server'
Pour plus d’informations sur les exigences en matière d’entrée et de sortie pour le moteur de base de données
SQL Server, voir Moteur de base de données Microsoft SQL Server d’entrée/sortie requises
Description de la prise en charge des fichiers de
base de données réseau dans SQL Server
15/08/2021 • 10 minutes to read

Cet article décrit la prise en charge des fichiers de base de données réseau dans SQL Server et explique
comment configurer SQL Server pour stocker une base de données sur un serveur réseau ou un serveur de
stockage NAS.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 304261

Résumé
Microsoft recommande généralement d’utiliser un réseau san (Stockage Area Network) ou un disque connecté
localement pour le stockage de vos fichiers de base de données Microsoft SQL Server, car cette configuration
optimise les performances SQL Server et la fiabilité. Par défaut, l’utilisation de fichiers de base de données
réseau stockés sur un serveur réseau ou un serveur NAS (Network Attached Stockage) n’est pas activée pour les
SQL Server.
Toutefois, vous pouvez configurer SQL Server pour stocker une base de données sur un serveur réseau ou un
serveur NAS. Les serveurs utilisés à cet effet doivent respecter SQL Server conditions requises pour l’ordre
d’écriture des données et les garanties d’écriture par écriture. Ces informations sont détaillées dans la section
Plus d’informations.
Les conditions suivantes décrivent l’utilisation des fichiers de base de données réseau stockés sur un serveur
réseau ou un serveur NAS :
Cette utilisation est activée par défaut dans Microsoft SQL Server 2008 R2 et versions ultérieures.
Cette utilisation nécessite que l’indicateur de suivi de démarrage -T1807 fonctionne dans Microsoft SQL
Server 2008 et versions antérieures. Pour plus d’informations sur la façon d’activer les indicateurs de
suivi de démarrage, Moteur de base de données options de démarrage du service.

Windows Périphériques whQL (Hardware Quality Lab)


Les serveurs Microsoft Windows et réseaux ou serveurs de stockage NAS qui sont qualifiés pour le laboratoire
de qualité du matériel (WHQL) Windows répondent automatiquement aux commandes d’écriture de données et
aux garanties d’écriture par écriture requises pour prendre en charge un périphérique de stockage SQL Server.
Microsoft prend en charge les problèmes liés à l’application et au stockage dans ces configurations.

NOTE
Pour être prise en charge par SQL Server, la solution de stockage NAS doit également répondre à toutes les conditions
requises répertoriées dans le document de téléchargement : SQL Server programme de fiabilité des entrées et des
produits .

Autres appareils
Si vous utilisez un périphérique de stockage non qualifié WHQL avec des SQL Server qui prend en charge les
garanties d’opérations d’I/S pour l’utilisation des bases de données transactionnelles décrites dans cet article,
Microsoft prend entièrement en charge les applications SQL Server et SQL Server. Toutefois, les problèmes avec
l’appareil ou son sous-système de stockage, ou causés par celui-ci, sont renvoyés au fabricant de l’appareil. Si
vous utilisez un dispositif de stockage non qualifié WHQL qui ne prend pas en charge les garanties d’opérations
d’opérations d’exploitation pour l’utilisation des bases de données transactionnelles décrites dans cet article,
Microsoft ne peut pas assurer la prise en charge des applications basées sur SQL Server ou SQL Server. Pour
déterminer si votre périphérique de stockage non qualifié WHQL prend en charge les garanties d’opérations
d’I/S d’utilisation des bases de données transactionnelles décrites dans cet article ou conçues pour une
utilisation de base de données, consultez le fournisseur de votre appareil. En outre, contactez le fournisseur de
votre appareil pour vérifier que vous avez correctement déployé et configuré l’appareil pour une utilisation de
base de données transactionnelle.

Plus d’informations
Par défaut, dans SQL Server 2008 et les versions antérieures, vous ne pouvez pas créer une base de données
SQL Server sur un partage de fichiers réseau. Toute tentative de création d’un fichier de base de données sur un
emplacement réseau mappé ou UNC génère l’un des messages d’erreur suivants :
Message d'erreur 1

5105 « Erreur d’activation de périphérique »

Message d'erreur 2

5110 « Le fichier « file_name » se trouve sur un périphérique réseau non pris en charge pour les
fichiers de base de données. »

Ce comportement est normal. L’indicateur de suivi 1807 contourne la vérification et vous permet de configurer
SQL Server des fichiers de base de données réseau. SQL Server et la plupart des autres systèmes de base de
données d’entreprise utilisent un journal des transactions et la logique de récupération associée pour maintenir
la cohérence de la base de données transactionnelle en cas de défaillance du système ou d’arrêt non ingérable.
Ces protocoles de récupération s’appuient sur la possibilité d’écrire directement sur le support disque afin que
lorsqu’une demande d’écriture d’entrée/sortie du système d’exploitation soit revenir au gestionnaire de base de
données, le système de récupération peut s’assurer que l’écriture est terminée ou que l’exécution de l’écriture
peut être garantie. Toute défaillance d’un composant logiciel ou matériel respectant ce protocole peut entraîner
une perte de données partielle ou totale ou une altération en cas de défaillance du système. Pour plus
d’informations sur ces aspects des protocoles de journalisation et de récupération dans SQL Server, voir
Description des algorithmesde journalisation et de stockage de données qui étendent la fiabilité des données
dans SQL Server .
Microsoft ne prend pas en charge SQL Server fichiers de base de données en réseau sur des serveurs NAS ou
de stockage réseau qui ne répondent pas à ces exigences d’écriture et d’écriture.
En raison des risques d’erreurs réseau qui compromettent l’intégrité de la base de données, ainsi que des
implications éventuelles en matière de performances qui peuvent résulter de l’utilisation de partages de fichiers
réseau pour stocker des bases de données, Microsoft recommande de stocker les fichiers de base de données
sur des sous-systèmes de disque locaux ou sur des réseaux sans (SAN) Stockage.
Un système NAS (Network Attached Storage) est un système de stockage basé sur des fichiers que les clients
attachent via le redirecteur réseau à l’aide d’un protocole réseau (tel que TCP/IP). Par défaut, si l’accès à une
ressource de disque nécessite qu’un partage soit mappé, ou si la ressource disque apparaît en tant que serveur
distant via un chemin UNC (par exemple, Nom_serveur\Nom_Share) sur le réseau, le système de stockage de
disque n’est pas pris en charge comme emplacement pour les bases de données \ SQL Server.
Problèmes de performances
SQL Server, comme d’autres systèmes de base de données d’entreprise, peut placer une charge importante sur
un sous-système d’O/S. Dans la plupart des applications de base de données de grande taille, la configuration et
l’optimisation des O/S physiques jouent un rôle important dans les performances globales du système. Il existe
trois principaux facteurs de performances des opérations d’opérations d’entreprise à prendre en compte :
Bande passante d’I/S : bande passante agrégée, généralement mesurée en mégaoctets par seconde et qui
peut être soutenue par un périphérique de base de données.
Latence d’O/S : la latence, généralement mesurée en millisecondes, entre une demande d’I/S par le système
de base de données et le point où la demande d’O/S est terminée.
Coût de l’UC : coût de l’UC hôte, généralement mesuré en microsecondes processeur, pour que le système de
base de données remplisse une seule unité d’UC.
L’un de ces facteurs d’O/S peut devenir un goulot d’étranglement et vous devez tenir compte de tous ces
facteurs lorsque vous concevez un système d’O/S pour une application de base de données.
Dans sa forme la plus simple, une solution NAS utilise une pile logicielle de redirecteur réseau standard, une
carte d’interface réseau standard et des composants Ethernet standard. L’inconvénient de cette configuration est
que tous les fichiers D/S sont traitées via la pile réseau et sont soumis aux limites de bande passante du réseau
lui-même. Cela peut créer des problèmes de performances et de fiabilité des données, en particulier dans les
programmes qui nécessitent des niveaux élevés d’I/S de fichier, tels que SQL Server. Dans certaines
configurations NAS testées par Microsoft, le débit d’E/S était d’un tiers (1/3) celui d’une solution de stockage
directement attachée sur le même serveur. Dans cette même configuration, le coût processeur pour effectuer
une O/S via le périphérique NAS était deux fois plus élevé que celui d’une unité d’UC locale. À mesure que les
périphériques NAS et l’infrastructure réseau évoluent, ces ratios peuvent également s’améliorer par rapport au
stockage connecté direct ou aux réseaux sans. En outre, si vos données d’application sont principalement mises
en cache dans le pool de mémoires tampons de base de données et que vous ne rencontrez aucun des goulots
d’étranglement d’O/S décrits, les performances sur un système NAS sont probablement adéquates pour votre
application.

Considérations sur la sauvegarde et la restauration


SQL Server fournit l’interface VDI (Virtual Device Interface) pour la sauvegarde. L’environnement VDI fournit aux
éditeurs de logiciels de sauvegarde un moyen très performant, évolutif et fiable d’effectuer des sauvegardes
automatiques et de restaurer SQL Server bases de données.
Le logiciel de sauvegarde fonctionne sur des fichiers de base de données stockés sur des périphériques NAS via
VDI sans prise en charge spéciale spécifique au nas. Toutefois, cela se traduit par un trafic réseau supplémentaire
pendant la sauvegarde et la restauration. Lors de la sauvegarde via VDI, SQL Server lit les fichiers à distance et
transmet les données au logiciel de sauvegarde tiers qui s’exécute sur l’ordinateur SQL Server. L’opération de
restauration est analogue.
Pour éviter la surcharge réseau supplémentaire, le fournisseur de sauvegarde doit fournir une prise en charge
spécifique nas par le fournisseur de sauvegarde et le fournisseur NAS. SQL Server VDI permet au logiciel de
sauvegarde de tirer parti des technologies matérielles (fractionnement en miroir) ou logicielles (copie sur
écriture) pris en charge par les périphériques NAS pour effectuer des copies rapides des fichiers de base de
données localement sur le NAS. Ces technologies évitent non seulement la surcharge de copie des fichiers sur le
réseau pour la sauvegarde, mais elles peuvent également réduire les temps de restauration par ordre de
magnitude.
Les sauvegardes stockées sur NAS sont vulnérables aux mêmes défaillances qui affectent les fichiers de base de
données stockés sur le NAS. Vous devez envisager de protéger ces sauvegardes en les copiant sur d’autres
supports.
Cau t i on

Vous pouvez être en état d’altération de la base de données dans la sauvegarde si vous utilisez des technologies
de sauvegarde NAS sans SQL Server prise en charge VDI. Ce type d’altération inclut des pages corrompues ou
des incohérences entre les fichiers journaux et de données s’ils sont stockés sur des appareils distincts. SQL
Server pouvez pas détecter les pages ou les incohérences tant que vous n’avez pas restauré la base de données
et accédez aux données endommagées. Microsoft ne prend pas en charge l’utilisation de technologies de
sauvegarde NAS qui ne sont pas coordonnées avec SQL Server.
La prise en charge des sauvegardes et la prise en charge des fournisseurs NAS pour SQL Server VDI varient.
Pour plus d’informations sur la prise en charge VDI, consultez vos fournisseurs de logiciels NAS et de
sauvegarde.
Microsoft invite les clients qui envisagent de déployer une solution NAS pour les bases de données SQL Server
à consulter leur fournisseur NAS pour s’assurer que la conception de la solution de bout en bout est pour une
utilisation de base de données. De nombreux fournisseurs NAS ont des guides de meilleures pratiques et des
configurations certifiées pour cette utilisation. Microsoft recommande également aux clients de comparer leurs
performances d’O/S pour s’assurer qu’aucun des facteurs d’O/S mentionnés précédemment ne provoque un
goulot d’étranglement dans leur application.
La liste suivante décrit la prise en charge des fichiers basés sur le réseau sur SQL clusters de failover :
SQL Server 2008 R2 et versions antérieures : non pris en charge
SQL Server 2012 et versions ultérieures : pris en charge
Pour plus d’informations, consultez la rubrique SQL Server Books Online suivante :
Installer les SQL Server avec le stockage de partage de fichiers SMB

Notes supplémentaires
Une utilisation incorrecte du logiciel de base de données avec un produit NAS, ou une utilisation de base de
données avec un produit NAS mal configuré, peut entraîner une perte de données, y compris la perte totale de
base de données. Si le périphérique NAS ou le logiciel réseau ne respectent pas complètement les garanties de
données, telles que l’écriture ou l’écriture, le matériel, les logiciels ou même les pannes d’alimentation peuvent
sérieusement compromettre l’intégrité des données.

Références
Informations sur l’utilisation de caches de disque avec des SQL Server que chaque administrateur de
base de données doit connaître
DBCC TRACEON - Trace Flags (Transact-SQL)
SQL Server Conditions requises pour le programme de fiabilité des entrées et des services d’entreprise.
SQL Server Moteur de base de données’entrée/sortie requises
Prise en charge SQL Server sur les composants de
technologie iSCSI
15/08/2021 • 2 minutes to read

Cet article présente la prise en charge des SQL Server sur les composants de technologie iSCSI.
Version du produit d’origine : SQL Server 2014, SQL Server 2012, SQL Server 2008, SQL Server 2005
Numéro de la ko d’origine : 833770

Résumé
Microsoft prend en charge Microsoft SQL Server lorsqu’il est déployé sur des composants technologiques iSCSI
(Internet Small Computer System Interface) qui ont reçu la qualification du programme Designed for Windows
Logo Program. SQL Server installations qui utilisent iSCSI nécessiteront ces périphériques matériels iSCSI en
plus des cartes réseau requises pour les communications réseau classiques.

Plus d’informations
iSCSI est un protocole de transport SCSI pour le mappage des données de stockage orientées bloc sur des
réseaux TCP/IP. Lorsque vous déployez SQL Server dans un environnement iSCSI, Microsoft vous recommande
d’utiliser la prudence appropriée. L’implication d’un réseau peut introduire des composants qui ne sont
généralement pas vus comme des chemins d’accès d’I/S haut débit.
Les systèmes d’exploitation Microsoft présentent les appareils iSCSI sous forme de lecteurs ordinaires. Pour les
utilisateurs et les applications, y SQL Server, la destination distante est encapsulée. Pour optimiser le débit,
veillez à vous assurer que l’ordinateur exécutant SQL Server est configuré pour optimiser les activités de mise
en cache et assurez-vous que la latence impliquée dans le trafic iSCSI est réduite.
SQL Server systèmes doivent prendre en charge la « distribution garantie sur les supports stables » comme
indiqué dans la SQL Server des programmes de fiabilité des SQL Server’entreprise. Pour plus d’informations sur
les exigences en matière d’entrée et de sortie pour le moteur de base de données SQL Server, voir Moteur de
base de données Microsoft SQL Server’entrée/sortie requises.
Erreur « La transaction n’est plus valide » lorsque le
courrier de la base de données ne parvient pas à
envoyer un message SQL Server
12/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème où le courrier de base de données ne parvient pas à envoyer un
message.
Version du produit d’origine : SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017 sur
Linux, SQL Server 2017 sur Windows
Numéro de la ko d’origine : 4502457

Symptômes
Supposons qu’un utilisateur qui exécute Microsoft SQL Server ne peut pas envoyer de courrier de base de
données. Dans ce cas, le journal de messagerie de base de données (sysmail_event_log) affiche l’entrée suivante
:

Informations sur les exceptions : Type d’exception :


Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException
Message : la transaction n’est plus valide.
Données : System.Collections.ListDictionaryInternal
TargetSite : Void ValidateConnectionAndTransaction()
HelpLink: NULL
Source : DatabaseMailEngine
Informations StackTrace : sur
Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.ConnectionManager.ValidateConnectionAndTra
nsaction()
at Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.ConnectionManager.RollbackTransaction()
at
Microsoft.SqlServer.Management.SqlIMail.IMailProcess.QueueItemProcesser.GetDataFromQueue(DataAcces
sAdapter da, Int32 lifetimeMinimumSec)
at Microsoft.SqlServer.Management.SqlIMail.IMailProcess.QueueItemProcesser.ProcessQueueItems(String
dbName, String dbServerName, Int32 lifetimeMinimumSec, LogLevel loggingLevel, Byte[] encryptionKey,
Int32 connectionTimeout)',@proc

NOTE
L’expression qui n’est plus valide apparaît ainsi dans le champ Message pour signifier que la transaction n’est plus
valide.
Vous pouvez voir le même message dans le journal des applications. Le message électronique restera à l’état «
nouvelle tentative » et ne sera pas envoyé tant que le programme DatabaseMail.exe externe ne pourra
sysmail_unsentitems pas s’exécuter correctement.

Cause
L SQL Server de connexion par défaut utilise SET NUMERIC_ARITHABORT ON . Lorsque vous sp_send_dbmail
exécutez , le message électronique est mis en file d’attente vers ExternalMailQueue . Lorsqu’un message
apparaît dans la file d’attente, la procédure stockée d’activation déclenche DatabaseMail.exe exécutable externe.
Lorsque DatabaseMail.exe est connecté à SQL Server, il s’exécute afin de lire les messages de sp_readrequest
la file d’attente. Pendant l’exécution sp_readrequest de , vous pouvez remarquer que l’exception se produit.
L’instruction suivante est exécuté (vous devez collecter le suivi au niveau de SELECT l’instruction pour voir cette
sp_readrequest SELECT instruction) :

DatabaseMail - DatabaseMail - Id\<ProcessId> \<NTUserName> \<SPID> \<StartTime>


msdb \<LoginSid> \<SessionLoginName>
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort on
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed
2 - Pooled 1 1 - Non-DAC
RPC:Starting <BinaryData> 4 <NTUserName> DatabaseMail - DatabaseMail - Id<ProcessId> <NTUserName> <SPID>
<StartTime> sp_readrequest msdb <LoginSid> <SessionLoginName> exec sp_readrequest @receive_timeout=600000

SP:StmtStarting <BinaryData> 4 <NTUserName> DatabaseMail - DatabaseMail - Id<ProcessId> <NTUserName> <SPID>


<StartTime> sp_readrequest msdb <LoginSid> <SessionLoginName>

SELECT @mailitem_id = MailRequest.Properties.value('(MailItemId)[1]', 'int')


FROM @xmlblob.nodes('
declare namespace requests="https://schemas.microsoft.com/databasemail/requests]";/requests:SendMail')

AS MailRequest(Properties)
If SET NUMERIC_ARITHABORT ON is set as default connection option, this SELECT statement will encounter error
1934 and an exception will occur:

Exception 4 <servername> DatabaseMail - DatabaseMail - Id<ProcessId> <NTUserName> <SPID> <StartTime> 1934


msdb <LoginSid> <SessionLoginName> SELECT failed because the following SET options have incorrect settings:
'NUMERIC_ROUNDABORT'.
Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or
filtered indexes and/or query notifications and/or XML data type methods and/or spatialindex operations.

Lorsque DatabaseMail.exe rencontre l’exception, une récupération est tentée, mais échoue. L’exception entraîne
la sortie de l’étendue de la transaction. Pour cette raison, un message de transaction qui n’est plus valide est
consigné dans le journal de messagerie de la base de données.
Toutefois, la cause première du problème est que l’erreur 1934 se produit en raison d’une option SET
incompatible lorsque la méthode de type de données XML ( ) est utilisée dans
MailRequest.Properties.value('(MailItemId)[1]', 'int') l’instruction. SELECT

Vérifier le message d’erreur


Vérifiez si le message d’erreur dans le journal de messagerie de base de données est le même message
(La transaction n’est plus valide).
Rassemblez un suivi du profileur en activé les événements au niveau de l’instruction, les erreurs et les
avertissements et les événements Broker.
Vérifiez le paramètre SQL Server’instance de connexion pour les options de connexion par défaut. Pour
ce faire, ouvrez SQL Ser ver Management Studio, cliquez avec le bouton droit sur Ser veur, puis
sélectionnez > Propriétés Connexions Options de connexion par défaut abandon > > numérique .

Résolution
Pour résoudre ce problème, modifiez l’option de connexion par défaut sur SET NUMERIC_ROUNDABORT
OFF .
Le SQL Server journal des transactions de la base
de données n’augmente pas par rapport à la valeur
de croissance de fichier configurée
13/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème où le fichier journal des transactions de SQL Server base de
données n’augmente pas par la valeur de croissance de fichier configurée.
Version du produit d’origine : SQL Server 2008, SQL Server 2008 R2
Numéro de la ko d’origine : 2633151

Symptômes
La valeur de croissance de fichier configurée pour le fichier journal des transactions de la base de données SQL
Server est de 4 gigaoctets (Go) ou de multiples (par exemple, 8 Go, 12 Go, et ainsi de suite). Toutefois, le fichier
journal des transactions n’augmente pas de cette valeur. Au lieu de cela, le fichier journal des transactions
augmente par incréments de 250 kilo-octets (Ko). En outre, vous remarquerez qu’il y a beaucoup de fichiers
journaux virtuels dans le fichier journal des transactions.

Résolution
Pour SQL Ser ver 2008 R2
Le correctif de ce problème a été publié pour la première fois dans la base de données KB2633145
(package de mise à jour cumulative 11 pour SQL Server 2008 R2).

NOTE
Étant donné que les builds sont cumulatives, chaque nouvelle version de correctif contient tous les correctifs et
tous les correctifs de sécurité inclus dans la version précédente du correctif SQL Server 2008 R2. Nous vous
recommandons d’envisager d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus
d’informations, voir les builds SQL Server 2008 R2 publiées après SQL Server version 2008 R2.

Pour SQL Ser ver 2008 R2 Ser vice Pack 1


Le correctif de ce problème a été publié pour la première fois dans la mise à jour cumulative 4. Pour plus
d’informations sur l’obtention de ce package de mise à jour cumulative pour SQL Server 2008 R2, voir
Package de mise à jour cumulative 4 pour SQL Server 2008 R2 Service Pack 1.

NOTE
Étant donné que les builds sont cumulatives, chaque nouvelle version de correctif contient tous les correctifs et
tous les correctifs de sécurité inclus dans la version précédente du correctif SQL Server 2008 R2. Nous vous
recommandons d’envisager d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus
d’informations, voir les builds SQL Server 2008 R2 publiées après SQL Server version 2008 R2.

Solution de contournement
Modifiez la valeur de croissance du fichier SQL Server journal des transactions de la base de données de façon à
ce qu’il ne soit pas divisible de 4 Go.

Plus d’informations
Vous pouvez utiliser la requête suivante pour identifier le fichier journal des transactions SQL Server base de
données de données :

SELECT name FROM sys.master_files name


FROM sys.master_files WHERE database_id = DB_ID('<db name>')
AND type = 1
AND is_percent_growth = 0
AND growth % 524288 = 0

Pour plus d’informations sur les produits ou outils qui vérifient automatiquement la croissance des fichiers de 4
Go ou de multiples sur votre instance de SQL Server et sur les versions du produit SQL Server, consultez le
tableau suivant :

VERSIO N S DE P RO DUIT S
P O UR L ESQ UEL L ES L A
LO GIC IEL DE RÈGL E T IT RE DE L A RÈGL E DESC RIP T IO N DE L A RÈGL E RÈGL E EST ÉVA L UÉE

System Center Advisor SQL Server de base de System Center Le conseiller SQL Server 2008, SQL
données peut ne pas détermine si le fichier Server 2008 R2
augmenter à l’aide de la journal des transactions de
valeur de croissance la base de données SQL
configurée Server est configuré pour
une valeur de croissance de
4 Go ou plusieurs et génère
un avertissement si c’est le
cas. Examinez les
informations fournies dans
la section Informations
collectées de l’avertissement
et a apporté les
modifications nécessaires au
journal des transactions
concerné.

Si le journal des transactions contient un grand nombre de fichiers journaux virtuels, vous rencontrerez une
récupération de base de données longue. Pour plus d’informations, voir Les opérations de base de données
prennent beaucoup de temps, ou elles déclenchent des erreurs lorsque le journal des transactions contient de
nombreux fichiers journaux virtuels.
Résoudre les erreurs de cohérence de base de
données signalées par DBCC CHECKB
13/08/2021 • 6 minutes to read

Cet article explique comment résoudre les erreurs signalées par la commande DBCC CHECKDB.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2015748

Symptômes
Lorsque le DBCC CHECKDB (ou d’autres commandes similaires telles que CHECKTABLE) est exécuté, un message
comme le suivant est écrit dans le SQL Server ERRORLOG :

Date/Heure spid53 DBCC CHECKDB (mydb) exécuté par MYDOMAIN\theuser a trouvé 15 erreurs et réparé
les erreurs. Durée écoulée : 0 heure 0 minute 0 seconde. La capture instantanée de base de données interne
a un point de fractionnement LSN = 00000026:0000089d:0001 et le premier LSN =
00000026:0000089c:0001. Il s’agit d’un message d’information uniquement. Aucune action de l’utilisateur
n’est requise.

Ce message indique le nombre d’erreurs de cohérence de base de données trouvées et le nombre d’erreurs
réparées (si une option de réparation a été utilisée avec la commande). Ce message est également écrit dans le
journal des événements de l’application Windows en tant que message de niveau Informations avec
EventID=8957 (même si des erreurs sont signalées, ce message est un message de niveau Informations).
Informations dans le message commençant par « capture instantanée de base de données interne... » s’affiche
uniquement si DBCC CHECKDB a été exécuté en ligne, dans lequel la base de données n’est pas en SINGLE_USER
mode. En effet, pour une base de données CHECKDB DBCC en ligne, une capture instantanée de base de
données interne est utilisée pour présenter un ensemble cohérent de données à vérifier.
Cet article n’explique pas comment résoudre chaque erreur spécifique signalée par DBCC CHECKDB, mais plutôt
l’approche générale si des erreurs sont signalées. Toute référence à CHECKDB dans cet article s’applique
également DBCC CHECKTABLE et CHECKFILEGROUP sauf mention.

Cause
DBCC CHECKDB vérifie la cohérence physique et logique des pages de base de données, des lignes, des pages
d’allocation, des relations d’index, de l’intégrité référentielle des tables système et d’autres vérifications de
structure. Si l’une de ces vérifications échoue (selon les options que vous avez choisies), des erreurs sont
signalées dans le cadre de la commande.
La cause de ces problèmes peut varier en raison de l’altération du système de fichiers, des problèmes du
système matériel sous-jacent, des problèmes de pilotes, des pages endommagées en mémoire ou des
problèmes liés au moteur SQL Server. Consultez la section Résolution pour plus d’informations sur la recherche
de la cause des erreurs signalées.

Résolution
La première solution, la meilleure si le DBCC CHECKDB signale des erreurs de cohérence, consiste à restaurer à
partir d’une sauvegarde appropriée connue. Toutefois, si vous ne pouvez pas restaurer à partir d’une
sauvegarde, CHECKDB fournit une fonctionnalité pour réparer les erreurs. Si des problèmes au niveau du
système, tels que le système de fichiers ou le matériel, peuvent être à l’origine de ces problèmes, nous vous
recommandons de les corriger d’abord avant de restaurer ou d’exécutez la réparation.
Lorsque vous exécutez DBCC CHECKDB, une recommandation est fournie pour indiquer l’option de réparation
minimale requise pour réparer toutes les erreurs. Ces messages peuvent ressembler à ce qui suit :

CHECKDB a trouvé 0 erreur d’allocation et 15 erreurs de cohérence dans la base de données « mydb ».
repair_allow_data_loss est le niveau de réparation minimal pour les erreurs trouvées par DBCC CHECKDB
(mydb).

La recommandation de réparation est le niveau minimal de réparation pour tenter de résoudre toutes les
erreurs de CHECKDB. Cela ne signifie pas que cette option de réparation corrigera en réalité toutes les erreurs.
En outre, toutes les erreurs signalées ne peuvent pas nécessiter ce niveau de réparation pour résoudre l’erreur.
Cela signifie que toutes les erreurs signalées par CHECKDB lorsqu’elles sont recommandées
repair_allow_data_loss entraînent une perte de données. La réparation doit être exécuté pour déterminer si la
résolution d’une erreur entraîne une perte de données. Une technique permettant d’affiner le niveau de
réparation de chaque table consiste à utiliser DBCC CHECKTABLE pour toute table signalant une erreur. Cela
indique le niveau minimal de réparation pour un tableau donné.
Pour trouver la cause des erreurs de cohérence de base de données, envisagez les méthodes ci-après :
Vérifiez la Windows journal des événements système pour les erreurs de niveau système, de pilote ou de
disque.
Vérifiez l’intégrité du système de fichiers avec chkdsk.
Exécutez les diagnostics fournis par vos fabricants de matériel pour l’ordinateur et/ou le système de disque.
Travaillez avec votre fournisseur de matériel ou votre fabricant d’appareils pour vous assurer que :
Les périphériques matériels et la configuration s’Moteur de base de données Microsoft SQL Server
aux exigences d’entrée/sortie.
Les pilotes de périphérique et les autres composants logiciels de prise en charge de tous les appareils
dans le chemin d’accès d’I/S sont mis à jour.
Envisagez d’utiliser un utilitaire tel que SQLIOSim sur le même lecteur que les bases de données qui ont
signalé les erreurs de cohérence. SQLIOSim est un outil indépendant du moteur SQL Server pour tester
l’intégrité des O/S pour le système de disque. SQLIOSim est SQL Server 2008 et ne nécessite pas de
téléchargement séparé.
Recherchez les autres erreurs signalées par SQL Server telles que les violations d’accès ou les assertions.
Assurez-vous que vos bases de données utilisent PAGE_VERIFY CHECKSUM l’option. Si des erreurs de sommes
de contrôle sont signalées, il s’agit d’indicateurs qui indiquent que les erreurs de cohérence se sont produites
après que SQL Server a écrit des pages sur le disque afin que votre système de disque soit minutieusement
vérifié, voir Comment résoudre les problèmes de Msg 824 dans SQL Server pour plus d’informations sur les
erreurs de sommes de contrôle.
Recherchez les erreurs Msg 832 dans ERRORLOG. Ces indicateurs montrent que les pages peuvent être
endommagées lorsqu’elles sont en cache avant d’être écrites sur le disque. Pour plus d’informations, voir
comment résoudre les problèmes de Msg 832 SQL Server.
Essayez de restaurer une sauvegarde de base de données dont vous savez qu’elle est « propre » (aucune
erreur provenant de CHECKDB) et que les sauvegardes du journal des transactions que vous connaissez
s’étendent pendant toute la durée de l’erreur. Si vous pouvez « relire » ce problème en restaurant une
sauvegarde de base de données « propre » et des journaux des transactions, contactez le Support technique
Microsoft pour obtenir de l’aide.
Les erreurs de collecte de données peuvent être un problème lors de l’insertion ou de la mise à jour de
données non valides dans SQL Server tables. Pour plus d’informations sur la résolution des erreurs de
collecte de données, voir Troubleshooting DBCC Error 2570 in SQL server 2005.
Plus d’informations
Pour plus d’informations sur la syntaxe de DBCC CHECKDB et des informations/options sur l’exécution de la
commande, voir DBCC CHECKDB (Transact-SQL).
Si des erreurs ont été trouvées par CHECKDB, des messages supplémentaires tels que les suivants sont signalés
dans le journal d’erreurs à des fins de rapport d’erreurs :

Date/Time spid53 Using 'dbghelp.dll' version '4.0.5'


Date/Heure spid53 **Thread de vidage - spid = 0, EC = 0x00000000855F5EB0
Date/Heure spid53 ***Vidage de pile envoyé àFilePath\FileName
Date/Time spid53 * *******
Date/Heure spid53 *
Date/Heure spid53 * DÉBUT DU VIDAGE DE PILE :
Date/Time spid53 * Date/Timespid 53
Date/Heure spid53 *
Date/Heure spid53 * Corruption de la base de données DBCC
Date/Timespid53 *
Date/Heure spid53 * Mémoire tampon d’entrée 84 octets -
Date/Heure spid53 * dbcc checkdb(mydb)
Date/Heure spid53 *
Date/Time spid53 * *******
Date/Heure spid53 * -------------------------------------------------------------------------------
Date/Heure spid53 * Vidage de pile court
Date/Time spid53 Stack Signature for the dump is 0x00000000000001E8
Date/Heure spid53 Le processus de vidage externe retourne le code 0x20002001.

Les informations d’erreur ont été envoyées au rapport d’erreurs Watson.


Les fichiers utilisés pour le rapport d’erreurs incluent un fichier.txt <nnn> SQLDump. Ce fichier peut être utile à
des fins historiques, car il contient une liste des erreurs trouvées à partir de CHECKDB dans un format XML.
Pour savoir à quel moment DBCC CHECKDB a été exécuté pour la dernière fois sans qu’aucune erreur n’a été
détectée pour une base de données (la dernière nouvelle checkDB connue), recherchez dans le journal des
erreurs SQL Server un message comme le suivant pour votre base de données ou base de données système (ce
message est écrit en tant que message de niveau d’information dans le journal des événements d’application
Windows avec EventID = 17573) :

Date/Heure spid7s CHECKDB pour la base de données « master » terminée sans erreurs
onDate/Time22:11:11.417 (heure locale). Il s’agit d’un message d’information uniquement . aucune action de
l’utilisateur n’est requise
Message d’erreur : le fournisseur OLE DB
SQLOLEDB n’a pas pu commencer une transaction
distribuée
13/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème que le message d’erreur du fournisseur OLE DB SQLOLEDB n’a
pas pu commencer une transaction distribuée.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 816701

Symptômes
Lorsque vous essayez d’utiliser Microsoft SQL Server pour démarrer une transaction distribuée entre des
serveurs liés exécutant Windows Server, vous pouvez recevoir le message d’erreur suivant :

Le fournisseur OLE DB SQLOLEDB n’a pas pu commencer une transaction distribuée

Le message suivant peut apparaître sur l’ordinateur fournisseur OLE DB :

La nouvelle transaction ne peut pas être inscrite dans le coordinateur de transaction spécifié.

Cause
Ce comportement se produit si le service DTS (Distributed Transaction Coordinator) est désactivé ou si l’accès
DTC réseau est désactivé. Par défaut, l’accès DTC réseau est désactivé dans Windows Server.

Solution de contournement
Pour contourner ce problème, installez l’accès DTC réseau sur les deux serveurs :
1. Cliquez sur Démarrer , puis sur Panneau de configuration .
2. Cliquez sur Ajouter ou supprimer des programmes, puis sur Ajouter/Supprimer Windows
composants.
3. Dans la zone Composants, cliquez sur Ser veur d’applications, puis sur Détails.
4. Cliquez pour activer la case à cocher Activer l’accès DTC réseau, puis cliquez sur OK.
5. Cliquez sur Suivant, puis suivez les instructions qui apparaissent à l’écran pour terminer le processus
d’installation.
6. Arrêtez, puis redémarrez le service Coordinateur des transactions distribuées.
7. Arrêtez puis redémarrez tous les services de gestionnaire de ressources qui participent à la transaction
distribuée (par exemple, Microsoft SQL Server serveur de files d’attente de messages Microsoft).
L’utilisation de pilotes d’hôte virtuel peut entraîner
SQL Server Moteur de base de données problèmes
de cohérence des données
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où l’utilisation de pilotes d’hôte virtuel peut entraîner SQL Server
Moteur de base de données problèmes de cohérence des données.
Version du produit d’origine : SQL Server 2008
Numéro de la ko d’origine : 2600089

Symptômes
Vous pouvez remarquer qu’une instance de Microsoft SQL Server signale un ou plusieurs des messages d’erreur
suivants dans le journal des erreurs SQL Server et dans le journal des événements d’application :
Message d’erreur 1

Erreur 824 : SQL Server détecté une erreur d’E/S logique basée sur la cohérence : pageid incorrect
(prévu 1:425920 ; 65535:0). Elle s’est produite lors d’une lecture de page (1:425920) dans l’ID de base
de données 2 au décalage 0x000000cff80000 dans le fichier « D:\DBName.mdf ». Des messages
supplémentaires dans le SQL Server d’erreurs ou le journal des événements système peuvent fournir
plus de détails. Il s’agit d’une condition d’erreur grave qui menace l’intégrité de la base de données et
doit être corrigée immédiatement. Effectuer une vérification de la cohérence de base de données
complète (DBCC CHECKDB). Cette erreur peut être causée par de nombreux facteurs . Pour plus
d’informations, voir SQL Server Books Online.

Message d’erreur 2

2011-02-24 00:20:32.55 Erreur spid65 : 605, Gravité : 21, État : 3. 2011-02-24 00:20:32.55 spid65
Échec de la tentative d’extraction de la page logique (1:17479052) dans la base de données 8. Il
appartient à l’unité d’allocation 0 et non à 72057610609819648.

Message d’erreur 3

Erreur 823 Le système d’exploitation a renvoyé l’erreur pageid incorrecte (prévue 1:306208 ; 65535:0)
à SQL Server lors d’une lecture au 0x00000095840000 décalage dans le fichier « R:\DBName.mdf ».
Des messages supplémentaires dans le SQL Server d’erreurs et le journal des événements système
peuvent fournir plus de détails. Il s’agit d’une condition d’erreur grave au niveau du système qui
menace l’intégrité de la base de données et qui doit être corrigée immédiatement. Effectuer une
vérification de la cohérence de base de données complète (DBCC CHECKDB). Cette erreur peut être
causée par de nombreux facteurs . Pour plus d’informations, voir SQL Server Books Online.

Message d’erreur 4

Erreur 18400 Le thread de point de contrôle en arrière-plan a rencontré une erreur irrécable. Le
processus de point de contrôle se termine afin que le thread puisse nettoyer ses ressources. Il s’agit
d’un message d’information uniquement. Aucune action de l’utilisateur n’est requise.
Message d’erreur 5

La sauvegarde a détecté une altération du journal dans la base de données DBName. Le contexte est
FirstSector. LogFile : 2 'R:\DBName.LDF' VLF SeqNo: x3c1c3 VLFBase: x6a850000 LogBlockOffset:
x6bbcde00 SectorStatus : 2 LogBlock.StartLsn.SeqNo: x560053 LogBlock.StartLsn.Blk: x2d0043 Size:
x53 PrevSize: x5c.

Vous pouvez également remarquer que la commande DBCC CHECKDB signale des problèmes de cohérence de
base de données.

Cause
L’équipe du support technique et des services client (CSS) de Microsoft a déterminé que le pilote d’hôte virtuel
suivant peut provoquer le comportement :
Nom du pilote : C:\WINDOWS\SYSTEM32\DRIVERS\XGVHBA.SYS
Nom du fournisseur : Xsigo Systems
Xsigo Systems (fournisseur du pilote d’hôte virtuel) indique qu’il s’agit d’un problème avec le pilote d’hôte
virtuel XGVHBA.SYS lorsque la version est entre 2.6.0.0 et 2.7.1.0.

Résolution
Contactez Xsigo Systems pour obtenir une version du pilote qui est corrigée. La version fixe est la version 2.7.3.0
et les versions ultérieures. Ensuite, configurez les adaptateurs Xsigo Virtual HBA pour utiliser les pilotes mis à
jour.

Plus d’informations
MSSQLSERVER_824
MSSQLSERVER_823
Exclusion de responsabilité de tiers
Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de
Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces
produits.
Les mots qui ont des points décimaux non plus ne
sont pas renvoyés par un sécateur de mots anglais
dans SQL Server
13/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème où une recherche à l’aide d’un sécateur de mots anglais ne
retourne pas les mots qui ont des points décimaux de début dans SQL Server 2017 sur Windows, SQL Server
2016, 2014 et 2012.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 3191316

Symptômes
Dans un sécateur de mots en anglais, vous utilisez un index de texte intégral pour indexer le contenu qui
contient des mots qui ont des points décimaux de début, tels .325 que , .434 . .646 Lorsque vous essayez de
localiser des lignes dans l’index en recherchant la valeur décimale (par exemple, ), aucune ligne .325 n’est
renvoyée.

Solution de contournement
Pour contourner ce problème, utilisez l’une des méthodes suivantes :
Utilisez l’inserreur de mots neutre.
Placez un zéro devant la virgule décimale lorsque vous utilisez un sécateur de mots anglais. Par exemple,
utilisez 0.325 plutôt que dans votre .325 recherche. L’décomposeur de mots anglais gère correctement
l’indexation et la recherche lorsqu’il rencontre des zéros non élevés.

Étapes pour reproduire le problème


1. Créez un index de texte intégral pour créer un index qui contient des mots qui ont des points décimaux de
premier plan, tels que .325 , et ainsi de .434 .646 suite.
2. Utilisez la requête de texte intégral suivante pour rechercher ces valeurs à l’aide d’un sécateur de mots
anglais dont le LCID est 1033 :

Select * from sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 1033, 0,0)

Résultats

O C C URREN C SP EC IA L _T ER DISP L AY _T ER
M OT C L É GRO UP _ID P H RA SE_ID E M M REM A RQ UES

0x00770061 1 0 1 Corresponda Anneau


007300680 nce exacte
0650072

0x002E0033 1 0 2 Corresponda .325 Conserve la


00310033 nce exacte décimale
O C C URREN C SP EC IA L _T ER DISP L AY _T ER
M OT C L É GRO UP _ID P H RA SE_ID E M M REM A RQ UES

0x006E006E 1 0 2 Corresponda nn0d325


003000640 nce exacte
033003100
33

0x0078 1 0 3 Noise Word x

0x006E006E 1 0 4 Corresponda .434 Conserve la


003400330 nce exacte décimale
038

0x006E006E 1 0 4 Corresponda nn434


003400330 nce exacte
038

0x00300034 1 0 5 Corresponda .646 Conserve la


0036 nce exacte décimale

0x006E006E 1 0 5 Corresponda nn46


00340036 nce exacte

0x00730068 1 0 6 Corresponda Pays-De-La


0069006D nce exacte

3. Essayez d’effectuer une .325 recherche (y compris la virgule décimale) :

Select * from sys.dm_fts_parser('.325', 1033, 0,0) Using English word breaker to specify the ".325"
search term.

NOTE
Nous n’avons pas de correspondance.

Résultats

O C C URREN C SP EC IA L _T ER DISP L AY _T ER
M OT C L É GRO UP _ID P H RA SE_ID E M M REM A RQ UES

0x00330031 1 0 1 Corresponda 325 Supprime la


0033 nce exacte décimale lors
de la
recherche et
325 <>
,325, donc
aucune ligne
renvoyée

0x006E006E 1 0 1 Corresponda nn325


003300310 nce exacte
033
Dans cet exemple, si vous entrez comme valeur .325 de recherche, aucune ligne n’est renvoyée. En effet,
nous avons indexé les données en conservant la virgule décimale, mais l’analyseur lexique anglais
supprime la virgule au cours du processus de recherche. Par conséquent, nous faisons une recherche par
inadvertance sur 325 au lieu .325 de , et aucune correspondance n’est trouvée.
La recherche d’un index de texte intégral à l’aide d’un sécateur de mots anglais pour les mots qui ont des
points décimaux de début fonctionne correctement si nous utilisons l’outil de coupure de mots neutre.
4. Exécutez la requête suivante à l’aide de l’outil d’coupure de mots neutre :

Select * from sys.dm_fts_parser('"Ring, .325 x .434 .646 Platinum"', 0, 0,0)

Résultats

O C C URREN C SP EC IA L _T ER DISP L AY _T ER
M OT C L É GRO UP _ID P H RA SE_ID E M M REM A RQ UES

0x00770061 1 0 1 Corresponda Anneau


007300680 nce exacte
0650072

0x002E0033 1 0 2 Corresponda .325 Conserve la


00310033 nce exacte décimale

0x006E006E 1 0 2 Corresponda nn0d325


003000640 nce exacte
033003100
33

0x0078 1 0 3 Noise Word x

0x002E0034 1 0 4 Corresponda .434 Conserve la


00330038 nce exacte décimale

0x006E006E 1 0 4 Corresponda nn0d434


003000640 nce exacte
034003300
38

0x002E0030 1 0 5 Corresponda .646 Conserve la


00340036 nce exacte décimale

0x006E006E 1 0 5 Corresponda nn0d646


003000640 nce exacte
030003400
36

0x00730068 1 0 6 Corresponda Pays-De-La


0069006D nce exacte

À présent, la recherche .325 fonctionne comme prévu.

Select * from sys.dm_fts_parser('.325', 0, 0,0) Specifying Neutral word breaker.

Résultats
O C C URREN C SP EC IA L _T ER DISP L AY _T ER
M OT C L É GRO UP _ID P H RA SE_ID E M M REM A RQ UES

0x002E0033 1 0 1 Corresponda .325


00310033 nce exacte

0x006E006E 1 0 1 Corresponda nn0d325


003000640 nce exacte
033003100
33
La désinstallation du pilote laisse des traces lorsque
ODBC 13(.1)/17(.1) est installé sur Windows
12/08/2021 • 2 minutes to read

Sur un ordinateur Windows avec les pilotes ODBC 17 et ODBC 13 installés, la désinstallation de l’un ou l’autre
de ces pilotes laisse les restes de la version désinstallée. Cet article fournit plus d’informations sur le problème
et la résolution du problème.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 4460005

Symptômes
Supposons que le pilote ODBC Microsoft 13/13.1 pour SQL Server et le pilote ODBC 17/17.1 pour SQL Server
sont installés sur le même ordinateur Windows. Si vous désinstallez l’une ou l’autre version, le pilote désinstallé
reste visible, mais devient inutilisable dans l’administrateur de source de données ODBC (odbcad32.exe). En
outre, certaines entrées de Registre correspondantes restent sous la sous-clé de Registre suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI

Cause
Ce problème se produit en raison d’un problème de programme d’installation ODBC 17/17.1.

Résolution
Ce problème a été résolu dans le pilote ODBC 17.2. Pour résoudre ce problème :
1. Désinstallez le pilote ODBC 17/17.1.
2. Installez ODBC 17.2ou une version ultérieure du pilote.

Référence
Pilote ODBC Microsoft 17.2 SQL Server publié
Les utilisateurs peuvent ne pas être en mesure de se
connecter à distance SQL serveur à l’aide du
protocole TCP/IP
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où vous ne pouvez pas vous connecter à distance à SQL à l’aide du
protocole TCP/IP.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2018930

Symptômes
Lorsque vous utilisez Microsoft SQL Server, vous pouvez voir un ou plusieurs des symptômes suivants :
Seuls les utilisateurs qui ont l’autorisation CONTROL SERVER (par exemple, les membres du rôle serveur
fixe syadmin) peuvent se connecter via TCP/IP. Les utilisateurs qui n’ont pas cette autorisation ne peuvent
pas se connecter à distance via le protocole TCP/IP à l’aide Windows ou SQL Server’authentification.

NOTE
Vous remarquerez que les connexions utilisateur élevées s’afficheront uniquement en mode gestion dynamique
sys.dm_exec_sessions (Transact-SQL), mais pas en mode sys.dm_exec_connections (Transact-SQL).

Les connexions locales et distantes utilisant le protocole Named Pipes, ainsi que les connexions locales
utilisant le protocole de mémoire partagée continuent de fonctionner parfaitement.
En outre, les messages suivants sont enregistrés dans le fichier SQL Server Errorlog :
À SQL Server démarrer :

Erreur : 26023, Gravité : 16, État : 1.


Le fournisseur TCP du serveur n’a pas réussi à écouter ['any' <ipv6> 1963]. Le port Tcp est déjà en
cours d’utilisation.
Erreur : 9692, Gravité : 16, État : 1.
Le transport de protocole Service Broker ne peut pas écouter sur le port 1963, car il est utilisé par un
autre processus.

Pour les connexions qui ont échoué :


SQL Server 2008 et versions ultérieures :

Erreur : 18456, Gravité : 14, État : 11.


Échec de la connexion de l’utilisateur « MyDomain\TestAcc ». Raison : la validation de l’accès au
serveur basé sur un jeton a échoué avec une erreur d’infrastructure. Recherchez les erreurs
précédentes.

Cause
L’erreur se produit lorsque vous configurez un point de terminaison TCP pour Service Broker à l’aide du port
que l’instance SQL Server est configurée pour utiliser. Vous pouvez obtenir la liste des points de terminaison en
exécutant la requête suivante :

select * from sys.tcp_endpoints

NOTE
Comme expliqué dans la rubrique Books Online sur sys.tcp_endpoints (Transact-SQL),cet affichage ne contient pas
d’informations sur les ports et protocoles que l’instance SQL Server est actuellement configurée pour utiliser. Pour
rechercher ces informations, utilisez Gestionnaire de configuration SQL Server.

Résolution
Méthode 1 : déposer le point de terminaison à l’origine du problème à l’aide de la commande DROP
ENDPOINT (Transact-SQL).
Par exemple, pour déposer un point de terminaison TestEP nommé, vous pouvez utiliser la commande
suivante :

DROP ENDPOINT TestEP

Méthode 2 : modifier le point de terminaison pour utiliser un autre port à l’aide de la commande ALTER
ENDPOINT (Transact-SQL).
Par exemple, pour modifier un point de terminaison nommé TestEP pour utiliser un autre port, vous
pouvez utiliser la commande suivante :

ALTER ENDPOINT TestEP as tcp (listener_port=1980)

Plus d’informations
Des problèmes similaires peuvent également se produire avec d’autres points de terminaison TCP tels que ceux
créés pour la mise en miroir de base de données et les messages d’erreur au démarrage SQL Server changent
en conséquence.
Kerberos Configuration Manager pour SQL Server
est disponible
13/08/2021 • 3 minutes to read

Cet article décrit l’outil de diagnostic Microsoft Kerberos Configuration Manager pour SQL Server.
S’applique à : SQL Server
Numéro de la ko d’origine : 2985455

À propos de Kerberos Configuration Manager


Cet outil est disponible en téléchargement à partir du Centre de téléchargement Microsoft :
Microsoft® Kerberos Configuration Manager pour SQL Server®
Le Gestionnaire de configuration Kerberos pour SQL Server est un outil de diagnostic qui permet de résoudre
les problèmes de connectivité liés à Kerberos avec SQL Server, SQL Server Reporting Services (SSRS) et SQL
Server Analysis Services (SSAS). Il peut effectuer les fonctions suivantes :
Collectez des informations sur le système d’exploitation, Microsoft SQL Server instances et les écouteurs de
groupe de disponibilité Always On installés sur un serveur.
Signaler toutes les configurations de nom principal de service (SPN) et de délégation sur le serveur.
Identifiez les problèmes potentiels dans les SSN et les délégations.
Résoudre les problèmes potentiels de SPN.

Plus d’informations
Cet outil permet de résoudre les exceptions suivantes :
401

NOTE
Ce message d’erreur est pour les erreurs http, les erreurs SSRS et d’autres erreurs similaires.

Échec de connexion pour l’utilisateur 'NTAUTHORITY\ANONYMOUS'


Échec de connexion pour l’utilisateur '(null)'
Échec de la connexion de l’utilisateur
Impossible de générer le contexte SSPI
Pour plus d’informations sur Kerberos Configuration Manager, consultez les informations suivantes :
1. Instructions d’installation et sections Informations supplémentaires sur la page de téléchargement
2. Les billets de blog suivants sur TechCommunity :
a. Publication : mise à jour pour Kerberos Configuration Manager pour SQL Server
b. Publication : Microsoft Kerberos Configuration Manager pour SQL Server 4.1 - Microsoft Tech
Community
Pour démarrer l’outil :
1. Une fois l’installation terminée, accédez au dossier d’installation (l’emplacement du dossier par défaut est
C:\Program Files\Microsoft\Kerberos Configuration Manager for SQL Server\ )
2. Double-cliquez sur KerberosConfigMgr.exe pour démarrer l’application.
3. Pour résoudre le problème de connectivité avec SQL Server, connectez-vous à l’ordinateur de destination à
l’aide d’un compte d’utilisateur de domaine qui dispose des autorisations utilisateur sur cet ordinateur.
4. Pour résoudre le problème de connectivité avec SSRS, connectez-vous à l’ordinateur de destination à l’aide
d’un compte d’utilisateur de domaine qui dispose d’autorisations administratives sur cet ordinateur.
Pour générer la liste SPN à par tir de la ligne de commande :
1. Allez à la ligne de commande.

NOTE
Pour résoudre le problème de connectivité avec SSRS, démarrez la fenêtre de ligne de commande en tant
qu’administrateur.

2. Basculez vers le dossier où KerberosConfigMgr.exe se trouve.


3. Tapez KerberosConfigMgr.exe -q -l .
4. Pour plus d’option de ligne de commande, tapez KerberosConfigMgr.exe -h .

Pour enregistrer les informations de configuration Kerberos d’un ser veur :


1. Connecter serveur Windows cible.
2. Cliquez sur le bouton Enregistrer dans la barre d’outils.
3. Spécifiez l’emplacement où vous souhaitez que le fichier soit enregistré. Il peut se trouver sur un lecteur local
ou un partage réseau.
4. Le fichier sera enregistré au format .XML format.
Pour afficher les informations de configuration Kerberos d’un ser veur à par tir du fichier
enregistré :
1. Cliquez sur le bouton Charger dans la barre d’outils.
2. Ouvrez le fichier XML généré par Kerberos Configuration Manager.
Pour générer un script pour corriger le SPN à par tir de la ligne de commande :
1. Cliquez sur le bouton Générer pour l’entrée SPN.
2. Le script généré peut être utilisé par un utilisateur qui dispose des autorisations pour corriger le SPN sur le
serveur.
Pour voir les fichiers journaux de cet outil :
Par défaut, un fichier journal est généré chaque fois que l’application est exécuté dans le dossier de données
d’application de l’utilisateur : %APPDATA%\Microsoft\KerberosConfigMgr .
Pour Aide :
Option 1 : placez le pointeur sur la commande d’une boîte à outils.
Option 2 : Exécuter KerberosConfigMgr.exe -h à partir de la ligne de commande.
Option 3 : cliquez sur le bouton Aide dans la barre d’outils.
S’applique à
SQL Server 2012 Analysis Services
SQL Server 2005 Developer Edition
SQL Server 2005 Enterprise Edition
SQL Server 2005 Enterprise X64 Edition
SQL Server Version d’évaluation 2005
SQL Server 2005 Express Edition
SQL Server 2005 Édition Standard
SQL Server 2005 Standard X64 Edition
SQL Server 2005 Workgroup Edition
SQL Server 2008 Developer
SQL Server 2008 Enterprise
SQL Server 2008 Express
SQL Server 2008 Express avec services avancés
SQL Server 2008 R2 Datacenter
SQL Server 2008 R2 Developer
SQL Server 2008 R2 Enterprise
SQL Server 2008 R2 Express
SQL Server 2008 R2 Express avec services avancés
SQL Server 2008 R2 Web
SQL Server 2008 R2 Workgroup
SQL Server 2008 Standard
SQL Server 2008 Édition Standard for Small Business
SQL Server Web 2008
SQL Server 2008 Workgroup
SQL Server 2012 Developer
SQL Server 2012 Enterprise
SQL Server 2012 Express
SQL Server 2012 Standard
SQL Server Web 2012
SQL Server 2012 Enterprise Core
SQL Server Développeur 2014
SQL Server 2014 Enterprise
SQL Server 2014 Enterprise Core
SQL Server 2014 Express
SQL Server 2014 Standard
SQL Server Web 2014
Résolution des erreurs de connectivité SQL Server
15/08/2021 • 35 minutes to read

Cet article vous aide à résoudre différents problèmes de connectivité SQL serveur.

NOTE
Pour une visite guidée de cet article, voir Résolution des erreurs de connectivité SQL Server.

Version du produit d’origine : Microsoft SQL Server


Numéro de la ko d’origine : 4009936

Conditions préalables
Pour utiliser efficacement cet dépannage, vous pouvez collecter les informations suivantes.
1. Texte complet du message d’erreur avec les codes d’erreur et si l’erreur est intermittente (se produit
uniquement parfois) ou cohérente (se produit tout le temps).
2. Leslogs d’SQL Server à partir des lesquels vous pouvez noter les remarques suivantes :
a. Nom de domaine complet (FQDN) de l’ordinateur SQL Server ou en cas d’installations en cluster,
nom virtuel du nom de domaine complet. Si vous utilisez une instance nommée, notez le nom de
l’instance.

NOTE
Vous pouvez rechercher la chaîne « Nom du serveur » pour obtenir ces informations dans lelog des
erreurs.

b. Bibliothèques réseau et ports sur SQL instance est à l’écoute. Exemples de messages :

Canaux nommés : le fournisseur de connexion local du serveur est prêt à accepter la connexion
sur [ \ \ .\pipe\sql\query ]. TCP/IP et numéro de port : le serveur est à l’écoute sur [ ::1 1433].

3. Journaux d’événements système et d’applications SQL Server et des systèmes clients.


4. Si les connexions échouent à partir d’une application, la chaîne de connexion de l’application. Ceux-ci se
trouvent généralement dansWeb.config fichiers pour ASP.NET applications.

Liste de vérification
Assurez SQL le serveur est démarré et que le message suivant s’SQL Server ErrorLog :

SQL Server est maintenant prêt pour les connexions client. Il s’agit d’un message d’information ;
aucune action de l’utilisateur n’est requise.

Vérifiez la connectivité de base sur l’adresse IP et vérifiez les problèmes :


ping -a <SQL Server machine>, ping -a <SQL Server IP address> Si vous remarquez des problèmes,
travaillez avec votre administrateur réseau pour résoudre le même problème.
Vérifiez si SQL est à l’écoute sur les protocoles appropriés en vérifiant ErrorLog.
Vérifiez si vous êtes en mesure de vous connecter à SQL serveur à l’aide d’un fichier UDL. Si elle
fonctionne, il se peut qu’il y a un problème avec la chaîne de connexion. Pour obtenir des instructions sur
la procédure sur le test UDL, Connecter vers SQL serveur à l’aide d’une section de fichier UDL.
Vérifiez si vous êtes en mesure de vous connecter à SQL Server à partir d’autres systèmes clients et de
connexions utilisateur différentes. Si vous le pouvez, le problème peut être spécifique au client ou à la
connexion qui rencontre le problème. Vérifiez les journaux Windows événements sur le client
problématique pour les pointeurs supplémentaires. Vérifiez également si les pilotes réseau sont à jour.
Si vous rencontrez des échecs de connexion, assurez-vous que l’utilisateur dispose d’une connexion au
niveau du serveur et des autorisations appropriées pour se connecter à la base de données à qui
l’utilisateur tente de se connecter.

Une erreur liée au réseau ou à l’instance s’est produite lors de


l’établissement d’une connexion SQL Server
Pour plus d’informations sur l’erreur pertinente, consultez la section Vérifier les erreurs de connexion suivante.
Vérifier les erreurs de connexion
L’erreur liée au réseau A ou à l’instance s’est produite lors de l’établissement d’une connexion à SQL
Server’erreur représente un ou plusieurs des messages d’erreur suivants :
Une erreur liée au réseau ou à l’instance s’est produite lors de l’établissement d’une connexion SQL
Server. Le serveur n’a pas été trouvé ou n’est pas accessible. Vérifiez que le nom de l’instance est correct
et que SQL Server est configuré pour autoriser les connexions distantes.

provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified

SQL Server Native Client Erreur de lien de données

[Microsoft SQL Server Native Client 10.0]: Login timeout expired


[Microsoft SQL Server Native Client 10.0]: A network-related or instance-specific error has occurred
while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance
name is correct and if SQL Server is configured to allow remote connections. For more information
see SQL Server Books Online.
[Microsoft SQL Server Native Client 10.0]: SQL Server Network Interfaces: Error Locating
Server/Instance Specified [xFFFFFFFF].

Une erreur liée au réseau ou à l’instance s’est produite lors de l’établissement d’une connexion SQL
Server. Le serveur n’a pas été trouvé ou n’est pas accessible. Vérifiez que le nom de l’instance est correct
et que SQL Server est configuré pour autoriser les connexions distantes.

fournisseur : Fournisseur TCP, erreur : 0


Une tentative de connexion a échoué car la partie connectée n’a pas répondu correctement après un
certain temps, ou la connexion établie a échoué car l’hôte connecté n’a pas réussi à répondre.
Microsoft SQL Server, Erreur : 10060

Une erreur liée au réseau ou à l’instance s’est produite lors de l’établissement d’une connexion SQL
Server. Le serveur n’a pas été trouvé ou n’est pas accessible. Vérifiez que le nom de l’instance est correct
et que SQL Server est configuré pour autoriser les connexions distantes.

provider: Named Pipes Provider, error:40 - Could not open a connection to SQL Server
Microsoft SQL Server, Erreur :53
Le chemin d’accès réseau est in trouvé

[Microsoft] [SQL Server Native Client 11.0] Fournisseur TCP : aucune connexion n’a pu être réalisée
car l’ordinateur cible l’a activement refusée.
[Microsoft] [SQL Server Native Client 11.0] Expiration du délai d’expiration de la connexion
[Microsoft] [SQL Server Native Client 11.0] Une erreur liée au réseau ou à l’instance s’est produite
lors de l’établissement d’une connexion SQL Server. Le serveur n’est pas trouvé ou n’est pas
accessible. Vérifiez si le nom de l’instance est correct et si SQL Server est configuré pour autoriser les
connexions à distance. Pour plus d’informations, voir SQL Server Books Online.

Vous pouvez commencer à résoudre les problèmes à partir de cette section : Causes courantes de divers
problèmes de connexion.
Causes courantes de divers problèmes de connexion
Recherchez chacune des causes applicables à votre instance ci-dessous et, pour chacune des causes applicables,
essayez les résolutions correspondantes.
Cause 1 : nom de serveur incorrect spécifié dans la chaîne de connexion ou dans la boîte de dialogue nom du serveur
Pour confirmer :
Assurez-vous que le nom du serveur que vous spécifiez correspond à ce que vous avez dans le journal
des erreurs.
Accédez au fichier Editing ASP.NET Configuration Files pour votre application et assurez-vous que la
section Chaînes de connexion pointe vers le nom de serveur approprié et utilise les chaînes de
connexion SQL Server correctes pour les applications Web ASP.NET.

NOTE
Pour obtenir par programme les chaînes de connexion à partir de votre application, reportez-vous à l’exemple
dans la procédure : Lire les chaînes de connexion à partir du Web.config .

Cause 2 : Alias incorrect sur l’ordinateur client


Les alias sont généralement utilisés dans les environnements lorsque vous devez vous connecter à SQL Server
avec un autre nom ou lorsqu’il existe des problèmes de résolution de noms dans le réseau. Un alias incorrect sur
l’ordinateur client peut entraîner l’échec des connexions à partir de vos applications vers le serveur incorrect.
Points à essayer :
Ouvrez SQL Server’utilitaire réseau client en tapantcliconfg.exe dans votre commande Exécuter.
Vérifiez si des alias sont définis pour le serveur à qui vous essayez de vous connecter.
Si ce n’est pas le cas, faites les choses suivantes :
1. Cliquez sur Modifier et renommez l’alias de serveur. (par exemple, si votre nom de serveur est
MySQL, renommez-le MySQL_test) et réessayez la connexion. Si la connexion fonctionne, cela
indique que vous avez un alias incorrect, probablement à partir d’une ancienne configuration qui
n’est plus nécessaire. Si vous continuez à faire l’expérience de l’erreur, renommez l’alias à son nom
d’origine et procédez à l’étape suivante.
2. Vérifiez les paramètres connection de l’alias et assurez-vous qu’ils sont corrects. Voici quelques-
uns des scénarios courants qui peuvent entraîner des problèmes de connectivité :
Adresse IP incorrecte pour le paramètre Nom du serveur. Assurez-vous que cette adresse IP
correspond à l’entrée du SQL ErrorLog.
Nom de serveur incorrect dans le paramètre Nom du serveur. Par exemple, si votre alias de
serveur pointe sur le nom de serveur correct, si le paramètre Nom du serveur a une valeur
incorrecte, les connexions échouent.
Si vous utilisez un alias de canaux nommé, assurez-vous que le nom du canal a le format
correct.
Pour la connexion à l’instance par défaut nommée Mydefaultinstance, le nom du canal
doit être \\Mydefaultinstance\pipe\sql\query
Pour la connexion à une instance nommée MySQL\Named, le nom du canal doit être
\\MySQL\pipe\MSSQL$Named\sql\query

Cause 3 (instance par défaut) : pare-feu entre le client et le serveur bloquant le port SQL Server instance est à l’écoute sur
Instance par défaut : une instance par défaut s’exécute généralement sur le port 1433. Certaines installations
utilisent également un port non standard (autre que 1433) pour l’exécution SQL instances. Le pare-feu peut
bloquer l’un d’eux.
Points à essayer :
Déterminez le numéro de port SQL instance est en cours d’exécution. Si l’instance par défaut de votre
serveur SQL utilise un port non standard, consultez l’SQL Server Exécution de l’instance « Par défaut »
sur un port TCP non par défaut (ou non standard): : conseils pour que la connectivité des applications
fonctionne.
Essayez d’attendre le numéro de port SQL Server au nom du serveur en utilisant le format
<servername> , numéro de port et voir si cela fonctionne. Par exemple, si votre nom d’instance SQL est
MySQLDefaultinstance et qu’il s’exécute sur le port 2000, spécifiez le nom du serveur en tant que
MySQLServer, 2000 et voyez si cela fonctionne. Si elle fonctionne, cela indique que le pare-feu bloque le
port.
S’il est confirmé, ajoutez le port à la liste d’exclusions du pare-feu. Pour obtenir des instructions, déplacez-
vous vers la section Configuration des pare-feu.
Cause 4(instance nommée) : SQL navigateur n’est pas démarré
Les applications clientes qui se connectent à une instance nommée de SQL Server utilisent le service navigateur
SQL sur le système sur lequel SQL est en cours d’exécution pour édifier le port sur lequel SQL est à l’écoute. Si le
service de navigateur n’est pas démarré, les connexions échouent.
Points à essayer :
Sur le système exécutant votre instance SQL Server, utilisez le gestionnaire de configuration SQL Server ou
l’applet Services dans le Panneau de configuration et démarrez le service SQL Browser s’il n’est pas déjà
démarré. Pour plus d’informations, voir How to: Start and Stop the SQL Server Browser Service
Cause 5 (instance nommée) : le port UDP 1434 utilisé par SQL navigateur est bloqué sur le réseau
Si votre instance SQL est une instance nommée, elle peut avoir été configurée pour utiliser des ports
dynamiques ou un port statique. Dans les deux cas, les bibliothèques réseau sous-jacentes interrogent le service
de navigateur SQL qui s’exécute sur votre ordinateur SQL Server via le port UDP 1434 pour éumer le numéro
de port de l’instance nommée. Si un pare-feu entre le client et le serveur bloque ce port UDP, la bibliothèque
cliente ne peut pas déterminer le port (une exigence de connexion) et la connexion échoue.
Pour confirmer :
Méthode 1 :
1. Notez le port sur SQL instance est à l’écoute à partir du SQL Server Errorlog.
2. Essayez de vous connecter à l’instance nommée en utilisant le numéro de port qui est appendé au
nom du serveur en utilisant le format <nom_serveur\nom_instance>, numéro_port et voir si cela
fonctionne. Si elle fonctionne, cela indique que le pare-feu bloque le port UDP 1434. Par exemple, si le
nom de votre instance SQL est MySQL\Namedinstance et qu’elle s’exécute sur le port 3000, spécifiez
le nom du serveur en tant que MySQL\Namedinstance, 3000 et voyez si cela fonctionne. Si elle
fonctionne, cela peut signifier que le port UDP 1434 est bloqué ou que le port statique est bloqué ou
les deux. Pour vérifier s’il s’agit du port UDP ou du port statique à l’aide de Portqry à partir de la
méthode 2 ci-dessous.
Méthode 2 :
1. Utilisez l’outil PortqryUI avec votre instance nommée et observez la sortie qui en résulte. Si le
message vous indique que le port UDP 1434 est filtré, cela indique que le port est bloqué sur le
réseau. Pour obtenir des instructions sur l’utilisation de l’outil, utilisez l’outil PortqryUI avec SQL Server
section.
Points à essayer :
Déterminez d’abord si SQL Server instance est à l’écoute sur un port dynamique ou statique et utilisez la
procédure qui est pertinente pour votre scénario. Pour savoir si SQL est à l’écoute sur les ports dynamiques et
statiques, déplacez-vous vers Indiquer si SQL est à l’écoute dans la section Ports dynamiques ou statiques.
Cas 1 : ports dynamiques. Dans ce cas, vous devez vous assurer que le service de navigateur SQL est bien
démarré et que le port UDP 1434 n’est pas bloqué sur le pare-feu entre le client et le serveur. Si vous ne
pouvez pas faire l’une ou l’autre d’entre elles, vous devez basculer votre instance SQL Server pour utiliser
un port statique et utiliser la procédure documentée dans Configurer un serveur pour écouter sur un
port TCP spécifique.
Cas 2 : la configuration du port statique et SQL navigateur ne sont pas en cours d’exécution ou UDP 1434
ne peut pas être ouvert sur le pare-feu. Dans ce cas, vous devez vous assurer que le port statique est
spécifié dans votre chaîne de connexion et que ce port n’est pas bloqué par le pare-feu. Pour obtenir des
instructions, déplacez-vous vers la section Configuration des pare-feu.
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
Configuration des pare -feu
Si vous utilisez un pare-Windows, utilisez la procédure documentée dans la rubrique SQL Server Books
Online :
Configurez un pare-Windows pour Moteur de base de données Access.
Si vous utilisez un pare-feu personnalisé, travaillez avec votre administrateur réseau pour ouvrir les ports
nécessaires.
Vous trouverez ci-dessous quelques captures d’écran rapides montrant la configuration requise d’un pare-feu
Windows pour les connexions réussies à une instance par défaut et à une instance nommée.
Instance par défaut de SQL Server à l’écoute sur le port par défaut 1433 sur Windows 2012 R2. Dans ce
scénario, vous devez vous assurer qu’une exception est ajoutée au port TCP 1433 dans le pare-feu
Windows.
1. Ouvrez Windows pare-feu sur le système hébergeant SQL instance par défaut du serveur et
cliquez sur Nouvelle règle sous Règles de trafic entrant.
2. Sélectionnez l’option Port, puis cliquez sur Suivant.

3. Dans l’écran suivant :


Sélectionnez TCP comme protocole.
Sélectionnez des por ts locaux spécifiques et spécifiez la valeur 1433, puis cliquez sur
Suivant .

4. Dans l’écran suivant, sélectionnez Autoriser la connexion, puis cliquez sur Suivant.
5. Dans l’écran suivant, sélectionnez l’option qui convient le mieux à votre environnement, puis
cliquez sur Suivant.

6. Dans l’écran suivant, donnez le nom à votre règle et fournissez une description claire pour
référence ultérieure, puis cliquez sur Terminer.
7. Une fois l’option effectuée, vous devez voir que la règle est créée et activée par défaut.

Ajout d’une exception au port UDP 1434 pour activer les connexions à une instance nommée de SQL
serveur :
1. Ouvrez Windows pare-feu sur le système hébergeant SQL instance par défaut du serveur et
cliquez sur Nouvelle règle sous Règles de trafic entrant.

2. Sélectionnez l’option Port, puis cliquez sur Suivant.


3. Dans l’écran suivant :
Sélectionnez UDP comme protocole.
Sélectionnez des por ts locaux spécifiques et spécifiez la valeur 1434, puis cliquez sur
Suivant .

4. Dans l’écran suivant, sélectionnez Autoriser la connexion, puis cliquez sur Suivant.
5. Dans l’écran suivant, sélectionnez l’option qui convient le mieux à votre environnement, puis
cliquez sur Suivant.

6. Dans l’écran suivant, donnez le nom à votre règle et fournissez une description claire pour
référence ultérieure, puis cliquez sur Terminer.
7. Une fois l’option effectuée, vous devez voir que la règle est créée et activée par défaut.

Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
Utilisation de l’outil PortqryUI avec SQL Server
Emplacement de téléchargement : PortqryUI
1. Lancez l’outil PortqryUI sur votre ordinateur client. (l’ordinateur sur lequel vous avez des problèmes de
connexion, pour les applications web, il peut s’y avoir le serveur IIS)
2. Spécifiez le nom de serveur de SQL Server instance de SQL ou le nom de serveur de SQL dans l’adresse IP
ou le nom de domaine complet de destination à interroger.
3. Sélectionnez Ser vice de requête prédéféré et sélectionnez SQL service dans la liste liste.
4. Cliquez sur Requête, examinez la sortie et utilisez le tableau suivant pour obtenir des pointeurs
supplémentaires.

C A USES P OT EN T IEL L ES DES


P RO B L ÈM ES DE
T Y P E D’IN STA N C E SO RT IE DE P O RTQ RY C O N N EXIO N Q UE FA IRE ?
C A USES P OT EN T IEL L ES DES
P RO B L ÈM ES DE
T Y P E D’IN STA N C E SO RT IE DE P O RTQ RY C O N N EXIO N Q UE FA IRE ?

Instance par défaut Port TCP 1433 (service ms- Indique l’une des Assurez-vous SQL
sql-s) : NON À L’ÉCOUTE informations suivantes : est démarré.
SQL n’est pas Vérifiez SQL journal
démarré. d’erreurs pour le
Le protocole TCP/IP numéro de port et
n’est pas activé SQL utilisez-le dans vos
liste de protocoles chaînes de
du serveur. connexion au format
SQL est à l’écoute <servername> ,
sur un port autre numéro de port.
que le port par Travaillez avec votre
défaut. (vérifier lelog administrateur
des erreurs) réseau/windows
Le pare-feu entre le pour vous assurer
client et le serveur que le port TCP
bloque le port. 1433 n’est pas
bloqué par un pare-
feu sur le réseau ou
par le pare-feu
Windows sur le
système SQL Server.
Remarque Si vous
souhaitez résoudre un
problème de pare-feu,
déplacez-vous vers la
section Configuration des
pare-feu.

Instance par défaut Port TCP 1433 (service ms- La bibliothèque Vérifiez si le nom du
sql-s) : LISTENING cliente peut se serveur est
connecter à correctement
l’ordinateur SQL spécifié dans la
serveur, mais un chaîne de connexion.
autre problème dans Si la chaîne de
la couche connexion utilise le
d’application peut numéro de port, elle
être à l’origine du est correctement
problème. spécifiée dans la
chaîne de connexion.
Tous les anciens alias
définis dans la zone.
C A USES P OT EN T IEL L ES DES
P RO B L ÈM ES DE
T Y P E D’IN STA N C E SO RT IE DE P O RTQ RY C O N N EXIO N Q UE FA IRE ?

Instance nommée Port UDP 1434 (service ms- Indique l’une des Le service est
sql-m) : FILTRÉ informations suivantes : démarré.
SQL instance SQL service de
nommée n’est pas navigateur est
démarrée. démarré.
SQL navigateur n’a Travaillez avec votre
pas démarré sur le administrateur
système hébergeant réseau/windows
SQL instance. pour vous assurer
Le port UDP 1434 que le port UDP
est bloqué par un 1434 n’est pas
pare-feu sur le bloqué par un pare-
serveur SQL ou sur feu sur le réseau ou
le réseau entre le par le pare-feu
client et le serveur. Windows sur le
système SQL Server.
Remarque Si vous
souhaitez résoudre un
problème de pare-feu,
déplacez-vous vers la
section Configuration des
pare-feu.

Instance nommée Le port UDP 1434 est À La bibliothèque Le nom du serveur


L’ÉCOUTE cliente peut se est correctement
connecter à spécifié dans la
l’ordinateur SQL chaîne de connexion.
serveur, mais un Le numéro de port
autre problème dans est incorrectement
la couche spécifié dans la
d’application peut chaîne de connexion.
être à l’origine du Tous les anciens alias
problème. définis dans la zone.

Exemples de sorties :
Instance par défaut sur le port par défaut : scénario de travail
Instance par défaut sur le port par défaut : scénario de non-travail
Instance nommée : scénario de travail : (nom de l’instance : SQL 2014, nom d’hôte : SQLCONNVM)
Instance nommée : Scénario de non-travail : (nom de l’instance : SQL 2014, nom d’hôte : SQLCONNVM)
Pour plus d’informations, voir la section Configuration des pare-feu.
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
Savoir si SQL est à l’écoute sur les ports dynamiques et statiques
1. Dans Gestionnaire de configuration SQL Server, dans le volet console, développez SQL Server
Configuration réseau, développez Protocoles pour, puis double-cliquez sur TCP/IP .
2. Dans la boîte de dialogue Propriétés TCP/IP, sous l’onglet Adresses IP, plusieurs adresses IP
apparaissent au format IP1 , IP2 , jusqu’à IPAll . L’une d’elles est pour l’adresse IP de l’adaptateur de
boucle, 127.0.0.1. Des adresses IP supplémentaires apparaissent pour chaque adresse IP sur l’ordinateur.
(Vous verrez probablement les adresses IP version 4 et IP version 6.) Cliquez avec le bouton droit sur
chaque adresse, puis cliquez sur Propriétés pour identifier l’adresse IP à configurer.
3. Si la boîte de dialogue Ports dynamiques TCP contient 0, cela indique que le Moteur de base de données
est à l’écoute sur les ports dynamiques. S’il contient un nombre spécifique, cela signifie que l’instance de
base de données est à l’écoute sur un port statique.
Pour plus d’informations, voir Configurer un serveur pour écouter sur un port TCP spécifique.
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.

Aucune connexion n’a pu être réalisée car l’ordinateur cible l’a


activement refusée
Pour plus d’informations sur l’erreur d’absence de connexion, déplacez-vous vers la section Message d’erreur
complet.
Message d’erreur complet
Vous pouvez obtenir une erreur semblable à celle-ci :

[Microsoft] [SQL Server Native Client 11.0] Fournisseur TCP : aucune connexion n’a pu être réalisée car
l’ordinateur cible l’a activement refusée.
[Microsoft] [SQL Server Native Client 11.0] Expiration du délai d’expiration de la connexion.
[Microsoft] [SQL Server Native Client 11.0] Une erreur liée au réseau ou à l’instance s’est produite lors de
l’établissement d’une connexion SQL Server. Le serveur n’est pas trouvé ou n’est pas accessible. Vérifiez si le
nom de l’instance est correct et si SQL Server est configuré pour autoriser les connexions à distance. Pour
plus d’informations, voir SQL Server Books Online.

Vous pouvez commencer à résoudre les problèmes à partir de cette section : Causes courantes de divers
problèmes de connexion.

SQL Server n’existe pas ou l’accès est refusé


Vous pouvez commencer à résoudre les problèmes à partir de cette section : Causes courantes de divers
problèmes de connexion.
Échec de l’opération de tableau croisé dynamique : nous ne pouvons
pas localiser un serveur pour charger le modèle de données du
workbook
Vous pouvez commencer à résoudre les problèmes à partir de cette section : Causes courantes de divers
problèmes de connexion.

Impossible de générer un message d’erreur de contexte SSPI


L’interface SSPI (Security Support Provider Interface) est un ensemble d’API Windows qui permet la délégation
et l’authentification mutuelle sur n’importe quelle couche de transport de données générique, telle que les
sockets TCP/IP. Par conséquent, sSPI permet à un ordinateur exécutant un système d’exploitation Windows de
déléguer en toute sécurité un jeton de sécurité utilisateur d’un ordinateur à un autre sur n’importe quelle
couche de transport qui peut transmettre des octets bruts de données.
L’erreur de contexte SSPI impossible à générer est générée lorsque le SSPI utilise l’authentification Kerberos
pour déléguer sur TCP/IP et que l’authentification Kerberos ne peut pas effectuer les opérations nécessaires pour
déléguer correctement le jeton de sécurité utilisateur à l’ordinateur de destination qui exécute SQL Server.
Pour plus d’informations sur les raisons pour lesquelles les opérations Kerberos ne peuvent pas être effectuées,
passer à la section Résolution des problèmes d’authentification en raison de problèmes Kerberos pour passer en
revue et implémenter les étapes.
Résolution des problèmes d’authentification en raison de problèmes Kerberos
Des échecs d’authentification Kerberos peuvent se produire pour diverses raisons. Les causes principales et les
résolutions correspondantes sont mises en évidence ci-dessous :

T Y P E DE P RO B L ÈM E RÉSO L UT IO N S SUGGÉRÉES

Problèmes SPN : Consultez la section Utilisation du Gestionnaire de


SPN manquants : le SPN n’est pas enregistré dans configuration Kerberos pour diagnostiquer et résoudre les
Active Directory. problèmes de SPN et de délégation afin de diagnostiquer et
Entrées SPN incorrectes : le SPN existe, mais le de résoudre les problèmes de SPN.
numéro de port est incorrect ou il existe sur un autre
compte que le compte SQL Service. Remarque Pour une compréhension approfondie des SNS,
SPN en double : le même SPN existe sur plusieurs Kerberos et d’autres concepts connexes, examinez les
comptes dans active directory. informations de l’article de la base de connaissances suivant :
Comment résoudre le message d’erreur « Impossible de
générer le contexte SSPI »

SQL Comptes de service non fiables pour la délégation. Si Utilisez l’onglet délégation du Gestionnaire de
vous utilisez un compte système local, le serveur configurationKerberos pour confirmer et travailler avec votre
intermédiaire doit être approuvé pour la délégation dans administrateur Active Directory afin d’activer la délégation
Active Directory. pour le compte. Consultez l’utilisation du Gestionnaire de
configuration Kerberos pour diagnostiquer et résoudre les
problèmes de SPN et de délégation pour plus d’informations
dans le paragraphe suivant.
T Y P E DE P RO B L ÈM E RÉSO L UT IO N S SUGGÉRÉES

Résolution de nom incorrecte : le nom de votre serveur peut ping -a <your_target_machine> (utiliser -4 et -6 pour
se résoudre en une adresse IP différente de celle inscrite par IPv4 et IPv6 spécifiquement)
le serveur DNS de votre réseau. ping -a <Your_remote_IPAddress> nslookup (tapez
votre nom d’ordinateur local et distant et votre adresse IP
plusieurs fois)

Recherchez les incohérences et les incohérences sur les


résultats renvoyés. L’correctité de la configuration DNS sur le
réseau est essentielle pour SQL connexion. Une entrée DNS
erronée peut être à l’origine de toutes sortes de problèmes
de connectivité ultérieurement.

Pare-feu ou autres périphériques réseau empêchant les Pour plus d’informations, consultez les liens suivants :
connexions entre le client et le contrôleur de domaine : les Conditions requises pour les ports d’Active Directory
SSN sont stockés dans Active Directory et si les clients ne et des services de domaine Active Directory
parviennent pas à communiquer avec aD, la connexion ne Outils et outils d’authentification Kerberos
peut pas poursuivre. Paramètres

NOTE
1. Lorsqu’une instance du SQL Server Moteur de base de données démarre, SQL Server tente d’inscrire le SPN pour
le service SQL Server service. Lorsque l’instance est arrêtée, SQL Server tente d’désinsser le SPN. Pour ce faire, le
compte SQL service nécessite des droits ReadSer vicePrincipalName et WriteSer vicePrincipalName dans
l’annuaire actif. Toutefois, si le compte de service ne comprend pas ces droits, l’inscription automatique au SPN ne
se produit pas et vous devez travailler avec votre administrateur Active Directory pour les inscrire pour les
instances SQL afin d’activer l’authentification Kerberos. Dans ce scénario, si vous utilisez une instance nommée, il
sera plus pratique d’utiliser un port statique pour cette instance. Si vous utilisez des ports dynamiques, le numéro
de port peut changer chaque fois que le service est redémarré et que le SPN enregistré manuellement pour
l’instance n’est plus valide. Pour plus d’informations, voir Register a Service Principal Name for Kerberos
Connections.
2. Dans les environnements où SQL est regroupée, l’inscription automatique des SPN n’est pas recommandée, car
l’inscription du SPN dans Active Directory peut prendre plus de temps que le temps nécessaire à la mise en ligne
de SQL. Si l’inscription du SPN ne se produit pas dans le temps, cela peut empêcher SQL de se connecter, car
l’administrateur de cluster n’est pas en mesure de se connecter SQL serveur.

Utilisation du Gestionnaire de configuration Kerberos pour diagnostiquer et résoudre les problèmes de SPN et de délégation
1. Téléchargez Microsoft® Kerberos Configuration Manager pour SQL Server® et installez-le sur un
ordinateur client.
2. Lancez l’outil à l’aide d’un compte de domaine de préférence avec un compte qui dispose de privilèges
suffisants pour créer des noms de service dans votre annuaire Active Directory. Consultez l’image ci-
dessous :
3. Connecter à SQL Server vous souhaitez collecter les informations relatives aux erreurs Kerberos :

4. Une fois connecté, vous pouvez voir différents onglets comme indiqué ci-dessous :
Système : dispose des informations système de base.
SPN : Fournit au SPN des informations sur les instances de chacune des instances de SQL
trouvées sur le serveur cible et fournit différentes options, comme indiqué ci-dessous. Utilisez cet
onglet pour rechercher les SNS manquants ou mal configurés et les boutons Générer ou Corriger
pour résoudre ces problèmes.

L’option Générer vous permet de créer le script de génération de SPN. Cliquez sur le
bouton Générer pour lancer la boîte de dialogue suivante :

Cette option crée un fichier cmd, qui peut être exécuté à partir de l’invite de commandes
pour générer le SPN.
Le contenu des generateSPNs sera similaire à ce qui suit :
:: This script is generated by the Microsoft(c) SQL Server(c) Kerberos Configuration
Manager tool.
:: The script may update the system information, SPN settings and Delegation
configurations of a given server.
:: SPN and Delegation configuration updates require Windows Domain Administrator
permission to execute.
:: A Domain Admin should review the configurations recommended by this tool and take
appropriate actions to enable Kerberos authentication.
:: Please contact Microsoft Support if Kerberos connection problem persists.
:: The file is intended to be run in domain "<DomainName>.com"
:: Corrections for MSSQLSvc/<HostName>.<DomainName>.com **SetSPN -s
MSSQLSvc/<HostName>.<DomainName>.com UserName**

Il utilise simplement l’option SetSPN pour créer un SPN sous le compte de service pour
SQL Server.
L’option de correction ajoute le SPN tant que vous avez le droit d’ajouter le SPN et affiche
l’info-conseil suivante :

NOTE
L’outil fournit uniquement les options Fix et Generate pour les instances par défaut et les
instances nommées avec des ports statiques. Pour les instances nommées utilisant le port
dynamique, il est recommandé de passer de ports dynamiques à statiques ou de donner au
compte de service les autorisations nécessaires pour enregistrer et désinsser le SPN chaque fois
que le service est démarré. Dans le cas contraire, vous devez désins inscrire et réenregistrer
manuellement les SNS correspondants chaque fois que SQL service est démarré.

Onglet Délégation : l’onglet identifie les problèmes avec la configuration du compte de


service pour la délégation. Cela est particulièrement utile pour résoudre les problèmes liés
au serveur. Par exemple, si les SNS s’exécutent correctement mais que vous avez encore des
problèmes avec des requêtes de serveur liées, cela peut indiquer que le compte de service
n’est pas configuré pour déléguer les informations d’identification. Pour plus
d’informations, ez la rubrique en ligne Livres sur la configuration des serveurs liés pour la
délégation.

5. Une fois que vous avez corrigé les SPN, réexécutez l’outil Gestionnaire de configuration Kerberos et
assurez-vous que les onglets SPN et Délégation ne signalent plus les messages d’erreur et retentent la
connexion à partir de votre application.
Pour plus d’informations, examinez les liens suivants :
SQL Server Référence rapide kerberos et SPN
Kerberos Configuration Manager pour SQL Server est disponible
Supplément technique Kerberos pour Windows
Comment être opérationnel avec Oracle et les serveurs liés
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.

Échec de connexion pour l’utilisateur


Il peut y avoir une erreur plus spécifique. Sélectionnez l’erreur exacte que vous recevez :
Échec de connexion de l’utilisateur « AUTORITÉ NT\OUVERTURE DE SESSION ANONYME »
Échec de connexion pour l’utilisateur '(null)'
Échec de connexion pour l’utilisateur est vide
Échec de la connexion pour l’utilisateur <username> ' '
Échec de la connexion pour l’utilisateur <domain> \ <username> ' '
Échec de la connexion pour l’utilisateur <computername$> ' '
Échec de connexion de l’utilisateur « AUTORITÉ NT\OUVERTURE DE SESSION ANONYME »
Il existe au moins trois scénarios pour ce problème. Utilisez le tableau suivant pour passer en compte chaque
scénario applicable et suivre les étapes de résolution appropriées.

C A USE P OT EN T IEL L E RÉSO L UT IO N S SUGGÉRÉES

Scénarios de double saut sur le même ordinateur : vous Pour les scénarios de double saut sur le même ordinateur,
essayez d’utiliser un double saut, mais les informations ajoutez des entrées de Registre DisableLoopbackCheck ou
d’identification NTLM sont utilisées à la place de Kerberos. BackConnectionHostNames comme suit :
DisableLoopbackCheck. Permet d’y faire les choses de
la bonne façon

Scénarios de double saut sur plusieurs ordinateurs : l’erreur Passer à la section : Résolution des problèmes
peut se produire en cas d’échec des connexions Kerberos en d’authentification en raison de problèmes Kerberos en bas
raison de problèmes de SPN. pour voir les détails.

Aucun double saut n’est impliqué. Si aucun double saut n’est impliqué, cela peut également
signifier qu’il existe des SNS dupliqués et que le client
s’exécute en tant que LocalSystem ou un autre compte
d’ordinateur qui obtient les informations d’identification
NTLM au lieu des informations d’identification Kerberos.

Passer à la section : Résolution des problèmes


d’authentification en raison de problèmes Kerberos pour
diagnostiquer et résoudre les problèmes de SPN.

Windows stratégie de sécurité locale a peut-être été Sur Windows 2008 R2/Windows 7 et ultérieures, la sécurité
configurée pour empêcher l’utilisation du compte réseau des options de sécurité des stratégies de sécurité
d’ordinateur pour les comptes locaux. locales peut être configurée pour ne pas utiliser le compte
d’ordinateur pour les comptes locaux et utiliser les
informations d’identification anonymes à la | | place.

Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
Échec de connexion pour le message de l’utilisateur « (null) »
Cela signifie que LSASS n’a pas pu déchiffrer le jeton de sécurité à l’aide des informations d SQL Server de
compte de service. La raison principale est que le SPN est associé à un compte erroné.
Pour diagnostiquer et résoudre ces problèmes de SPN, déplacez-vous vers la section Résolution des problèmes
d’authentification en raison des problèmes Kerberos.
Échec de connexion pour l’utilisateur est vide
Par exemple, vous pouvez voir une erreur semblable à ce qui suit :

Source: NETLOGON
Date: 8/12/2012 8:22:16 PM
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <computer name>
Description:This computer was not able to set up a secure session with a domain controller in domain due to
the following: The remote procedure call was cancelled. This may lead to authentication problems. Make sure
that this computer is connected to the network. If the problem persists, please contact your domain
administrator.
Empty string means that SQL tried to hand-off the credentials to LSASS but there was some problem. Either
LSASS was not available or the domain controller could not be contacted.
Check the event logs on the client and the server machines to see if there are any network or Active
Directory related messages around the time of failure and if you do, work with your domain administrator to
fix the issues.

Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
La connexion a échoué pour <username> l’utilisateur ' ou la connexion a échoué pour l’utilisateur <domain> \
<username> ' '
Si le nom de domaine n’est pas spécifié, il s’agit d’un SQL connexion. S’il est spécifié, il s’agit d’une connexion
Windows-Integrated défaut. Examinez le tableau suivant pour déterminer les causes et les résolutions
potentielles.

C A USE ÉTA P ES DE RÉSO L UT IO N

La base de données demandée est hors ligne ou n’est pas Vérifiez les autorisations et la disponibilité de la base de
disponible. données dans SQL Server Management Studio.

L’utilisateur n’a pas d’autorisations sur la base de données Essayez de vous connecter en tant qu’autre utilisateur
demandée. dispose de droits sysadmin.

Pour obtenir des conseils supplémentaires, examinez la résolution des problèmes : Échec de connexion pour
l’utilisateur « x».
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
Échec de la connexion de l’utilisateur <domaine\nom_ordinateur$>'
Vous pouvez également le voir avec les applications IIS qui utilisent la connexion anonyme ou la connexion de
formulaire où le compte d’utilisateur n’est pas usurpé. Le compte iis anonyme (IUSR) ou le compte du pool
d’applications est à la place emprunt d’identité. Le compte IUSR est un compte local et le compte du pool
d’applications peut également être un compte local.
Cette erreur se produit généralement si l’utilisateur est connecté avec un compte local plutôt qu’un compte de
domaine. Si la connexion aux services est hors zone, les informations d’identification de l’ordinateur peuvent
être transmises. Dans certains cas, vous pouvez ajouter ce compte en tant que connexion sur le serveur
principal. Dans d’autres cas, vous pouvez vous connecter avec un compte de domaine et lui fournir les
autorisations appropriées pour accéder au service distant.
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.

Vérifier les erreurs d’expiration du délai d’expiration


L’erreur Expiration du délai d’expiration représente un ou plusieurs des messages d’erreur suivants :

Expiration du délai d’expiration. Le délai d’expiration s’est produit avant la fin de l’opération ou le serveur ne
répond pas.

System.Data.SqlClient.SqlException (0x80131904) : expiration du délai de connexion.


Le délai d’attente s’est écoulé lors de la tentative d’utiliser l’accusé de réception d’une connexion préalable.
Cela peut être dû à l’échec de la connexion préalable ou à l’échec de la réponse du serveur dans le temps.
La durée passée lors de la tentative de connexion à ce serveur était l’initialisation de [pré-connexion] = 23 ;
handshake=14979; ---> System.ComponentModel.Win32Exception (0x80004005) : l’opération d’attente a
été hors délai.

System.Data.SqlClient.SqlException (0x80131904) : expiration du délai d’expiration.


Le délai d’expiration s’est produit avant la fin de l’opération ou le serveur ne répond pas.
System.ComponentModel.Win32Exception (0x80004005) : l’opération d’attente a été hors délai.

Expiration du délai de connexion.


Le délai d’attente s’est écoulé lors de la tentative d’utiliser l’accusé de réception d’une connexion préalable.
Cela peut être dû à l’échec de la connexion préalable ou à l’échec de la réponse du serveur dans le temps.
La durée passée lors de la tentative de connexion à ce serveur était l’initialisation de [pré-connexion]
=21036 ; handshake=0; (Microsoft SQL Server, Erreur : -2).

NOTE
Les deuxième et troisième messages d’erreur se produisent lorsque .Net Framework 4.5 ou supérieur est installé.

Vous pouvez commencer à résoudre les problèmes à partir de la section suivante : Résolution des messages
expirés de délai d’expiration.
Résolution des problèmes de messages expirés
Un délai d’délai est le moment où un quelque chose prend plus de temps qu’il n’est autorisé. Nous abandonnons
essentiellement ce que nous essayions de faire pour ne pas attendre indéfiniment et éventuellement bloquer
d’autres éléments et bloquer une application. Du point de vue de la connectivité, dans sa forme de base, nous
pouvons voir cela de deux manières. L’un est un délai de connectivité, l’autre un délai d’accès à la requête. Vous
devez donc d’abord examiner la pile d’appels complète du message d’erreur pour déterminer s’il s’agit d’un délai
d’accès ou d’un délai d’accès à une commande.
NOTE
Les valeurs par défaut de ces paramètres qui peuvent être définies par le biais du code, de la chaîne de connexion et
d’autres méthodes sont les suivantes :
Délai de connexion : 15 secondes
Délai d’out de requête ou de commande : 30 secondes

Une pile d’appels de délai d’délai de connexion ressemble à ceci :

System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion


of the operation or the server is not responding.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean
breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32
error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject
stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert,
Boolean& marsCapable)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds
connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean
trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String
newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword,
Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions,
Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,
SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity,
SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection
owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object
poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,
DbConnectionPool pool, DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,
DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open() <-- SqlConnection along with Open tells us that we are
trying to open a connection. So, this is not related to a query.

Un délai d’accès à la commande dans .NET 2.0 Framework ressemble à ceci :


System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion
of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader
dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,
String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior
runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior
runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteScalar() <-- SqlCommand is used to work with a query, not
a connection. ExecuteScalar is used to actually execute a query. You could also see other items like
an ExecuteReader or ExecuteNonQuery for example.

Étapes de résolution : ces deux problèmes peuvent être liés à l’environnement SQL Server problèmes. Par
exemple, il peut s’agit d’un réseau lent ou d’un problème de performances de requête. Il n’existe pas de règles
strictes et rapides, car ce qui pourrait être fait ici et d’autres enquêtes peuvent être nécessaires quant à ce qui
pourrait être à l’origine du problème. Il est beaucoup plus courant d’augmenter le délai d’out de requête que
d’augmenter le délai de connexion. En effet, lorsque vous essayez de vous connecter à une source de données, la
connexion se produit généralement rapidement (généralement en quelques millisecondes).

TYPE C H O SES À FA IRE

Délai de connexion
1. Augmentez ConnectionTimout dans votre application.
2. Vérifiez si le port utilisé par SQL est bloqué sur le réseau à
l’aide d’un outil tel que Por tqr y . Pour obtenir des
instructions sur son utilisation, SQL Server à l’aide de l’outil
PortqryUI.

Délai d’out de la commande


Augmentez la valeur CommandTimeout dans votre
application et a affiner les requêtes exécutées sur le back-
end.

Pour plus d’conseils et de suggestions, consultez : Résolution des problèmes : Expiration du délai d’expiration.
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.

Délai d’attente écoulé avant l’obtention d’une connexion à partir du


pool
Elle est généralement causée si les connexions ne sont pas correctement fermées et que l’erreur complète peut
ressembler à ce qui suit :

System.InvalidOperationException : expiration du délai d’expiration. Le délai d’attente s’est écoulé avant


l’obtention d’une connexion à partir du pool.

Cela peut être dû au fait que toutes les connexions en pool étaient en cours d’utilisation et que la taille maximale
du pool a été atteinte. Cela peut généralement être évité par expiration du délai d’expiration. Le délai d’attente
s’est écoulé avant l’obtention d’une connexion à partir du pool.
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.

Connecter serveur SQL à l’aide d’un fichier UDL


Pour plus d’informations sur le test des connexions à SQL Server à l’aide d’un fichier de liaison de données
universelle, voir les connexions de test suivantes à SQL Server à l’aide d’une section de fichier de liaison de
données universelle.
Tester les connexions à SQL Server à l’aide d’un fichier de liaison de données universelle
Les fichiers UDL offrent un moyen simple et efficace de tester les connexions à votre serveur SQL à partir de vos
clients ou d’autres systèmes.
1. Activez l’option pour afficher les extensions de fichier dans votre Windows explorer. Pour cela :
a. Sur Windows 8 et les systèmes ultérieurs : allez à Options de l’Explorateur de fichiers dans le
Panneau de contrôle ou tapez simplement Masquer dans la recherche Windows et dans l’onglet
Affichage, décochez Masquer les extensions pour les types de fichiers connus.
b. Windows 7 et versions antérieures :

2. Accédez au dossier dans lequel vous souhaitez créer le fichier de liaison de données universelle (.udl) (par
exemple c:\temp)
3. Créez un fichier texte (sqlconn.txt) et renommez l’extension .txt .udl. (cliquez sur Oui pour le message
d’avertissement concernant la modification de l’extension de nom de fichier)
4. Double-cliquez sur le fichier .udl de l’étape 3 et faites ce qui suit :
a. Dans l’onglet Fournisseur, sélectionnez le fournisseur que vous utilisez dans votre application (par
exemple, SQL Server Native Client)
b. Dans l’onglet Connexion, sélectionnez ou entrez votre SQL Server et le reste des paramètres
pertinents pour votre application
5. Cliquez ensuite sur Tester la connexion.
Pour plus d’informations et de captures d’écran, consultez le billet de blog suivant sur MSDN :
Informations de base : « Test UDL »
Si cela ne résout pas votre problème, déplacez-vous vers la section Toujours avoir des problèmes.
Encore des problèmes
Nous sommes désolés que ce guide ne vous ait pas permis de résoudre votre problème. Nous vous
recommandons d’aller au SQL Community Microsoft pour obtenir de l’aide. Voici quelques ressources
supplémentaires que vous pourriez trouver utiles :
Étapes à suivre pour résoudre SQL problèmes de connectivité
Résolution des problèmes de connexion au serveur et à la base de données
Résoudre les problèmes de connexion au SQL Server Moteur de base de données
Le certificat reçu du serveur distant a été émis par
une erreur d’autorité de certification non SQL
Server
13/08/2021 • 5 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’établir une connexion
chiffrée à SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2007728

Symptômes
Lorsque vous vous connectez SQL Server, vous pouvez recevoir le message d’erreur suivant :

Une connexion a été établie avec succès avec le serveur, mais une erreur s’est produite lors du processus de
connexion. (fournisseur : fournisseur SSL, erreur : 0 - La chaîne de certificats a été émise par une autorité qui
n’est pas fiable.) (.Net SqlClient Fournisseur de données)

En outre, le message d’erreur suivant est consigné dans le journal des Windows système

Log Name: System


Source: Schannel
Date: 10/13/2020 3:03:31 PM
Event ID: 36882
Task Category: None
Level: Error
Keywords:
User: USERNAME
Computer: COMPUTERNAME
Description:
The certificate received from the remote server was issued by an untrusted certificate authority. Because of
this, none of the data contained in the certificate can be validated. The TLS connection request has failed.
The attached data contains the server certificate.

Cause
Cette erreur se produit lorsque vous essayez d’établir une connexion chiffrée à SQL Server à l’aide d’un certificat
non vérifiable. Cela peut se produire dans les scénarios suivants :

A UTO RIT É
ÉM ET T RIC E DE
C ERT IF IC AT
P RÉSEN T E DA N S L E
M A GA SIN
A UTO RIT ÉS DE
C ERT IF IC AT IO N
C H IF F REM EN T C ÔT É C H IF F REM EN T C ÔT É RA C IN ES DE
SC ÉN A RIO SERVEUR C L IEN T T Y P E DE C ERT IF IC AT C O N F IA N C E
A UTO RIT É
ÉM ET T RIC E DE
C ERT IF IC AT
P RÉSEN T E DA N S L E
M A GA SIN
A UTO RIT ÉS DE
C ERT IF IC AT IO N
C H IF F REM EN T C ÔT É C H IF F REM EN T C ÔT É RA C IN ES DE
SC ÉN A RIO SERVEUR C L IEN T T Y P E DE C ERT IF IC AT C O N F IA N C E

1 Oui Non Vous devez mettre Non


en service un
certificat à partir
d’une source non
fiable (l’autorité
émettrice du
certificat n’est pas
répertoriée en tant
qu’autorité de
confiance dans
autorités de
certification racines
de confiance sur
l’ordinateur client)

2 Désactivé Oui SQL Server certificat Les certificats auto-


auto-généré signés ne s’affiche
pas dans ce magasin.

Lors de l’établissement de connexions chiffrées à SQL Server, le canal sécurisé (Schannel) crée la liste des
autorités de certification de confiance en recherchant le magasin Autorités de certification racines de confiance
sur l’ordinateur local. Pendant la mise en relation TLS, le serveur envoie son certificat de clé publique au client.
L’émetteur d’un certificat de clé publique est appelé autorité de certification. Le client doit s’assurer que
l’autorité de certification est une autorité de certification en qui le client a confiance. Pour ce faire, vous
connaîtrez à l’avance la clé publique des CAs de confiance. Lorsque Schannel détecte un certificat émis par une
autorité de certification non habilitée, comme dans les deux cas ci-dessus, vous obtenez le message d’erreur
répertorié dans la section Symptômes.

Résolution
Si vous utilisez intentionnellement un certificat provenant d’une autorité non fiable ou un certificat auto-signé
pour chiffrer les connexions à SQL Server, vous pouvez utiliser l’une des options suivantes :
Pour le scénario 1 : ajoutez l’autorité de certification au magasin Autorités de certification racines de confiance
sur l’ordinateur client qui lance une connexion chiffrée. Pour ce faire, complétez le certificat de serveur et
installez l’autorité de certification racine sur les procédures de l’ordinateur client répertoriées ci-dessous dans
cette séquence.
Exporte le certificat de serveur.
L’exemple utilise un fichier nommé caCert.cer comme fichier de certificat. Vous devez obtenir ce fichier de
certificat à partir du serveur. Les étapes suivantes expliquent comment exporter le certificat de serveur vers un
fichier :
1. Cliquez sur Démarrer, puis Exécutez, puis tapez MMC. (MMC est un acronyme de Microsoft
Management Console.)
2. Dans MMC, ouvrez les cer tificats.
3. Développez Personnel, puis Cer tificats.
4. Cliquez avec le bouton droit sur le certificat de serveur, puis sélectionnez Toutes les tâches\Expor ter.
5. Cliquez sur Suivant pour aller au-delà de la boîte de dialogue d’accueil de l’Assistant Exportation de
certificat.
6. Confirmez que non, n’expor tez pas la clé privée est sélectionnée, puis cliquez sur Suivant .
7. Assurez-vous que le fichier binaire X.509 codé DER (. CER) ou X.509 codé en base 64 (. CER) est
sélectionné, puis cliquez sur Suivant .
8. Entrez un nom de fichier d’exportation.
9. Cliquez sur Suivant, puis sur Terminer pour exporter le certificat.
Installer l’autorité de certification racine sur l’ordinateur client
1. Démarrez le logiciel en snap-in Certificats pour la MMC sur l’ordinateur client, puis ajoutez le logiciel en
snap-in Certificats.
2. Dans la boîte de dialogue Certificats en ligne, sélectionnez Compte d’ordinateur, puis suivant .
3. Dans le volet Sélectionner un ordinateur, choisissez Ordinateur local : (l’ordinateur sur qui cette console
est en cours d’exécution), puis choisissez Terminer .
4. Choisissez OK pour fermer la boîte de dialogue Ajouter ou supprimer des snap-ins.
5. Dans le volet gauche de la MMC, développez le nœudCer tificats (ordinateur local).
6. Développezle nœud Autorités de certification racines de confiance, cliquez avec le bouton droit sur le
sous-foldeur Certificats, sélectionnez Toutes les tâches, puis sélectionnezImpor ter.
7. Dans l’Assistant Impor tation de certificat, sur la page d’accueil, choisissez Suivant .
8. On the File to Import page, chooseBrowse .
9. Accédez à l’emplacement du fichier de certificat caCert.cer, sélectionnez le fichier, puis choisissezOuvrir .
10. Dans la page Fichier à importer, choisissezSuivant .
11. Dans la page Magasin de certificats, acceptez la sélection par défaut, puis choisissezSuivant .
12. On the Completing the Cer tificate Impor t Wizard page, choose Finish .
Pour les scénarios 1 et 2 : définissez le paramètre Cer tificat de serveur de confiance sur true dans votre
application cliente.
Pour plus d’informations sur la façon de le faire, voir les rubriques suivantes :
Utilisation du chiffrement sans validation dans SQL Server Native Client.
Connexion avec chiffrement à l’aide du pilote JDBC Microsoft pour SQL Server.
Utilisation du chiffrement avec Sqlclient.

NOTE
Si vous utilisez SQL Server Management Studio, vous pouvez cliquer sur l’onglet Options et cocher la case Option de
certificat ser veur de confiance sous l’onglet Propriétés de connexion.

Attention : Les connexions SSL chiffrées à l’aide d’un certificat auto-signé ne fournissent pas une sécurité
renforcée. Elles sont exposées aux man-in-the-middle attaques. Vous ne devez pas vous appuyer sur SSL à l’aide
de certificats auto-signés dans un environnement de production ou sur des serveurs connectés à Internet.
Si la configuration abordée dans les sections précédentes de cet article n’est pas souhaitée, vous pouvez utiliser
l’une des options suivantes pour résoudre ce problème :
Configurer le moteur de base de données pour qu’il utilise le chiffrement selon la procédure dans Activer
les connexions chiffrées au Moteur de base de données
Si le chiffrement n’est pas requis :
Désactivez les paramètres de chiffrement (le cas caser) dans votre application cliente.
Désactivez le chiffrement côté serveur à l’SQL Server Configuration Manager. Pour plus
d’informations sur la façon de faire, voir Configurer le serveur.
Il se peut que vous ne soyez pas en mesure d’établir
une connexion distante SQL Server à partir d’un
déclencheur CLR
14/08/2021 • 4 minutes to read

Cet article vous aide à résoudre le problème dans lequel vous ne pouvez pas établir de connexion distante SQL
Server à partir d’un déclencheur CLR.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2000373

Symptômes
Lorsque vous déployez un déclencheur CLR qui accède aux données à partir d’une SQL Server distante à l’aide
de l’authentification Windows après avoir usurpé l’identité du compte d’utilisateur à l’aide de
WindowsImpersonationContext, vous obtenez le message d’erreur suivant lors de l’exécution du déclencheur.

Msg 6522, Level 16, State 1, Procedure mytrigger, Line 1


Une erreur .NET Framework’est produite lors de l’exécution d’une routine définie par l’utilisateur ou d’une
erreur « mytrigger » agrégée :
System.InvalidOperationException : l’accès aux données n’est pas autorisé dans ce contexte. Le contexte est
une fonction ou une méthode non marquée avec DataAccessKind.Read ou SystemDataAccessKind.Read, est
un rappel pour obtenir des données à partir de la méthode FillRow d’une fonction table valeur, ou est une
méthode de validation UDT.
System.InvalidOperationException :
at System.Data.SqlServer.Internal.ClrLevelContext.CheckSqlAccessReturnCode(SqlAccessApiReturnCode eRc)
at System.Data.SqlServer.Internal.ClrLevelContext.GetCurrentContext(SmiEventSink sink, Boolean
throwIfNotASqlClrThread, Boolean fAllowImpersonation)
at System.Data.SqlServer.Internal.ClrLevelContext.GetCurrentContext(Boolean throwIfNotASqlClrThread,
Boolean fAllowImpersonation)
at System.Data.SqlServer.Internal.ClrLevelContext.SuperiorTransaction.Promote()
at System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction tx)
at System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction tx)
at System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
at System.Transactions.Transaction.Promote()
at System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction transaction)
at System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts)
at System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(Transaction transaction, Byte[]
whereAbouts)
at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)
at System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx)
at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)
at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConn...
L’instruction a été terminée.
Cause
Ce comportement est inhérent au produit. Le code CLR qui s’exécute SQL Server est toujours appelé dans le
contexte du compte de processus. Lorsqu’un déclencheur CLR qui contient du code pour accéder aux données à
partir d’un serveur SQL distant est exécuté, le serveur SQL promeut automatiquement la transaction DML/DDL
vers une transaction distribuée et se connecte au serveur distant à l’aide de l’identité SQL Server. Dans le cas où
WindowsImpersonationContext est utilisé pour usurper l’identité de l’utilisateur appelant, pour les connexions
au serveur SQL distant, la promotion de la transaction de contexte vers une transaction de distribution échoue,
ce qui entraîne l’erreur mentionnée dans la section symptômes.

Résolution
Si vous avez besoin de la fonctionnalité d’emprunt d’identité de l’appelant à l’intérieur d’un déclencheur CLR
SQL, gérez les transactions explicitement dans votre code. Utilisez la méthode pour supprimer l’SQL gestion des
transactions et gérer la transaction distante avec validation ou rollback en conformité
TransactionScopeOption.Supress avec vos besoins. Reportez-vous à la section Étapes à reproduire ci-dessous
pour obtenir un exemple sur la façon de reproduire ce problème et pour obtenir un exemple sur l’utilisation de
la méthode ci-dessus pour résoudre le problème.

Plus d’informations
Ouvrez SQL Server Management Studio, puis connectez-vous à votre instance de SQL Server 2008.
Créez une base de données de test à l’aide du script suivant.

CREATE DATABASE dbTriggerTest


GO
ALTER DATABASE dbTriggerTest SET TRUSTWORTHY ON
GO
USE dbTriggertest
GO
CREATE TABLE t(c1 int)
GO

sp_configure 'clr enabled', 1


GO

reconfigure
GO

Dans Microsoft Visual Studio 2008, créez un projet Visual C# à l’aide SQL Server Project modèle.
Nommez le projet SQLCLRTriggerProject.
Dans le menu Project, sélectionnez Propriétés SQLCLRTriggerProject et configurez la section Base de
données pour qu’elle pointe vers la base de données créée précédemment dans la procédure
(dbTriggerTest) et définissez le niveau d’autorisation sur Externe.
Dans le menu Project, sélectionnez Ajouter un nouvel élément.
Sélectionnez Déclencheur dans la boîte de dialogue Ajouter un nouvel élément.
Tapez un nom pour le nouveau déclencheur.
Remplacez le code du déclencheur nouvellement créé par l’exemple de code suivant.
Liste de code problématique:
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Security.Principal;

public partial class Triggers


{
[Microsoft.SqlServer.Server.SqlTrigger(Name = "mytrigger", Target = "t", Event = "FOR insert")]
public static void mytrigger()
{
WindowsIdentity clientId = null;
WindowsImpersonationContext impersonatedUser = null;

// Get the client ID.


clientId = SqlContext.WindowsIdentity;

// This outer try block is used to thwart exception filter


// attacks which would prevent the inner finally
// block from executing and resetting the impersonation

try
{
try
{
impersonatedUser = clientId.Impersonate();
if (impersonatedUser != null)
{
SqlConnection conn = new SqlConnection(@"Data Source=<Your server name>;Initial
Catalog=master;Integrated Security=SSPI");
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from sys.sysobjects";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
}
finally
{
// Undo impersonation.
if (impersonatedUser != null)
impersonatedUser.Undo();
}
}
catch
{
throw;
}
}
}

Déployez le projet dans la base de données créée à l’étape 2 à l’aide de l’option Déployer Project SQLCLR
dans le menu Build.
Ouvrez SQL Server Management Studio, puis connectez-vous à l’instance de SQL Server 2008 où le
déclencheur est déployé.
Vous devriez voir les deux éléments suivants créés sous la base de données de dbTriggerTest test.
Déclencheurs - mytrigger
Assemblys - SQLCLRTriggerProject
Vérifiez que l’autorisation définie sur l’assembly est définie sur Accès externe à l’aide du volet de
propriétés de SQLCLRTriggerProject l’assembly dans Management Studio.
Exécutez l’instruction suivante pour reproduire le problème.
insert into t values (1)

Remplacez la liste de code problématique par l’exemple de code suivant pour résoudre le problème.
Liste de codes fixes :
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
using System.Security.Principal;
using System.Transactions;

public partial class Triggers


{
[Microsoft.SqlServer.Server.SqlTrigger(Name = "mytrigger", Target = "t", Event = "FOR insert")]
public static void mytrigger()
{
using (new TransactionScope(TransactionScopeOption.Suppress))
{
WindowsIdentity clientId = null;
WindowsImpersonationContext impersonatedUser = null;
// Get the client ID.
clientId = SqlContext.WindowsIdentity;
// This outer try block is used to thwart exception filter
// attacks which would prevent the inner finally
// block from executing and resetting the impersonation
try
{
SqlTransaction tran = null;
try
{
impersonatedUser = clientId.Impersonate();
if (impersonatedUser != null)
{
SqlConnection conn = new SqlConnection(@"Data Source=<Your server
name>;Initial Catalog=master;Integrated Security=SSPI");
conn.Open();
tran = conn.BeginTransaction();
SqlCommand cmd = conn.CreateCommand();
cmd.Transaction = tran;
cmd.CommandText = "select * from sys.sysobjects";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
tran.Commit();
}
}
catch (Exception ex)
{
if (null != tran)
tran.Rollback();
throw ex;
}
finally
{
// Undo impersonation.
if (impersonatedUser != null)
impersonatedUser.Undo();
}
}
catch
{
throw;
}
}
}
}
INSERT EXEC a échoué car la procédure stockée a
modifié le schéma de l’erreur de table cible SQL
Server 2016
13/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème où une procédure stockée dans une base de données qui utilise
la fonctionnalité Magasin de données de requête échoue régulièrement.
Version du produit d’origine : SQL Server 2016
Numéro de la ko d’origine : 4465511

Symptômes
Prenons l’exemple du scénario suivant :
Vous disposez d Microsoft SQL Server base de données 2016 qui utilise la fonctionnalité magasin de
données de requête.
Vous avez une procédure stockée qui effectue un appel à une autre procédure stockée à l’aideINSERT...EXE
syntaxe C.
Le magasin de données de requête exécute régulièrement un nettoyage automatique à mesure que la taille
augmente jusqu’à sa taille maximale configurée et que le magasin de données de requête change
fromREAD_WRITEtoREAD_ONLY d’état.

Dans ce scénario, l’exécution de procédure stockée parente échoue régulièrement et vous recevez un message
d’erreur semblable à ce qui suit :

Msg 556, Niveau 16, État 2, Ligne 5


INSERT EXEC a échoué car la procédure stockée a modifié le schéma de la table cible.

Cause
Lorsque le magasin de données de requête exécute un nettoyage automatique, ce purge est prévu hors du
magasin de données de requête. La requête rencontre une opération de recompilage, car le plan est absent du
magasin de données de requête, mais le plan est toujours présent dans le cache des procédures. Par conception,
lorsque l’opération de recompiler se produit, SQL Server envoie l’erreur 556 pour empêcher l’exécution en
double de la procédure enfant, ce qui entraînerait le retour de résultats incorrects.

Solution de contournement
Pour contourner ce problème, suivez les étapes suivantes :
1. Augmentez la taille du magasin de données de requête. Cela permet de réduire la fréquence ou la probabilité
que le magasin de données de requête efface le plan et entre en READ_ONLY mode d’exploitation.
2. Ajoutez la gestion des erreurs à votre code pour capturer l’erreur 556, puis resoumettre INSERT EXEC la
requête.
3. Effacer le cache de procédure lorsque le magasin de données de requête revient à READ_WRITE l’état à partir
READ_ONLY de .
Informations supplémentaires
En raison des modifications apportées au magasin de données de requête en Microsoft SQL Server 2017, ce
problème ne se produit pas SQL Server 2017. This issue won’t be fixed in SQL Server 2016.
L’exécution SQL Server CLR échoue avec
TypeInitializationException
13/08/2021 • 4 minutes to read

Cet article vous aide à contourner le problème où l’exécution d’objets CLR SQL Server échoue et renvoie une
exception System.TypeInitializationException.
S’applique à : SQL Server
Numéro de la ko d’origine : 4576575

Symptômes
IMPORTANT
Cet article contient des informations qui vous montrent comment réduire les paramètres de sécurité ou désactiver les
fonctionnalités de sécurité sur un ordinateur. Vous pouvez apporter ces modifications pour contourner un problème
spécifique. Avant d’apporter ces modifications, nous vous recommandons d’évaluer les risques associés à l’implémentation
de cette solution de contournement dans votre environnement particulier. Si vous implémentez cette solution de
contournement, prenez les mesures supplémentaires appropriées pour protéger l’ordinateur.

Après avoir installé une mise à jour .NET Framework applicable pour corriger une vulnérabilité décrite dans
CVE-2020-1147,l’exécution d’objets de base de données de création avec l’intégration CLR (Common Language
Runtime) qui lisent le XML dans des objets d’aide à la sécurité DataSet et DataTable échoue. Cela se produit en
raison d’une exception System.TypeInitializationException qui a une exception FileNotFoundException
imbrique. Ce problème indique que l’assembly System.Drawing n’a pas pu être chargé.
Pour référence, voir l’exemple suivant :

Msg 6522, Level 16, State 1, Procedure [your CLR object], Line 0 [Batch Start Line 0] A .NET Framework error
occurred during execution of user-defined routine or aggregate « your CLR object »:
System.TypeInitializationException : l’initialiseur de type pour « Scope » a lancé une exception. --->
System.IO.FileNotFoundException: Could not load file or assembly 'System.Drawing, Version=4.0.0.0,
Culture=neutral, PublicKeyToken= <Token> ' or one of its dependencies. Le fichier spécifié est introuvable.
System.TypeInitializationException :
at System.Data.TypeLimiter.Scope.IsTypeUnconditionallyAllowed(Type type)
at System.Data.TypeLimiter.Scope.IsAllowedType(Type type)
at System.Data.TypeLimiter.EnsureTypeIsAllowed(Type, TypeLimiter capturedLimiter) at
System.Data.DataColumn.UpdateColumnType(Type type, StorageType typeCode)
chez System.Data.DataColumn.. ctor(String columnName, Type dataType, String expr, MappingType type)
at System.Data.XSDSchema.HandleElementColumn(XmlSchemaElement elem, DataTable table, Boolean
isBase)
at System.Data.XSDSchema.HandleParticle(XmlSchemaParticle pt, DataTable table, ArrayList tableChildren,
Boolean isBase)
at System.Data.XSDSchema.HandleComplexType(XmlSchemaComplexType ct, DataTable table, ArrayList
tableChildren, Boolean isNillable)
at System.Data.XSDSchema.InstantiateTable(XmlSchemaElement node, XmlSchemaComplexType typeNode,
Boolean isRef)
at System.Data.XSDSchema.HandleTable(XmlSchemaElement node)
at System.Data.XSDSchema.HandleParticle(XmlSchemaParticle pt, DataTable table, ArrayList tableChildren,
Boolean isBase)
at System.Data.XSDSchema.HandleComplexType(XmlSchemaComplexType ct, DataTable table, ArrayList
tableChildren, Boolean isNillable)
at System.Data.XSDSchema.InstantiateTable(XmlSchemaElement node, XmlSchemaComplexType typeNode,
Boolean isRef)
at System.Data.XSDSchema.HandleTable(XmlSchemaElement node)
at System.Data.XSDSchema.LoadSchema(XmlSchemaSet schemaSet, DataSet ds)
at System.Data.DataSet.InferSchema(XmlDocument xdoc, String[] excludedNamespaces, XmlReadMode
mode)
at System.Data.Data...

Résolution
This issue has been fixed in the October 13, 2020 republishing of the .NET Framework July 2020 Security-Only
Updates.
Pour plus d’informations, notamment sur la façon d’obtenir le correctif, voir .NET Framework republishing of
July 2020 Security Only Updates.

Solution de contournement
WARNING
Cette solution de contournement peut rendre un ordinateur ou un réseau plus vulnérable aux attaques par des
utilisateurs malveillants ou par des logiciels malveillants tels que des virus. Nous ne recommandons pas cette solution de
contournement, mais fournissons ces informations afin que vous pouvez implémenter cette solution de contournement à
votre propre discrétion. Son utilisation relève de votre responsabilité.

Pour les applications qui désérialisent des données XML nontrues dans une instance de l’un ou l’autre des
objets, nous vous recommandons d’utiliser une autre méthode pour accéder DataSet DataTable aux données.
Pour les applications qui lisent uniquement des données XML fiables, vous pouvez essayer l’une des solutions
de contournement suivantes.

NOTE
Les solutions de contournement 1 et 2 sont privilégiées, car les modifications sont apportées localement. La solution de
contournement 3 est à l’échelle du système.

WARNING
Ces solutions de contournement suppriment les restrictions de type pour désérialiser le XML en instances et DataSet
DataTable objets. Cela peut ouvrir un vide de sécurité si l’application lit des entrées non confiance.

Solution de contournement 1 : Appeler AppContext.SetSwitch


Modifiez le début du code SQL clr pour définir leSwitch.System. Commutateur
Data.AllowArbitrar yDataSetTypeInstantiation sur true . Vous devez le faire pour chaque objet CLR
SQL applicable. Voir l’exemple ci-dessous.
Pour plus d’informations, consultez les conseils de sécurité DataSet et DataTable.
Solution de contournement 2 : créer ou modifier le fichierSqlservr.exe.config pour chaque instance
applicable
Cette solution de contournement s’applique uniquement à l’instance elle-même.

IMPORTANT
Nous ne pouvons pas garantir que cette modification ne sera pas écrasée par SQL Server mises à jour ou mises à
niveau d’instances. Nous vous recommandons de déterminer si la modification persiste après une mise à jour ou
une mise à niveau d’instance.

1. Recherchez leSqlservr.exe.config dans les emplacements de fichiers des instances par défaut et
nommées de SQL Server:
%ProgramFiles%\Microsoft SQL Server\<Instance_ID>.<Instance Name>\MSSQL\Binn\

2. Dans le nœud, mais en dehors des nœuds <runtime> imbrmbrés, ajoutez la ligne suivante :

<AppContextSwitchOverrides value="Switch.System.Data.
AllowArbitraryDataSetTypeInstantiation=true"/>

3. Enregistrez le fichier et redémarrez l’instance.


Consultez l’exemple suivant d’une instance SQL Server 2016.

Solution de contournement 3 : créer l’assembly System.Drawing


Créez manuellement l’assembly System.Drawing dans SQL Server à partir du fichier DLL du Global
Assembly Cache (GAC), puis re-créez des assemblys qui utilisent DataSet.ReadXML ou
DataTable.ReadXML. Par exemple :

CREATE ASSEMBLY [Drawing] FROM


'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Draw
ing.dll' WITH PERMISSION_SET = UNSAFE GO

Solution de contournement 4 : créer une sous-clé de Registre


IMPORTANT
Suivez attentivement les étapes de cette solution de contournement. Des problèmes graves peuvent se produire si
vous modifiez le Registre de façon incorrecte. Avant de modifier le Registre, sauvegardez-le pour restauration en
cas de problèmes.

Cette solution de contournement affecte toutes les applications .NET sur le serveur. Par conséquent, vous
ne devez utiliser cette méthode qu’en dernier recours si vous ne pouvez pas utiliser les autres solutions
de contournement.
1. Ouvrez l’Éditeur du Registre.
2. Recherchez la sous-clé suivante :
KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AppContext

3. Créez une REG_SZ, comme suit.

SW ITC H . SY ST EM .
DATA . A L LO WA RB IT RA RY DATA SET T Y P EIN STA N T IAT IO
NOM N

Valeur true

4. Redémarrez toutes SQL Server instances.


Voir l’exemple ci-dessous.

Plus d’informations
Ce problème est dû à l’action d’une mise à jour de sécurité .NET Framework récente pour corriger la validation
du .NET Framework de contenu XML. SQL Server Les objets CLR qui ne lisent pas le XML dans les instances de
l’un ou l’autre des objets DataSet DataTable ne seront pas affectés.
Un index filtré que vous créez avec le prédicat IS
NULL n’est pas utilisé dans SQL Server
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous créez l’index avec l’expression de
prédicat Column IS NULL dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 3051225

Symptômes
Prenons l’exemple du scénario suivant :
Vous créez un index filtré avec l’expression de prédicat Column IS NULL dans SQL Server.
Le champ Colonne n’est pas inclus dans la structure d’index. (Autrement dit, le champ Colonne n’est pas
une clé ou une colonne incluse dans la définition d’index filtrée.)
Par exemple, vous créez la requête suivante :

CREATE UNIQUE CLUSTERED INDEX i_action_rn on dbo.filter_test (rn)


CREATE NONCLUSTERED INDEX i_action_filt_action_date_type ON dbo.filter_test (action_type)
WHERE action_date IS NULL

NOTE
Cette requête n’utilise pas l’index filtré suivant :

select count(*) from dbo.filter_test where action_date is null and action_type=1

Dans ce scénario, l’index filtré n’est pas utilisé. Au lieu de cela, l’index en cluster est utilisé.

Résolution
Pour résoudre ce problème, incluez la colonne testée comme NULL dans les colonnes renvoyées. Vous pouvez
également ajouter cette colonne en tant qu’inclure des colonnes dans l’index.

CREATE NONCLUSTERED INDEX New_i_action_filt_action_date_type ON dbo.filter_test (action_type) include


(action_date) WHERE action_date IS NULL
Plus d’informations
Créer des index filtrés
Index clustered et nonclustered décrits
SQL Server et Azure SQL Database’amélioration de
la gestion de certains types de données et des
opérations peu courantes
13/08/2021 • 31 minutes to read

Cet article explique comment les structures persistantes dans votre base de données SQL Server peuvent être
validées dans le cadre du niveau de compatibilité de mise à niveau, et comment les structures affectées peuvent
être reconstruites après la mise à niveau du niveau de compatibilité.
Version du produit d’origine : SQL Server 2017, SQL Server 2016
Numéro de la ko d’origine : 4010261
Le moteur de base de données Microsoft SQL Server 2016 et Azure SQL Database comprend des améliorations
dans les conversions de types de données et plusieurs autres opérations. La plupart de ces améliorations offrent
une plus grande précision lorsque vous travaillez avec des types à pointe flottante et avec des types date/heure
classiques.
Ces améliorations sont toutes disponibles lorsque vous utilisez un niveau de compatibilité de base de données
d’au moins 130. Cela signifie que pour certaines expressions (pour la plupart rares), vous pouvez voir des
résultats différents pour certaines valeurs d’entrée après avoir mis à niveau la base de données vers le niveau de
compatibilité 130 ou un paramètre supérieur. Ces résultats peuvent être reflétés dans :
structures persistantes dans la base de données ;
données de table incluses soumises aux contraintes CHECK
colonnes calculées persistantes
index de référencement de colonnes calculées
index filtrés et vues indexées.
Si vous avez une base de données créée dans une version antérieure de SQL Server, nous vous recommandons
d’une validation supplémentaire après la mise à niveau vers SQL Server 2016 ou version ultérieure et avant de
modifier le niveau de compatibilité de la base de données.
Si vous constatez que l’une des structures persistantes de votre base de données est affectée par ces
modifications, nous vous recommandons de reconstruire les structures affectées après avoir mis à niveau le
niveau de compatibilité de la base de données. En faisant cela, vous bénéficierez de ces améliorations dans SQL
Server 2016 ou ultérieure.
Cet article explique comment les structures persistantes dans votre base de données peuvent être validées dans
le cadre de la mise à niveau vers le niveau de compatibilité 130 ou un paramètre supérieur, et comment les
structures affectées peuvent être reconstruites après avoir changé le niveau de compatibilité.

Étapes de validation lors d’une mise à niveau vers un niveau de


compatibilité de base de données
À compter SQL Server 2016, les deux SQL Server et Azure SQL Database des améliorations apportées à la
précision des opérations suivantes :
Conversions de types de données rares. Elles incluent notamment les éléments suivants :
Float/integer to/from datetime/smalldatetime
Real/float to/from numeric/money/smallmoney
Float to Real
Certains cas de DATEPART / DATEDIFF et DEGRÉS
CONVERT qui utilise un style NULL
Pour utiliser ces améliorations de l’évaluation des expressions dans votre application, modifiez le niveau de
compatibilité de vos bases de données sur 130 (pour SQL Server 2016) ou 140 (pour SQL Server 2017 et Azure
SQL Database). Pour plus d’informations sur toutes les modifications et quelques exemples qui montrent les
modifications, voir la section Annexe A.
Les structures suivantes dans la base de données peuvent persister les résultats d’une expression :
Données de tableau soumises aux contraintes CHECK
Colonnes calculées persistantes
Index qui utilisent des colonnes calculées dans la clé ou des colonnes incluses
Index filtrés
Vues indexées
Prenons l’exemple du scénario suivant :
Vous avez une base de données qui a été créée par une version antérieure de SQL Server, ou qui a déjà
été créée dans SQL Server 2016 ou une version ultérieure, mais à un niveau de compatibilité 120 ou un
niveau antérieure.
Vous utilisez toutes les expressions dont la précision a été améliorée dans le cadre de la définition des
structures persistantes dans votre base de données.
Dans ce scénario, vous pouvez avoir des structures persistantes affectées par les améliorations de précision
implémentées à l’aide du niveau de compatibilité 130 ou supérieur. Si tel est le cas, nous vous recommandons
de valider les structures persistantes et de reconstruire toute structure affectée.
Si vous avez affecté des structures et que vous ne les ressaisisez pas après avoir changé le niveau de
compatibilité, vous pouvez obtenir des résultats de requête légèrement différents. Les résultats dépendent de
l’utilisation d’un index, d’une colonne calculée ou d’un affichage particulier et de la violation d’une contrainte
par les données d’une table.

NOTE
Indicateur de suivi 139 dans SQL Server
L’indicateur de suivi global 139 est introduit dans SQL Server 2016 CU3 et Service Pack (SP) 1 pour forcer une
sémantique de conversion correcte dans l’étendue des commandes de vérification DBCC telles que **DBCC
CHECKDB,**DBCC CHECKTABLE et DBCC CHECKCONSTRAINTS lorsque vous analysez la logique de conversion et de
précision améliorée introduite avec le niveau de compatibilité 130 sur une base de données ayant un niveau de
compatibilité précédent.

WARNING
L’indicateur de suivi 139 n’est pas destiné à être activé en continu dans un environnement de production et doit être
utilisé dans le seul but d’effectuer les vérifications de validation de base de données décrites dans cet article. Par
conséquent, il doit être désactivé à l’aide du suivi dbcc (139, -1) dans la même session, une fois les vérifications de
validation terminées.

L’indicateur de suivi 139 est pris en charge à SQL Server 2016 CU3 et SQL Server 2016 SP1.
Pour mettre à niveau le niveau de compatibilité, suivez les étapes suivantes :
1. Effectuez la validation pour identifier les structures persistantes affectées :
a. Activez l’indicateur de suivi 139 en exécutant DBCC TRACEON(139, -1).
b. Exécutez les commandes DBCC CHECKDB/TABLE et CHECKCONSTRAINTS.
c. Désactivez l’indicateur de suivi 139 en exécutant DBCC TRACEOFF(139, -1).
2. Modifiez le niveau de compatibilité des bases de données sur 130 (pour SQL Server 2016) ou 140 (pour SQL
Server 2017 et Azure SQL Database).
3. Reconstruire toutes les structures que vous avez identifiées à l’étape 1.

NOTE
Les indicateurs de suivi Azure SQL Database les indicateurs de suivi de paramètres ne sont pas pris en charge dans Azure
SQL Database. Par conséquent, vous devez modifier le niveau de compatibilité avant d’effectuer la validation :

1. Mettre à niveau le niveau de compatibilité des bases de données vers 140.


2. Faites une validation pour identifier les structures persistantes impactées.
3. Reconstruire les structures que vous avez identifiées à l’étape 2.

L’Annexe A contient une liste détaillée de toutes les améliorations apportées à la précision et fournit un
exemple pour chacune d’elles.
L’annexe B contient un processus détaillé pas à pas pour valider et reconstruire les structures affectées.
Les annexes C et D contiennent des scripts pour aider à identifier les objets potentiellement affectés
dans la base de données. Par conséquent, vous pouvez étendue vos validations et générer des scripts
correspondants pour exécuter les vérifications. Pour déterminer plus facilement si des structures
persistantes dans vos bases de données sont affectées par les améliorations de précision apportées au
niveau de compatibilité 130, exécutez le script de l’Annexe D afin de générer les vérifications de validation
correctes, puis exécutez ce script pour la validation.

Annexe A : Modifications du niveau de compatibilité 130


Cette annexe fournit des listes détaillées des améliorations apportées à l’évaluation des expressions dans le
niveau de compatibilité 130. Chaque modification inclut un exemple de requête associé. Les requêtes peuvent
être utilisées pour afficher les différences entre l’exécution dans une base de données qui utilise un niveau de
compatibilité pré-130 par rapport à une base de données qui utilise le niveau de compatibilité 130.
Les tableaux suivants indiquent les conversions de types de données et les opérations supplémentaires.
Conversions de types de données

RÉSULTAT P O UR RÉSULTAT P O UR
L E N IVEA U DE L E N IVEA U DE
EXEM P L E DE C O M PAT IB IL IT É C O M PAT IB IL IT É
DE À REM P L A C EZ REQ UÊT E < 130 = 130
RÉSULTAT P O UR RÉSULTAT P O UR
L E N IVEA U DE L E N IVEA U DE
EXEM P L E DE C O M PAT IB IL IT É C O M PAT IB IL IT É
DE À REM P L A C EZ REQ UÊT E < 130 = 130

float, real, datetime ou Augmentez la DECLARE @f 1.19999996141 1.2


numeric, decimal, smalldatetime précision de FLOAT = 1.2 975
money ou l’arrondi. DECLARE @d
smallmoney Auparavant, le DATETIME = @f
jour et l’heure SELECT CAST(
étaient convertis @d AS FLOAT)
séparément et
les résultats
étaient tronqués
avant de les
combiner.

DateHeure bigint, int ou Une date/heure DECLARE @h 0 -1


smallint négative dont la DATETIME = -
partie heure est 0,5 SELECT @h ,
exactement une CAST( AS @h
demi-journée ou INT)
une coche d’une
demi-journée est
arrondie de
manière
incorrecte (le
résultat est 1).

datetime ou float, real, Précision DECLARE @p0 - -


smalldatetime numeric, money améliorée pour DATETIME = 0,00138344907 0,00138344907
ou smallmoney les 8 derniers '1899-12-31 407406, 407407,
bits de précision 23:58:00.470' 0xBF56AA9B21D 0xBF56AA9B21D
dans certains DECLARE @f 85800 8583B
cas. FLOAT =
CONVERT(FLOAT
, @p0 ) SELECT
@f , CAST( @f AS
VARBINARY(8))

float real Les contrôles de SELECT CAST Dépassement 3,402823E+38


limite sont moins (3,40282347000 arithmétique
stricts. E+038 AS REAL)

numeric, money float Lorsque l’échelle DECLARE @n 0x47200000000 0x47200000000


et smallmoney d’entrée est zéro, NUMERIC(38, 00000 00001
il existe une 0)=
imprécision 4153837486827
arrondie lorsque 8625639929991
vous combinez 208632320
les quatre DECLARE @f
parties FLOAT = CAST(
numériques. AS @n FLOAT)
SELECT
CONVERT(BINAR
Y(8), @f )
RÉSULTAT P O UR RÉSULTAT P O UR
L E N IVEA U DE L E N IVEA U DE
EXEM P L E DE C O M PAT IB IL IT É C O M PAT IB IL IT É
DE À REM P L A C EZ REQ UÊT E < 130 = 130

numeric, money float Lorsque l’échelle DECLARE @n 0x41678C29C06 0x41678C29C06


et smallmoney d’entrée n’est NUMERIC(18, 522C4 522C3
pas zéro, il y a 10) =
une imprécision 12345678.0123
arrondie lorsque 456781
vous divisez par DECLARE @f
10^échelle. FLOAT = CAST(
@n AS FLOAT)
SELECT CAST( @f
AS BINARY(8))

réel ou flottant numeric Précision DECLARE @f 0.2 0.1


d’arrondi float =
améliorée dans 0,14999999999
certains cas. 9999999 SELECT
CAST( @f AS
numeric(1, 1))

réel ou flottant numeric Précision DECLARE @v 0.00000000000 0.00000000000


améliorée decimal(38, 18) 0000000 0000001
lorsque vous = 1E-18 SELECT
arrondissez à @v
plus de 16
chiffres dans
certains cas.

réel ou flottant money ou Amélioration de DECLARE @f 5629499534213 5629499534213


smallmoney la précision float = 2SET @f 12.2048 12.25
lorsque vous = POWER( , @f
convertissez de 49) + POWER(
grands nombres @f , -2) SELECT
dans certains CAST( @f AS
cas. money)

(n) (var)char numeric Une entrée de DECLARE Dépassement 1.1


plus de 39 @value arithmétique
caractères ne nchar(100) =
déclenche plus '1.11111111111
nécessairement 1111111111111
un dépassement 1111111111111
arithmétique. 1111111'
SELECT CAST(
@value AS
decimal(2,1))

(n) (var)char bit Prend en charge DECLARE La conversion a 1


les espaces et les @value échoué lors de la
signes de tête. nvarchar(100) = conversion de la
'1' SELECT CAST( valeur nvarchar «
@value AS bit) 1 » en bits de
type de données.
RÉSULTAT P O UR RÉSULTAT P O UR
L E N IVEA U DE L E N IVEA U DE
EXEM P L E DE C O M PAT IB IL IT É C O M PAT IB IL IT É
DE À REM P L A C EZ REQ UÊT E < 130 = 130

DateHeure heure ou Précision DECLARE 00:00:00.003000 00:00:00.003333


datetime2 améliorée @value datetime 0 3
lorsque vous = '1900-01-01
convertissez en 00:00:00.003'
types date/heure SELECT CAST(
avec une @value AS
précision plus time(7))
élevée. N’ignorez
pas que les
valeurs de
date/heure sont
stockées en tant
que ticks qui
représentent le
1/300e de
seconde. Les
nouveaux types
d’heure et de
date/heure2
stockent un
nombre discret
de chiffres, où le
nombre de
chiffres
correspond à la
précision.

heure ou DateHeure Arrondi amélioré DECLARE 1900-01-01 1900-01-01


datetime2 dans certains @value time(4) 00:00:00.007 00:00:00.003
cas. =
'00:00:00.0045'
SELECT CAST(
@value AS
datetime)

Opération

RÉSULTAT P O UR L E RÉSULTAT P O UR L E
EXEM P L E DE N IVEA U DE N IVEA U DE
O P ÉRAT IO N REM P L A C EZ REQ UÊT E C O M PAT IB IL IT É <130 C O M PAT IB IL IT É 130

Utilisation de la DEGREES divise par DECLARE @arg1 57.29577951308232 57.29577951308232


fonction intégrée pi/180, où il a été numeric = 1 SELECT 3000 2865
RADIANS ou précédemment DEGREES( @arg1 )
DEGREES qui utilise multiplié par 180/pi.
le type de données Similaire pour
numérique. RADIANS.

Ajout ou soustraction L’arrondi se produit DECLARE @p1 8.8 8.9


numérique lorsque toujours après numeric(38, 2) = -
l’échelle d’un l’ajout/soustraction, 1,15 DECLARE @p2
opérande est alors qu’auparavant il numeric(38, 1) = 10
supérieure à l’échelle pouvait parfois se SELECT @p1 + @p2
du résultat. produire auparavant.
RÉSULTAT P O UR L E RÉSULTAT P O UR L E
EXEM P L E DE N IVEA U DE N IVEA U DE
O P ÉRAT IO N REM P L A C EZ REQ UÊT E C O M PAT IB IL IT É <130 C O M PAT IB IL IT É 130

CONVERT avec le CONVERT avec le SELECT CONVERT 0 NULL


style NULL. style NULL renvoie (SMALLINT, '0',
toujours la valeur NULL) ;
NULL lorsque le type
cible est numérique.

DATEPART qui La valeur n’est plus DECLARE @dt 3000 3333


utilise l’option tronquée au niveau DATETIME = '01-01-
microsecondes ou de la milliseconde 1900 00:00:00.003';
nanosecondes, avec avant la conversion SELECT
le type de données en micro ou DATEPART(MICROSE
date/heure. nanosecondes. COND, @dt );

DATEDIFF qui utilise La valeur n’est plus DECLARE @d1 3000 3333
l’option tronquée au niveau DATETIME = '1900-
microsecondes ou de la milliseconde 01-01 00:00:00.003'
nanosecondes, avec avant la conversion DECLARE @d2
le type de données en micro ou DATETIME = '1900-
date/heure. nanosecondes. 01-01 00:00:00.007'
SELECT
DATEDIFF(MICROSEC
OND, @d1 , @d2 )

Comparaison entre La valeur date/heure DECLARE @d1 1900-01-01 1900-01-01


les valeurs datetime n’est plus tronquée DATETIME = '1900- 00:00:00.0030000, 00:00:00.0033333,
et datetime2 avec au niveau 01-01 00:00:00.003' 1900-01-01 1900-01-01
des valeurs non zéro milliseconde lorsque DECLARE @d2 00:00:00.003 égal 00:00:00.003
pour les vous exécutez une DATETIME2(3) = unequal
millisecondes. comparaison avec @d1 SELECT CAST(
une valeur @d1 AS
datetime2. Cela datetime2(7)),
signifie que certaines @d2SELECT CASE
valeurs WHEN ( @d1 = @d2
précédemment ) THEN 'equal' ELSE
comparées égales ne 'unequal' END
sont plus égales.

Fonction ROUND Les résultats de SELECT -0.418 -0.417


qui utilise le type de l’arrondi diffèrent. ROUND(CAST (-
données float. 0.4175 AS FLOAT), 3)

Annexe B : Étapes de vérification et de mise à jour des structures


persistantes
Nous vous recommandons de déterminer si la base de données possède des structures persistantes affectées
par les modifications apportées au niveau de compatibilité 130 et de reconstruire les structures affectées.
Cela s’applique uniquement aux structures persistantes qui ont été créées dans la base de données sur une
version antérieure de SQL Server ou à l’aide d’un niveau de compatibilité inférieur à 130. Les structures
persistantes qui sont potentiellement affectées sont les suivantes :
Données de tableau soumises aux contraintes CHECK
Colonnes calculées persistantes
Index qui utilisent des colonnes calculées dans la clé ou des colonnes incluses
Index filtrés
Vues indexées
Dans ce cas, exécutez la procédure suivante.
Étape 1 : Vérifier le niveau de compatibilité des bases de données
1. Vérifiez le niveau de compatibilité de votre base de données à l’aide de la procédure documentée dans
l’affichage ou modifiez le niveau de compatibilité d’une base de données.
2. Si le niveau de compatibilité de base de données est inférieur à 130, nous vous recommandons d’effectuer la
validation décrite à l’étape 2 avant d’augmenter le niveau de compatibilité à 130.
Étape 2 : Identifier les structures persistantes affectées
Déterminez si la base de données contient des structures persistantes affectées par l’amélioration de la logique
de précision et de conversion dans le niveau de compatibilité 130 de l’une des manières suivantes :
DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS , qui valide toutes les structures dans la base de
données.
DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS , qui valide les structures liées à une seule
table.
L’option WITH EXTENDED_LOGICAL_CHECKS est nécessaire pour s’assurer que les valeurs persistantes sont
comparées aux valeurs calculées et pour indicateurs des cas dans lesquels il existe une différence. Étant donné
que ces vérifications sont étendues, le runtime des instructions DBCC qui utilisent cette option est plus long que
l’exécution des instructions DBCC sans cette option. Par conséquent, pour les bases de données de grande taille,
il est recommandé d’utiliser DBCC CHECKTABLE pour identifier des tables individuelles.
DBCC CHECKCONSTRAINTS peut être utilisé pour valider les contraintes CHECK. Cette instruction peut être
utilisée au niveau de la base de données ou de la table.
Les instructions DBCC CHECK** doivent toujours être exécutés pendant une fenêtre de maintenance, en raison
de l’impact potentiel des vérifications sur la charge de travail en ligne.
Validation au niveau de la base de données La validation au niveau de la base de données convient aux
bases de données de petite taille et de taille moyenne. Utilisez la validation au niveau de la table pour les bases
de données de grande taille.
DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS est utilisé pour valider toutes les structures
persistantes dans la base de données.
DBCC CHECKCONSTRAINTS est utilisé pour valider toutes les contraintes CHECK dans la base de données.
DBCC CHECKCONSTRAINTS est utilisé pour valider l’intégrité des contraintes. Utilisez le script suivant pour
valider la base de données :

USE [database_name]

GO

DBCC TRACEON(139, -1)

GO

DBCC CHECKCONSTRAINTS

GO

DBCC TRACEOFF(139, -1)

GO
L’utilisation de l’indicateur de suivi permet de s’assurer que les vérifications sont effectuées à l’aide de la logique
de précision et de conversion améliorée, qui est dans le niveau de compatibilité 130, forçant la sémantique de
conversion correcte même lorsque le niveau de compatibilité de la base de données est inférieur.
Si l’instruction CHECKCONSTRAINTS est terminée et ne retourne pas de jeu de résultats, aucune action
supplémentaire n’est nécessaire.
Si l’instruction retourne un jeu de résultats, chaque ligne des résultats indique une violation d’une contrainte et
inclut également les valeurs qui enfreignent la contrainte.
Enregistrez les noms des tables et des contraintes, ainsi que les valeurs à l’origine de la violation (colonne «
Where » dans le jeu de résultats).
L’exemple suivant montre un tableau avec une contrainte CHECK et une seule ligne qui satisfait à la contrainte
sous des niveaux de compatibilité inférieurs, mais qui enfreint la contrainte sous le niveau de compatibilité 130.

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=120

GO

CREATE TABLE dbo.table1

c2 datetime,

c3 datetime,

c4 int,

CONSTRAINT chk1 CHECK (c4= (DATEDIFF (ms, c2,c3)))

GO

INSERT dbo.table1 (c2, c3, c4) VALUES

(
convert(datetime, '1900-01-01 00:00:00.997'),

convert(datetime, '1900-01-01 00:00:01'), 3


)

GO

DBCC TRACEON(139, -1)

GO

DBCC CHECKCONSTRAINTS

GO

DBCC TRACEOFF(139, -1)

GO

La commande CHECKCONSTRAINT renvoie les résultats suivants.


TA B L EA U C O N T RA IN T E OÙ

[dbo]. [tableau1] [chk1] [c2] = '1900-01-01 00:00:00.997'


AND [c3] = '1900-01-01
00:00:01.000' AND [c4] = '3'

Ce résultat indique que la contrainte [chk1] est enfreinte pour la combinaison de valeurs de colonnes dans le «
Where ».
DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS
DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS valide toutes les structures persistantes dans la base
de données. Il s’agit de l’option la plus pratique, car une instruction unique valide toutes les structures de la base
de données. Toutefois, cette option n’est pas adaptée aux bases de données de grande taille en raison de
l’utilisation prévue de l’instruction.
Utilisez le script suivant pour valider la base de données entière :

USE [database_name]

GO

DBCC TRACEON(139, -1)

GO

DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS, NO_INFOMSGS, TABLERESULTS

GO

DBCC TRACEOFF(139, -1)

GO

L’utilisation de l’indicateur de suivi permet de s’assurer que les vérifications sont effectuées à l’aide de la logique
de précision et de conversion améliorée, qui est dans le niveau de compatibilité 130, forçant la sémantique de
conversion correcte même lorsque le niveau de compatibilité de la base de données est inférieur.
Si l’instruction CHECKDB est terminée correctement, aucune action supplémentaire n’est nécessaire.
Si l’instruction est terminée par des erreurs, suivez les étapes suivantes :
1. Enregistrez les résultats de l’exécution de l’instruction DBCC, trouvée dans le volet des messages de SQL
Server Management Studio (SSMS), dans un fichier.
2. Vérifier que l’une des erreurs signalées est liée à des structures persistantes
Tableau 1 : Structures persistantes et messages d’erreur correspondants pour les incohérences

T Y P E DE ST RUC T URE A F F EC T É M ESSA GES D’ERREUR O B SERVÉS P REN EZ N OT E DE

Colonnes calculées persistantes Msg 2537, Level 16 Table error: object ID d'<object_id>'objet et ID d’index
ID <object_id> , index ID <index_id> , <index_id>
. Échec de la vérification
d’enregistrement (colonne calculée
valide). Les valeurs sont .
T Y P E DE ST RUC T URE A F F EC T É M ESSA GES D’ERREUR O B SERVÉS P REN EZ N OT E DE

Index référencing des colonnes Erreur de tableau Msg 8951 : table ID d'<object_id>'objet et ID d’index
calculées dans la clé ou colonnes '<table_name>' (ID <object_id>). La <index_id>
incluses Index filtrés ligne de données n’a pas de ligne
d’index correspondante dans l’index «
<index_name> » (ID <index_id>) Et/ou
erreur de tableau Msg 8952 : table '
<table_name> ' (ID <table_name>). La
ligne d’index dans l’index '' (ID
<index_id>) ne correspond à aucune
ligne de données. En outre, il peut y
avoir des erreurs secondaires 8955
et/ou 8956. Il contient des détails sur
les lignes exactes impactées. Ceux-ci
peuvent être ignorés pour cet exercice.

Vues indexées Msg 8908 La vue indexée « ID d’objet <object_id>


<view_name> » (ID d’objet
<object_id>) ne contient pas toutes les
lignes produites par la définition
d’affichage. And/or Msg 8907 The
indexed view '<view_name>' (object ID
<object_id>) contains rows that were
not produced by the view definition.

Une fois que vous avez terminé la validation au niveau de la base de données, allez à l’étape 3.
Validation au niveau de l’objet
Pour les bases de données plus volumineuses, il est utile de valider les structures et les contraintes d’une table
ou d’une vue à la fois pour réduire la taille des fenêtres de maintenance ou pour limiter les contrôles logiques
étendus uniquement aux objets potentiellement affectés.
Utilisez les requêtes de la section Annexe C pour identifier les tableaux potentiellement affectés. Le script de la
section Annexe D peut être utilisé pour générer des contraintes CHECKTABLE et CHECKCONSTRAINTS
basées sur les requêtes répertoriées dans la section Annexe C.
DBCC CHECKCONSTRAINTS
Pour valider les contraintes liées à une seule table ou vue, utilisez le script suivant :

USE [database_name]

GO

DBCC TRACEON(139, -1)

GO

DBCC CHECKCONSTRAINTS()

GO

DBCC TRACEOFF(139, -1)

GO

L’utilisation de l’indicateur de suivi permet de s’assurer que les vérifications sont effectuées à l’aide de la logique
de précision et de conversion améliorée, qui est dans le niveau de compatibilité 130, forçant la sémantique
améliorée même lorsque le niveau de compatibilité de la base de données est inférieur.
Si l’instruction CHECKCONSTRAINTS est terminée et ne retourne pas de jeu de résultats, aucune action
supplémentaire n’est nécessaire.
Si l’instruction retourne un jeu de résultats, chaque ligne des résultats indique une violation d’une contrainte et
fournit également les valeurs qui enfreignent la contrainte.
Enregistrez les noms des tables et des contraintes, ainsi que les valeurs à l’origine de la violation (colonne
Where dans le jeu de résultats).
DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS
Pour valider les structures persistantes liées à une seule table ou vue, utilisez le script suivant :

USE [database_name]

GO

DBCC TRACEON(139, -1)

GO

DBCC CHECKTABLE() WITH EXTENDED_LOGICAL_CHECKS, NO_INFOMSGS, TABLERESULTS

GO

DBCC TRACEOFF(139, -1)

GO

Si l’instruction CHECKTABLE est terminée correctement, aucune action supplémentaire n’est nécessaire.
Si l’instruction est terminée par des erreurs, suivez les étapes suivantes :
1. Enregistrez les résultats de l’exécution de l’instruction DBCC, trouvée dans le volet des messages SSMS, dans
un fichier.
2. Vérifiez que les erreurs signalées sont liées à des structures persistantes, comme indiqué dans le tableau 1.
Une fois que vous avez terminé la validation au niveau du tableau, allez à l’étape 3.
Étape 3 : Mise à niveau vers le niveau de compatibilité 130
Si le niveau de compatibilité de la base de données est déjà de 130, vous pouvez ignorer cette étape.
Le niveau de compatibilité de la base de données peut être modifié en 130 à l’aide du script suivant :

USE [database_name]

GO

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130

GO

NOTE
Étant donné que des modifications sont apportées à l’optimiseur de requête sous le niveau de compatibilité 130, nous
vous recommandons d’activer le magasin de requêtes avant de modifier le niveau de compatibilité. Pour plus
d’informations, voir la section Conserver la stabilité des performances lors de la mise à niveau vers des SQL Server plus
nouvelles dans les scénarios d’utilisation du magasin de requêtes.
Étape 4 : Mettre à jour les structures persistantes
Si aucune incohérence n’a été trouvée lors de la validation effectuée à l’étape 2, vous avez terminé la mise à
niveau et pouvez ignorer cette étape. Si des incohérences ont été trouvées à l’étape 2, des actions
supplémentaires sont requises pour supprimer les incohérences de la base de données. Les actions requises
dépendent du type de structure concerné.

IMPORTANT
Ne faites les actions de réparation de cette étape qu’une fois le niveau de compatibilité de base de données passé à 130.

Back up your database (or databases)


Nous vous recommandons d’effectuer une sauvegarde complète de la base de données avant d’effectuer les
actions que la section suivante décrit. Si vous utilisez Azure SQL Database, vous n’avez pas besoin d’une
sauvegarde vous-même . vous pouvez toujours utiliser la fonctionnalité de restauration à un point dans le
temps pour revenir dans le temps en cas de problème avec l’une des mises à jour.
Contraintes CHECK
La correction des violations de contrainte CHECK nécessite la modification des données de la table ou de la
contrainte CHECK elle-même.
À partir du nom de la contrainte (obtenu à l’étape 2), vous pouvez obtenir la définition de contrainte comme suit
:

SELECT definition FROM sys.check_constraints

WHERE object_id= OBJECT_ID(N'constraint_name')

Pour inspecter les lignes de tableau affectées, vous pouvez utiliser les informations Where précédemment
renvoyées par l’instruction DBCC CHECKCONSTRAINTS :

SELECT *

FROM [schema_name].[table_name]

WHERE Where_clause

Vous devez mettre à jour les lignes affectées ou modifier la définition de contrainte pour vous assurer que la
contrainte n’est pas violée.
Mise à jour des données de table
Il n’existe aucune règle en dur indiquant comment les données doivent être mises à jour. En règle générale, pour
chaque instruction Where différente renvoyée par DBCC CHECKCONSTRAINTS, vous exécutez l’instruction de
mise à jour suivante :

UPDATE [schema_name].[table_name] SET new_column_values

WHERE Where_clause

Prenons l’exemple de tableau suivant avec une contrainte et une ligne qui ne respecte pas la contrainte dans le
niveau de compatibilité 130 :
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=120

go

CREATE TABLE dbo.table1

c2 datetime,

c3 datetime,

c4 int,

CONSTRAINT chk1 CHECK (c4= (DATEDIFF (ms, c2, c3)))

GO

INSERT dbo.table1 (c2, c3, c4) VALUES

(convert(datetime, '1900-01-01 00:00:00.997'),

convert(datetime, '1900-01-01 00:00:01'), 3)

GO

Dans cet exemple, la contrainte est simple : la colonne c4 doit être égale à une expression impliquant c2 et c3.
Pour mettre à jour le tableau, affectez cette valeur à c4 :

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130

GO

UPDATE dbo.table1 SET c4 = datediff (ms, c2,c3)

WHERE [c2] = '1900-01-01 00:00:00.997' AND [c3] = '1900-01-01 00:00:01.000' AND [c4] = '3'

GO

Notez que la clause WHERE utilisée dans l’instruction de mise à jour correspond aux informations Where
renvoyées par DBCC CHECKCONSTRAINTS .
Mise à jour de la contrainte CHECK
Pour modifier une contrainte CHECK, vous devez la déposer et la créer à nouveau. Nous vous recommandons
de faire les deux dans la même transaction, juste au cas où il existe des problèmes avec la définition de
contrainte mise à jour. Vous pouvez utiliser le transact-SQL :
BEGIN TRANSACTION

ALTER TABLE [schema_name].[table_name]

DROP CONSTRAINT [constraint_name]

ALTER TABLE [schema_name].[table_name]

ADD CONSTRAINT [constraint_name]

CHECK (new_constraint_definition)

COMMIT

GO

The following example updates the constraint chk1 in dbo.table1:

BEGIN TRANSACTION

ALTER TABLE dbo.table1

DROP CONSTRAINT chk1

ALTER TABLE dbo.table1

ADD CONSTRAINT chk1

CHECK (c4 <= DATEDIFF (ms, c2, c3))

COMMIT

GO

Colonnes calculées persistantes


Le moyen le plus simple de mettre à jour les colonnes calculées persistantes consiste à mettre à jour l’une des
colonnes référencés par la colonne calculée. La nouvelle valeur de la colonne peut être identique à l’ancienne, de
telle manière que l’opération ne modifie aucune donnée utilisateur.
Suivez ces étapes pour chaque object_id liées aux incohérences dans les colonnes calculées que vous avez
notées à l’étape 2.
1. Identifiez les colonnes calculées :
Exécutez la requête suivante pour récupérer le nom de la table et les noms des colonnes calculées
persistantes pour les object_id :

SELECT QUOTENAME(s.name) + N'.' + QUOTENAME(t.name) AS 'table',


QUOTENAME(c1.name) AS 'persisted computed column',
c1.column_id AS 'computed_column_id' ,
definition AS 'computed_column_definition'
FROM sys.tables t
JOIN sys.computed_columns c1 ON t.object_id=c1.object_id
AND c1.is_persisted=1
JOIN sys.schemas s on t.schema_id=s.schema_id
WHERE t.object_id=object_id

2. Identifiez les colonnes référencés :


Exécutez la requête suivante pour identifier les colonnes référencés par la colonne calculée. Notez l’une des
referenced_column_names :
SELECT QUOTENAME(s.name) + N'.' + QUOTENAME(o.name) AS 'referencing object',
o.type_desc AS 'object type', referenced_minor_id AS 'referenced_column_id', c.name AS
'referenced_column_name'
FROM sys.sql_expression_dependencies sed
JOIN sys.computed_columns c1 ON sed.referencing_id=c1.object_id AND
sed.referencing_minor_id=c1.column_id
JOIN sys.objects o ON sed.referencing_id=o.object_id
JOIN sys.schemas s ON o.schema_id=s.schema_id
JOIN sys.columns c ON o.object_id=c.object_id AND sed.referenced_minor_id=c.column_id
WHERE referencing_class=1 AND referenced_class=1 AND referencing_id=object_id AND
referencing_minor_id=computed_column_id

3. Exécutez une instruction UPDATE impliquant l’une des colonnes référencés pour déclencher une mise à
jour de la colonne calculée :
L’instruction suivante déclenche une mise à jour de la colonne référencé par la colonne calculée et
déclenche également une mise à jour de la colonne calculée.

UPDATE [schema_name].[table_name]
SET referenced_column_name=ISNULL(referenced_column_name, referenced_column_name)

L’expression ISNULL dans l’instruction est conçue de telle sorte que la valeur de la colonne
d’origine ne soit pas modifiée, tout en s’assure que la colonne calculée est mise à jour à l’aide de la
logique d’évaluation des expressions du niveau de compatibilité DB 130.
Sachez que pour les très grandes tables, vous ne souhaitez peut-être pas mettre à jour toutes les
lignes d’une seule transaction. Dans ce cas, vous pouvez exécuter la mise à jour par lots en
ajoutant une clause WHERE à l’instruction update qui identifie une plage de lignes ; basée sur la clé
primaire, par exemple .
4. Identifiez les index qui font référence à la colonne calculée.

SELECT i.name AS [index name]


FROM sys.index_columns ic JOIN sys.indexes i ON ic.object_id=i.object_id AND ic.index_id=i.index_id
WHERE i.object_id=object_id AND ic.column_id=computed_column_id

Cette requête identifie les index qui font référence à la colonne calculée persistante. Tout index de ce type doit
être reconstruit. Pour ce faire, suivez les étapes de la section suivante.
Index, index filtrés et vues indexées
Les incohérences dans les index correspondent aux erreurs 8951 et 8952 (pour les tables) ou 8907 et 8908
(pour les affichages) dans la sortie DBCC CHECK* de l’étape 2.
Pour réparer ces incohérences, exécutez DBCC CHECKTABLE avec REPAIR_REBUILD. Cela répare les structures
d’index sans perte de données. Toutefois, la base de données doit être en mode utilisateur unique et n’est donc
pas disponible pour les autres utilisateurs pendant la réparation.
Vous pouvez également reconstruire manuellement les index affectés. Cette option doit être utilisée si la charge
de travail ne peut pas être mise hors connexion, car la reconstruction d’index peut être effectuée en tant
qu’opération EN LIGNE (dans les éditions prises en charge de SQL Server).
Reconstruire les index
Si la définition de la base de données en mode utilisateur unique n’est pas une option, vous pouvez reconstruire
individuellement les index à l’aide de ALTER INDEX REBUILD, pour chaque index identifié à l’étape 2.
Utilisez la requête suivante pour obtenir les noms de table et d’index pour une object_id données index_id.

SELECT QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(o.name) AS 'table', i.name AS 'index_name'

FROM sys.objects o JOIN sys.indexes i ON o.object_id=i.object_id

WHERE o.object_id = object_id AND i.index_id = index_id

Use the following statement to rebuild the index:

ALTER INDEX index_name ON [schema_name].[table_name] REBUILD WITH (ONLINE=ON)

NOTE
Si vous utilisez des éditions Standard, Web ou Express, la build d’index en ligne n’est pas prise en charge. Par conséquent,
l’option WITH (ONLINE=ON) doit être supprimée de l’instruction ALTER INDEX.

L’exemple suivant illustre la reconstruction d’un index filtré :

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=120

GO

CREATE TABLE dbo.table2

c2 datetime,

c3 float

GO

INSERT dbo.table2 (c2,c3) VALUES ('1899-12-31 23:58:00.470', -0.00138344907407406)

GO

CREATE INDEX ix_1 ON dbo.table2(c2)

WHERE (c2=-0.00138344907407406)

GO

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130GOALTER INDEX ix_1 ON [dbo].[table2] REBUILD WITH
(ONLINE=ON)

GO

Si vous avez des plans de maintenance réguliers, nous vous recommandons d’inclure cette reconstruction
d’index dans le cadre de votre maintenance programmée.
Réparer à l’aide du DBCC
Pour chaque (object_id) liées à un index avec des incohérences que vous avez notées à l’étape 2, exécutez le
script suivant pour effectuer la réparation. Ce script définit la base de données en mode utilisateur unique pour
l’opération de réparation. Dans le pire des cas, la réparation effectue une reconstruction complète de l’index.
USE [database_name]

GO

ALTER DATABASE CURRENT SET SINGLE_USER WITH ROLLBACK IMMEDIATE

GO

DBCC CHECKTABLE (object_id, REPAIR_REBUILD) WITH EXTENDED_LOGICAL_CHECKS, NO_INFOMSGS, TABLERESULTS

GO

ALTER DATABASE CURRENT SET MULTI_USER

GO

Annexe C : Requêtes pour identifier les tableaux candidats


Les scripts suivants identifient les tableaux candidats que vous souhaitez peut-être valider à l’aide de DBCC
CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS, en fonction de l’existence de structures et de contraintes
persistantes qui utilisent des types de données affectés par les améliorations apportées au niveau de
compatibilité 130.
L’ensemble de requêtes suivant liste des détails sur les tables et les structures potentiellement affectées qui
nécessitent une validation supplémentaire.
Vues indexées
La requête suivante renvoie toutes les vues indexées faisant référence à des colonnes à l’aide de types de
données affectés ou à l’aide de l’une des fonctions intégrées concernées :
SELECT QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(o.name) AS 'view', QUOTENAME(i.name) AS
'index',QUOTENAME(sed.referenced_schema_name) + N'.' + QUOTENAME(sed.referenced_entity_name) AS 'referenced
table', QUOTENAME(c.name) AS 'referenced column', t.name AS 'data type',

-- if the data type is numeric, integer, or money, the only cases that warrent additional checks

-- with DBCC is if the view definition contains a float or datetime value, or a conversion to such value

s.definition

FROM sys.sql_expression_dependencies sed

JOIN sys.objects o ON sed.referencing_id = o.object_id AND o.type=N'V'

JOIN sys.indexes i ON o.object_id=i.object_id

JOIN sys.sql_modules s ON s.object_id=o.object_id

JOIN sys.columns c ON sed.referenced_id=c.object_id AND sed.referenced_minor_id=c.column_idJOIN sys.types t


ON c.system_type_id=t.system_type_id

WHERE referencing_class=1 AND referenced_class=1 AND (c.system_type_id IN

( 59 --real

, 62 --float

, 58 --smalldatetime

, 61 --datetime

, 60 --money

, 122 --smallmoney

, 106 --decimal

, 108 --numeric

, 56 --int

, 48 --tinyint

, 52 -- smallint

, 41 --time

, 127 --bigint

) OR s.[definition] LIKE '%DATEDIFF%'

OR s.[definition] LIKE '%CONVERT%'

OR s.[definition] LIKE '%CAST%'

OR s.[definition] LIKE '%DATEPART%'

OR s.[definition] LIKE '%DEGREES%')

Colonnes calculées persistantes


La requête suivante renvoie toutes les tables avec des colonnes calculées faisant référence à d’autres colonnes à
l’aide de types de données affectés ou à l’aide de l’une des fonctions intégrées affectées, où la colonne est
persistante ou référencé à partir d’un index.

SELECT QUOTENAME(sed.referenced_schema_name) + N'.' +


SELECT QUOTENAME(sed.referenced_schema_name) + N'.' +

QUOTENAME(sed.referenced_entity_name) AS 'candidate table with computed column',

QUOTENAME(c1.name) AS 'computed column', c1.is_persisted,QUOTENAME(c2.name) AS 'referenced column', t.name


AS 'data type',

-- if the data type is numeric, integer, or money, the only cases that warrent additional checks

-- with DBCC is if the column definition contains a float or datetime value, or a conversion to such value

c1.definition

FROM sys.sql_expression_dependencies sed

JOIN sys.computed_columns c1 ON sed.referencing_id=c1.object_id AND sed.referencing_minor_id=c1.column_id

JOIN sys.columns c2 ON sed.referenced_id=c2.object_id AND sed.referenced_minor_id=c2.column_id

JOIN sys.types t ON c2.system_type_id=t.system_type_idWHERE referencing_class=1 AND referenced_class=1

AND (c2.system_type_id IN

( 59 --real

, 62 --float

, 58 --smalldatetime

, 61 --datetime

, 60 --money

, 122 --smallmoney

, 106 --decimal

, 108 --numeric

, 56 --int

, 48 --tinyint

, 52 -- smallint

, 41 --time

, 127 --bigint

) OR c1.[definition] LIKE '%DATEDIFF%'

OR c1.[definition] LIKE '%CONVERT%'

OR c1.[definition] LIKE '%DATEPART%'

OR c1.[definition] LIKE '%DEGREES%')

AND (

-- the column is persisted

c1.is_persisted=1

-- OR the column is included in an index

OR EXISTS (SELECT 1 FROM sys.index_columns ic WHERE ic.object_id=c1.object_id AND ic.column_id=c1.column_id)

)
Index filtrés
La requête suivante renvoie toutes les tables avec index filtrés qui font référence à des colonnes dans la
condition de filtre qui ont des types de données affectés :

SELECT QUOTENAME(sed.referenced_schema_name) + N'.' +

QUOTENAME(sed.referenced_entity_name) AS 'candidate table with filtered index',

QUOTENAME(i.name) AS 'referencing index',

QUOTENAME(c.name) AS 'referenced column',

t.name AS 'data type',

-- if the data type is numeric, integer, or money, the only cases that warrent additional checks

-- with DBCC is where the filter condition contains a float or datetime value

i.filter_definition AS 'filter condition'

FROM sys.sql_expression_dependencies sed

JOIN sys.indexes i ON sed.referencing_id=i.object_id AND sed.referencing_minor_id=i.index_id

JOIN sys.columns c ON sed.referenced_id=c.object_id AND sed.referenced_minor_id=c.column_id

JOIN sys.types t ON c.system_type_id=t.system_type_id

WHERE referencing_class=7 AND referenced_class=1 AND i.has_filter=1

AND c.system_type_id IN ( 59 --real

, 62 --float

, 58 --smalldatetime

, 61 --datetime

, 60 --money

, 122 --smallmoney

, 106 --decimal

, 108 --numeric

, 56 --int

, 48 --tinyint

, 52 -- smallint

, 41 --time

, 127 --bigint

Vérifier les contraintes


La requête suivante répertorie toutes les tables avec des contraintes de vérification qui font référence aux types
de données affectés ou aux fonctions intégrées :
SELECT QUOTENAME(sed.referenced_schema_name) + N'.' +

QUOTENAME(sed.referenced_entity_name) AS 'candidate table with check constraint',

QUOTENAME(c.name) AS 'constraint_name', c.definition AS 'constraint_definition',

QUOTENAME(col.name) AS 'referenced column', t.name AS 'data type'

FROM sys.sql_expression_dependencies sed

JOIN sys.check_constraints c ON sed.referencing_id=c.object_id AND sed.referencing_class=1

JOIN sys.columns col ON sed.referenced_id=col.object_id AND sed.referenced_minor_id=col.column_id

JOIN sys.types t ON col.system_type_id=t.system_type_id

WHERE referencing_class=1 AND referenced_class=1 AND (col.system_type_id IN

( 59 --real

, 62 --float

, 58 --smalldatetime

, 61 --datetime

, 60 --money

, 122 --smallmoney

, 106 --decimal

, 108 --numeric

, 56 --int

, 48 --tinyint

, 52 -- smallint

, 41 --time

, 127 --bigint)

OR c.[definition] LIKE '%DATEDIFF%'

OR c.[definition] LIKE '%CONVERT%'

OR c.[definition] LIKE '%DATEPART%'

OR c.[definition] LIKE '%DEGREES%')

Annexe D : Script pour créer des instructions CHECK*


Le script suivant combine les requêtes de l’annexe précédente et simplifie les résultats en présentant une liste de
tableaux et d’affichages sous la forme d’instructions CHECKCONSTRAINTS et CHECKTABLE.

DECLARE @CRLF nvarchar(10) = CHAR(13) + CHAR(10);


DECLARE @sql nvarchar(max) = N'DBCC TRACEON(139,-1); ' + @CRLF ;

SELECT @sql += N'DBCC CHECKTABLE (N''' + object_for_checktable + N''') WITH EXTENDED_LOGICAL_CHECKS,


NO_INFOMSGS, TABLERESULTS; ' + @CRLF
FROM
(
--indexed views
SELECT DISTINCT QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(o.name) AS 'object_for_checktable'
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id AND o.type = N'V'
INNER JOIN sys.indexes AS i ON o.object_id = i.object_id
INNER JOIN sys.sql_modules AS s ON s.object_id = o.object_id
INNER JOIN sys.columns AS c ON sed.referenced_id = c.object_id AND sed.referenced_minor_id = c.column_id
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id

WHERE referencing_class = 1 AND referenced_class=1


AND (c.system_type_id IN
( 59 --real
, 62 --float
, 58 --smalldatetime
, 61 --datetime
, 60 --money
, 122 --smallmoney
, 106 --decimal
, 108 --numeric
, 56 --int
, 48 --tinyint
, 52 -- smallint
, 41 --time
, 127 --bigint
) OR s.[definition] LIKE N'%DATEDIFF%'
OR s.[definition] LIKE N'%CONVERT%'
OR s.[definition] LIKE N'%CAST%'
OR s.[definition] LIKE N'%DATEPART%'
OR s.[definition] LIKE N'%DEGREES%')

UNION

--persisted computed columns


SELECT DISTINCT QUOTENAME(sed.referenced_schema_name) + N'.' + QUOTENAME(sed.referenced_entity_name) AS
'object_for_checktable'
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.computed_columns AS c1 ON sed.referencing_id = c1.object_id AND sed.referencing_minor_id =
c1.column_id
INNER JOIN sys.columns AS c2 ON sed.referenced_id=c2.object_id AND sed.referenced_minor_id = c2.column_id
INNER JOIN sys.types AS t ON c2.system_type_id = t.system_type_id
WHERE referencing_class = 1 AND referenced_class = 1
AND (c2.system_type_id IN
( 59 --real
, 62 --float
, 58 --smalldatetime
, 61 --datetime
, 60 --money
, 122 --smallmoney
, 106 --decimal
, 108 --numeric
, 56 --int
, 48 --tinyint
, 52 -- smallint
, 41 --time
, 127 --bigint
) OR c1.[definition] LIKE N'%DATEDIFF%'
OR c1.[definition] LIKE N'%CONVERT%'
OR c1.[definition] LIKE N'%DATEPART%'
OR c1.[definition] LIKE N'%DEGREES%')
AND (
-- the column is persisted
c1.is_persisted = 1
-- OR the column is included in an index
OR EXISTS (SELECT 1 FROM sys.index_columns AS ic
WHERE ic.object_id = c1.object_id AND ic.column_id=c1.column_id)
)

UNION
--indexed views
SELECT DISTINCT QUOTENAME(sed.referenced_schema_name) + N'.' + QUOTENAME(sed.referenced_entity_name) AS
'object_for_checktable'
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.indexes AS i ON sed.referencing_id = i.object_id AND sed.referencing_minor_id = i.index_id
INNER JOIN sys.columns AS c ON sed.referenced_id = c.object_id AND sed.referenced_minor_id = c.column_id
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE referencing_class = 7 AND referenced_class = 1 AND i.has_filter = 1
AND c.system_type_id IN (
59 --real
, 62 --float
, 58 --smalldatetime
, 61 --datetime
, 60 --money
, 122 --smallmoney
, 106 --decimal
, 108 --numeric
, 56 --int
, 48 --tinyint
, 52 -- smallint
, 41 --time
, 127 --bigint
)) AS a

SELECT @sql += N'DBCC CHECKCONSTRAINTS (N''' + object_for_checkconstraints + N'''); ' + @CRLF


FROM
(

SELECT DISTINCT QUOTENAME(sed.referenced_schema_name) + N'.' + QUOTENAME(sed.referenced_entity_name) AS


'object_for_checkconstraints'
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.check_constraints AS c ON sed.referencing_id = c.object_id AND sed.referencing_class = 1
INNER JOIN sys.columns AS col ON sed.referenced_id = col.object_id AND sed.referenced_minor_id =
col.column_id
INNER JOIN sys.types AS t ON col.system_type_id = t.system_type_id
WHERE referencing_class = 1 AND referenced_class = 1 AND (col.system_type_id IN
( 59 --real
, 62 --float
, 58 --smalldatetime
, 61 --datetime
, 60 --money
, 122 --smallmoney
, 106 --decimal
, 108 --numeric
, 56 --int
, 48 --tinyint
, 52 -- smallint
, 41 --time
, 127 --bigint
) OR c.[definition] LIKE N'%DATEDIFF%'
OR c.[definition] LIKE N'%CONVERT%'
OR c.[definition] LIKE N'%DATEPART%'
OR c.[definition] LIKE N'%DEGREES%')
) a

SET @sql += N'DBCC TRACEOFF(139,-1);';

PRINT @sql;

--to run the script immediately, use the following command:


--EXECUTE sp_executesql @sql;
GO
Itérer dans un jeu de résultats à l’aide de Transact-
SQL dans SQL Server
13/08/2021 • 2 minutes to read

Cet article décrit différentes méthodes que vous pouvez utiliser pour itérer dans un jeu de résultats à l’aide de
Transact-SQL dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 111401

Résumé
Cet article décrit différentes méthodes que vous pouvez utiliser pour simuler une logique FETCH-NEXT de types
de curseur dans une procédure stockée, un déclencheur ou un lot SQL transaction.

Utiliser des instructions transact-SQL pour itérer dans un jeu de


résultats
Il existe trois méthodes que vous pouvez utiliser pour itérer dans un jeu de résultats à l’aide d’instructions
Transact-SQL.
L’une des méthodes est l’utilisation de tables temporaires. Avec cette méthode, vous créez un instantané de
l’instruction initiale et l’utilisez comme base pour SELECT le curseur. Par exemple :

/********** example 1 **********/


declare @au_id char( 11 )

set rowcount 0
select * into #mytemp from authors

set rowcount 1

select @au_id = au_id from #mytemp

while @@rowcount <> 0

begin
set rowcount 0
select * from #mytemp where au_id = @au_id
delete #mytemp where au_id = @au_id

set rowcount 1
select @au_id = au_id from #mytemp<BR/>
end
set rowcount 0

Une deuxième méthode consiste à utiliser la fonction pour parcourir un tableau une ligne min à la fois. Cette
méthode capture les nouvelles lignes qui ont été ajoutées après le début de l’exécution de la procédure stockée,
à condition que la nouvelle ligne possède un identificateur unique supérieur à la ligne actuelle en cours de
traitement dans la requête. Par exemple :
/********** example 2 **********/
declare @au_id char( 11 )

select @au_id = min( au_id ) from authors


while @au_id is not null

begin
select * from authors where au_id = @au_id
select @au_id = min( au_id ) from authors where au_id > @au_id
end

NOTE
Les exemples 1 et 2 supposent qu’il existe un identificateur unique pour chaque ligne du tableau source. Dans certains
cas, il n’existe aucun identificateur unique. Si c’est le cas, vous pouvez modifier la méthode de table temp pour utiliser une
colonne de clé nouvellement créée. Par exemple :

/********** example 3 **********/


set rowcount 0
select NULL mykey, * into #mytemp from authors

set rowcount 1
update #mytemp set mykey = 1

while @@rowcount > 0


begin
set rowcount 0
select * from #mytemp where mykey = 1
delete #mytemp where mykey = 1
set rowcount 1
update #mytemp set mykey = 1
end
set rowcount 0

Références
ROW_NUMBER (Transact-SQL)
Stratégie de prise en charge des assemblys .NET
Framework non testés dans l’environnement
hébergé SQL Server CLR
15/08/2021 • 3 minutes to read

Cet article décrit la stratégie de prise en charge des assemblys Microsoft .NET Framework non testés dans
l’environnement hébergé par le CLR (Common Language Runtime) .NET Framework dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 922672

Test et prise en charge de l’assembly


Lorsque vous inscrivez un assembly qui fait référence à un assembly .NET Framework non testé dans SQL
Server, vous pouvez recevoir le message d’avertissement suivant :

WARNING
L’assembly AssemblyName .Net Frameworks que vous enregistrez n’est pas entièrement testé dans SQL
Server’environnement hébergé.

Le message signifie que l’assembly .NET Framework n’a pas été testé dans l SQL Server de l’environnement
hébergé par le CLR. Par conséquent, l’assembly n’est pas pris en charge dans SQL Server environnement
hébergé par le CLR.
Un assembly .NET Framework non testé peut quitter son processus hôte lorsqu’une condition critique telle
qu’une condition de faible mémoire se produit. Vous pouvez utiliser l’assembly dans l SQL Server de
l’environnement hébergé par le CLR à vos propres risques. Toutefois, SQL Server services de support client
(CSS) ne vous aideront pas à utiliser et à résoudre les problèmes associés à un assembly de .NET Framework
non pris en charge. Si CSS détermine qu’un assembly particulier non pris en SQL Server des problèmes, vous
pouvez être invité à arrêter d’utiliser l’assembly. En outre, vous pouvez être invité à arrêter temporairement
d’utiliser l’assembly lorsque CSS dépannera un problème SQL Server si nécessaire.

Inscription de l’assembly
Il existe deux types d’assemblys .NET : pure et mixte. Les assemblys .NET purs contiennent uniquement des
instructions MSIL. Les assemblys mixtes contiennent des instructions d’ordinateur nonmanagées et des
instructions MSIL. Les assemblys mixtes sont généralement compilés dans un compilateur C++ à l’aide du
commutateur « clr » et contiennent également des instructions d’ordinateur conçues à partir du code C++ natif.
Lorsque vous utilisez un assembly .NET Framework qui ne figure pas dans la liste prise en charge, vous devez
utiliser l’instruction CREATE ASSEMBLY pour inscrire l’assembly et les assemblys référencés dans la base de
données SQL Server. L SQL Server CREATE ASSEMBLY permet uniquement l’enregistrement .NET Framework
assemblys pures. Si l’assembly ou tout assembly référencé n’est pas un assembly .NET Framework pur (et, par
conséquent, est un assembly mixte), vous recevez le message d’erreur suivant :

Msg 6544, Niveau 16, État 1, Ligne 2


CREATE ASSEMBLY for assembly <assembly name> ' failed because assembly ' <assembly name> is
malformed or not a pure .NET assembly.
En-tête PE non vérifiable/stub natif.

Dans ce cas, vous ne pouvez pas utiliser l’assembly .NET Framework avec SQL CLR, sauf si l’assembly se trouve
dans la liste prise en charge documentée dans cet article. En outre, un assembly .NET Framework peut changer
d’assembly pur à un assembly mixte entre les versions. Si vous utilisez un assembly qui ne figure pas dans la
liste prise en charge, il se peut que l’assembly fonctionne dans une version du .NET Framework mais pas dans
une autre. Cette restriction ne s’applique pas aux assemblys de la liste prise en charge, car ces assemblys ne
doivent pas être enregistrés à l’aide de l’instruction CREATE ASSEMBLY.
En outre, vous devez gérer ces assemblys après avoir mis à niveau .NET Framework. Message d’erreur lorsque
vous exécutez une routine CLR ou utilisez un assembly dans SQL Server :

Assembly in host store has a different signature than assembly in GAC. (Exception de HRESULT :
0x80131050)

Assemblys pris en charge dans un environnement SQL Server CLR


Les assemblys .NET Framework sont pris en charge dans un environnement SQL Server CLR :
Microsoft.VisualBasic.dll
Mscorlib.dll
System.Data.dll
System.dll
System.Xml.dll
Microsoft.VisualC.dll
CustomMarshalers.dll
System.Security.dll
System.Web.Services.dll
System.Data.SqlXml.dll
System.Transactions.dll
System.Data.OracleClient.dll
System.Configuration.dll
SQL Server requête qui tape une colonne Unicode
dans un classement binaire renvoie des résultats
incorrects
14/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsqu’une instruction contient une ou plusieurs
clauses définies pour une colonne Unicode et qui permettent de taper la colonne Unicode dans un autre IN Or
classement collate binaire.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 3053639

Symptômes
Vous avez une table dans une base SQL Server de données dans laquelle les conditions suivantes sont vraies :
Le tableau contient une colonne Unicode. Par exemple, le tableau possède une colonne nchar(5).
Le classement de la colonne Unicode est Latin1_General_BIN .
La même colonne Unicode fait partie d’un index. Toutefois, les instructions T-SQL qui sont exécutés sur ce
tableau peuvent renvoyer des résultats incorrects. Ce problème se produit lorsque les conditions suivantes
sont remplies :
L’instruction T-SQL contient une ou plusieurs clauses définies IN pour la même colonne Or Unicode.
L’instruction T-SQL contient pour taper la colonne collate Unicode dans un autre classement binaire.
Exemple de requête :

CREATE TABLE [dbo].[Table_1]([Col1] [smallint] NOT NULL,


[Col2] [nchar](5),
[Col3] [nchar](5) COLLATE Latin1_General_BIN NOT NULL, -- Col3 , a Unicode Column with "Latin1_General_BIN"
collation
CONSTRAINT [PK__Table_1] PRIMARY KEY CLUSTERED -- Primary Key on all the 3 columns
([Col1] ASC,
[Col2] ASC,
[Col3] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

select * from Table_1 where Col1 = 1 and Col2 = '1' and Col3 collate Chinese_PRC_BIN IN (N'1' ,N'2') --
This statement using "IN" and "collate" might give incorrect results.
go

select * from Table_1 where Col1 = 1 and Col2 = '1' and (Col3 collate Chinese_PRC_BIN = N'1' or Col3 collate
Chinese_PRC_BIN = N'2') -- This statement using "OR" and "collate" might give incorrect results.
go

Solution de contournement
Pour contourner ce problème, assurez-vous que la colonne Unicode (Col3 dans l’exemple de requête de la
section Symptômes) répond à l’une des conditions suivantes :
Est du type de données char(5) ou nvarchar(5).
Est défini à l’aide du même classement pour lequel le classement est souhaité (sachez que ce n’est qu’un
exemple ; d’autres Chinese_PROC_BIN Chinese_PROC_BIN classements binaires s’appliquent également).
Est d’un classement autre que Latin1_General_BIN .
Est compilé sur le classement CI. Par exemple : collate Chinese_PRC_90_CI_AI IN (N'1 ', N'2 ') .
Est comparé à une constante qui correspond à la longueur de colonne. Par exemple,
collate Chinese_PRC_BIN IN (N'1 ', N'2 ') .
Ne fait pas partie de l’index, ou une analyse de tableau est forcée à l’aide de l’indicateur FORCESCAN de
tableau.
Fonctions telles que RTRIM et utilisées pour forcer une analyse de LTRIM tableau.

Plus d’informations
Pour reproduire ce problème, exécutez le script suivant :
CREATE DATABASE Test_DB
GO

use Test_DB
go

CREATE TABLE [dbo].[Table_1]([Col1] [smallint] NOT NULL,


[Col2] [nchar](5),
[Col3] [nchar](5) COLLATE Latin1_General_BIN NOT NULL, -- Col3 , a Unicode Column with "Latin1_General_BIN"
collation

CONSTRAINT [PK__Table_1] PRIMARY KEY CLUSTERED -- Primary Key on all the 3 columns
([Col1] ASC,
[Col2] ASC,
[Col3] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

-- Populate the table with a sample script as below

declare @x as int
declare @y as int

set @x=1
set @y=1

while (@x<=2)
begin
while (@y<=1000)
begin
insert into Table_1 values (@x,@y,@y)
set @y=@y+1
end
set @x=@x +1
end
go

select * from Table_1 where Col1 = 1 and Col2 = '1' and Col3 collate Chinese_PRC_BIN = N'1' -- Expected
output of one row.
go

select * from Table_1 where Col1 = 1 and Col2 = '1' and Col3 collate Chinese_PRC_BIN in (N'1' ,N'2') -- No
rows returned when output for Col3= N'1' is expected.
go

select * from Table_1 where Col1 = 1 and Col2 = '1' and (Col3 collate Chinese_PRC_BIN = N'1' or Col3 collate
Chinese_PRC_BIN = N'2') -- No rows returned when output for Col3= N'1' is expected.
go

S’applique à
SQL Server 2014 Business Intelligence
SQL Server Développeur 2014
SQL Server 2014 Enterprise
SQL Server 2014 Enterprise Core
SQL Server 2014 Express
SQL Server 2014 Standard
SQL Server Web 2014
SQL Server 2012 Business Intelligence
SQL Server 2012 Developer
SQL Server 2012 Enterprise
SQL Server 2012 Express
SQL Server 2012 Standard
SQL Server Web 2012
SQL Server 2012 Enterprise Core
SQL Server 2008 R2 Datacenter
SQL Server 2008 R2 Developer
SQL Server 2008 R2 Enterprise
SQL Server 2008 R2 Express
SQL Server 2008 R2 Parallel Data Warehouse
SQL Server 2008 R2 Standard
SQL Server 2008 R2 Web
SQL Server 2008 R2 Workgroup
SQL Server 2008 Developer
SQL Server 2008 Enterprise
SQL Server 2008 Express
SQL Server 2008 Standard
SQL Server Web 2008
SQL Server 2008 Workgroup
SQL Server 2005 Developer Edition
SQL Server 2005 Enterprise Edition
SQL Server 2005 Express Edition
SQL Server 2005 Édition Standard
SQL Server 2005 Standard X64 Edition
SQL Server 2005 Workgroup Edition
Supprimer des lignes en double d’une table SQL
Server à l’aide d’un script
13/08/2021 • 2 minutes to read

Cet article fournit un script que vous pouvez utiliser pour supprimer des lignes en double d’un tableau dans
Microsoft SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 70956

Résumé
Il existe deux méthodes courantes que vous pouvez utiliser pour supprimer des enregistrements en double
d’SQL Server table. Pour la démonstration, commencez par créer un exemple de table et de données :

create table original_table (key_value int )

insert into original_table values (1)


insert into original_table values (1)
insert into original_table values (1)

insert into original_table values (2)


insert into original_table values (2)
insert into original_table values (2)
insert into original_table values (2)

Ensuite, essayez les méthodes suivantes pour supprimer les lignes en double du tableau.
Méthode 1
Exécutez le script suivant :

SELECT DISTINCT *
INTO duplicate_table
FROM original_table
GROUP BY key_value
HAVING COUNT(key_value) > 1

DELETE original_table
WHERE key_value
IN (SELECT key_value
FROM duplicate_table)

INSERT original_table
SELECT *
FROM duplicate_table

DROP TABLE duplicate_table

Ce script prend les actions suivantes dans l’ordre donné :


Déplace une instance d’une ligne en double du tableau d’origine vers une table en double.
Supprime toutes les lignes de la table d’origine qui se trouvent également dans la table en double.
Déplace les lignes du tableau en double vers la table d’origine.
Dépose la table en double.
Cette méthode est simple. Toutefois, vous devez avoir suffisamment d’espace disponible dans la base de
données pour créer temporairement la table en double. Cette méthode incurse également une surcharge, car
vous déplacez les données.
En outre, si votre table possède une colonne IDENTITY, vous devez utiliser SET IDENTITY_INSERT ON lorsque
vous restituerez les données dans la table d’origine.
Méthode 2
La ROW_NUMBER qui a été introduite dans Microsoft SQL Server 2005 simplifie cette opération :

DELETE T
FROM
(
SELECT *
, DupRank = ROW_NUMBER() OVER (
PARTITION BY key_value
ORDER BY (SELECT NULL)
)
FROM original_table
) AS T
WHERE DupRank > 1

Ce script prend les actions suivantes dans l’ordre donné :


Utilise la fonction pour partitionner les données en fonction de l’une ou plusieurs colonnes ROW_NUMBER
key_value séparées par des virgules.
Supprime tous les enregistrements qui ont reçu une DupRank valeur supérieure à 1. Cette valeur indique que
les enregistrements sont des doublons.
En raison de (SELECT NULL) l’expression, le script ne trie pas les données partitionées en fonction d’une
condition quelconque. Si votre logique de suppression des doublons nécessite de choisir les enregistrements à
supprimer et les enregistrements à conserver en fonction de l’ordre de tri des autres colonnes, vous pouvez
utiliser l’expression ORDER BY pour ce faire.

Plus d’informations
La méthode 2 est simple et efficace pour les raisons suivantes :
Il n’est pas nécessaire de copier temporairement les enregistrements en double dans une autre table.
Il n’est pas nécessaire de joindre la table d’origine à elle-même (par exemple, à l’aide d’une sous-demande
qui renvoie tous les enregistrements en double à l’aide d’une combinaison de GROUP BY et HAVING).
Pour de meilleures performances, vous devez avoir dans la table un index correspondant qui utilise la clé
d’index et inclut toutes les colonnes de tri que vous avez peut-être utilisées dans key_value l’expression
ORDER BY.
Toutefois, cette méthode ne fonctionne pas dans les versions obsolètes de SQL Server qui ne prend pas en
charge la fonction ROW_NUMBER. Dans ce cas, vous devez utiliser la méthode 1 ou une méthode similaire à la
place.
Faire pivoter un tableau dans SQL Server
14/08/2021 • 2 minutes to read

Cet article explique comment faire pivoter un tableau dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 175574

Résumé
Cet article explique comment faire pivoter un SQL Server tableau. Supposons que vous avez une table nommée
QTRSALES . Le tableau possède les colonnes et les données YEAR QUARTER au format AMOUNT suivant.

NOTE
Il n’existe aucune ligne pour le quatrième trimestre de 1996 :

Y EA R T RIM EST RE M O N TA N T

1995 1 125,000.90

1995 2 136,000.75

1995 3 212,000.34

1995 4 328,000.82

1996 3 728,000.35

1996 2 422,000.13

1996 1 328,000.82

À présent, supposons que vous vouliez faire pivoter la table afin de pouvoir voir les données au format suivant :

Y EA R Q1 Q2 Q3 Q4

1995 125,000.90 136,000.75 212,000.34 328,000.82

1996 328,000.82 422,000.13 728,000.35 0.00

La requête que vous utiliseriez pour faire pivoter la table se trouve dans la section suivante de cet article.

Exemple de requête pour faire pivoter la table


Voici la requête que vous utiliseriez pour faire pivoter la table :
SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR

Requête pour les tables de grande taille


Pour les tables de grande taille, cette requête sera plus rapide :

year=q.year,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) as Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) as Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) as Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) as Q4
FROM qtrsales q
GROUP BY year

Référence
FROM - Utilisation de PIVOT et UNPIVOT
Vous pouvez faire face à des problèmes de délai
d’SQL des objets CLR via Visual Studio
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème de délai d’SQL lors du déploiement d’objets CLR Visual Studio.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2011805

Symptômes
Lorsque vous déployez SQL objets CLR de Visual Studio à SQL Server, vous pouvez être en mesure de faire face
à diverses erreurs similaires à ce qui suit :
Message d’erreur 1 :

Erreur : échec du démarrage de la transaction de chargement de base de données.


Erreur : L’opération n’a pas pu être achevée

Message d’erreur 2 :

Déploiement du fichier : TEstAssembly.dll, Chemin d’accès : E:\cases\CL


MY\TEstAssembly\TEstAssembly\obj\Debug\TEstAssembly.dll ... Erreur : Le délai d’expiration a expiré.
Le délai d’expiration s’est produit avant la fin de l’opération ou le serveur ne répond pas.

Toutefois, si vous déployez les mêmes objets CLR à l’aide de la commande SQL Server Management Studio vous
CREATE ASSEMBLY n’avez aucun problème.

Cause
Le problème se produit lorsque les objets CLR SQL sont si importants qu’il faut beaucoup de temps pour les
déployer sur SQL Server. La valeur de délai d’avance par défaut pour les connexions est de 15 secondes et de 30
secondes pour les requêtes, respectivement. Lors du déploiement d’assemblys de grande taille, l’instruction
exécutée sur le système SQL Server backend peut prendre plus de 30 secondes pour renvoyer l’erreur décrite
dans la CREATE ASSEMBLY section Symptômes.

Résolution
Augmentez les valeurs de délai d’Visual Studio requête et de connexion à l’aide des procédures documentées ci-
dessous.
Modification du délai d’out de la requête
1. In Visual Studio IDE, navigate to Tools -> Options -> Database Tools -> Quer y and View Designers .
2. Vous pouvez soit décocher l’option Annuler la requête longue, soit modifier la valeur d’Annuler après
l’option **** en une valeur supérieure.
Modification du délai de connexion
1. Dans Visual Studio IDE, activez l’Explorateur de serveurs en naviguant jusqu’à -> l’Explorateur de
ser veurs.
2. Dans l’Explorateur de serveurs, cliquez avec le bouton droit sur la connexion SQL Server où les objets
CLR sont déployés et choisissez Modifier la connexion.
3. Cliquez sur le bouton Avancé dans la fenêtre Modifier la connexion.
4. Dans la fenêtre Propriétés avancées, modifiez la valeur Connecter délai d’Connecter section
Initialisation à une valeur supérieure.
L’utilisation de procédures stockées étendues ou
SP_OA procédures stockées pour charger le CLR
dans SQL Server n’est pas prise en charge
13/08/2021 • 2 minutes to read

Version du produit d’origine : SQL Server


Numéro de la ko d’origine : 322884

Résumé
SQL Server 2005 et versions ultérieures hébergent le CLR (Common Language Runtime) et des procédures,
fonctions, déclencheurs, types et agrégats de prise en charge écrits dans des langages CLR. Dans ces versions,
vous ne pouvez pas charger CLR à l’aide de procédures stockées étendues ou sp_OA de procédures stockées.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 322884

Plus d’informations
L.NET Framework assembly fournit un environnement robuste pour l’facturation d’assemblys à
System.Runtime.InteropServices partir de code nonmanaté. Toutefois, il existe plusieurs dissensions techniques
entre les implémentations internes du CLR et SQL Server :

Threading
Pour améliorer les performances, le CLR implémente thread local Stockage.
En outre, le CLR utilise uniquement la planification basée sur les threads et ne prend pas en charge la
planification en mode fibre. Toutefois, SQL Server peut utiliser la planification en mode fibre. Pour configurer
cette propriété, exécutez la procédure stockée à l’aide de sp_configure l’option de regroupement léger. Pour
plus d’informations sur cette rubrique, examinez l’option de configurationdu serveur de regroupement léger.

Mémoire
L’utilisation de procédures stockées étendues et d’OLE Automation s’exécutent dans l’espace d’adressare de la
mémoire virtuelle de la SQL Server. La mémoire SQL Server par défaut n’est qu’une fraction de la mémoire que
les SQL Server peuvent potentiellement utiliser et le CLR est en concurrence avec les implémentations
existantes pour ces ressources mémoire.

Interopérabilité COM
Cette section traite spécifiquement de l’utilisation d’OLE Automation dans SQL Server et s’applique aux objets
COM in-process et out-of-process. Assembly meta data for function interfaces implements a typed mechanism
for any invocations.
Dans le cadre de cette conception, le wrapper COM Callable pour un assembly doit utiliser un mécanisme
externe de mappage d’un ClassID à un membre d’une classe gérée. En raison de ce mappage explicite, il n’est
pas possible d’établir une liste racine d’interfaces disponibles du point de vue nonmanage.
La procédure stockée étendue utilise l’interface pour déterminer la prise en charge sp_oaCreate
IUnknown::QueryInterface de l’objet pour une interface particulière. L’interopérabilité entre le CLR et le code
nonmanadé repose sur l’interface IDispatch pour implémenter les interfaces. Étant donné qu’il n’existe pas
d’équivalent à une méthode à un assembly CLR, vous ne pouvez pas créer QueryInterface une instance de
l’objet.
Erreur 9002. Le journal des transactions de la base
de données est plein en raison
AVAILABILITY_REPLICA message d’erreur SQL
Server
15/08/2021 • 6 minutes to read

Cet article vous aide à résoudre l’erreur 9002 qui se produit lorsque le journal des transactions devient grand ou
à court d’espace dans SQL Server.
Version du produit d’origine : SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012
Numéro de la ko d’origine : 2922898

Symptômes
Prenons l’exemple du scénario suivant :
Vous avez Microsoft SQL Server 2012 ou une version ultérieure installée sur un serveur.
L’instance de SQL Server est un réplica principal dans l’environnement des groupes de disponibilité
AlwaysOn.
L’option de connexion automatique pour les fichiers journaux de transactions est définie dans SQL
Server.
Dans ce scénario, le journal des transactions peut devenir important et ne plus avoir assez d’espace disque ou
dépasser l’option MaxSize définie pour le journal des transactions au niveau du réplica principal et vous recevez
un message d’erreur semblable à ce qui suit :

Erreur : 9002, Gravité : 17, État : 9. Le journal des transactions de la base de données '%.*ls' est plein en
raison de la AVAILABILITY_REPLICA'

Cause
Cela se produit lorsque les modifications consignées dans le réplica principal ne sont pas encore renforcés sur le
réplica secondaire. Pour plus d’informations sur le processus de synchronisation des données dans
l’environnement AlwaysOn, vous pouvez passer en revue :
Processus de synchronisation des données

Résolution des problèmes


Il existe deux scénarios qui peuvent entraîner une croissance des journaux dans une base de données de
disponibilité et la AVAILABILITY_REPLICA ' log_reuse_wait_desc :
Scénario 1 : Latence de livraison des modifications consignées à un niveau secondaire
Lorsque des transactions modifient des données dans le réplica principal, ces modifications sont
encapsulées dans des blocs d’enregistrement de journal et ces blocs journal sont remis et renforcés dans
le fichier journal de base de données au niveau du réplica secondaire. Le réplica principal ne peut pas
réécrire les blocs de journaux dans son propre fichier journal tant que ces blocs de journaux n’ont pas été
remis et renforcés dans le fichier journal de base de données correspondant dans tous les réplicas
secondaires. Tout retard dans la remise ou le renforcement de la remise de ces blocs à n’importe quel
réplica du groupe de disponibilité empêchera la troncation des modifications enregistrées dans la base
de données au niveau du réplica principal et provoquera l’expansion de l’utilisation du fichier journal.
Pour plus d’informations, voir : Latence du réseau élevée ou faible débit réseau entraîne la construction
du journal sur le réplica principal
Scénario 2 : Redo Latence
Une fois renforcé dans le fichier journal de base de données secondaire, un thread de redéployage dédié
dans l’instance de réplica secondaire applique les enregistrements journaux contenus au ou aux fichiers
de données correspondants. Le réplica principal ne peut pas réécrire les blocs de journaux dans son
propre fichier journal tant que tous les threads de nouveau dans tous les réplicas secondaires n’ont pas
appliqué les enregistrements journaux contenus.
Si l’opération de redoyage sur un réplica secondaire n’est pas en mesure de suivre la vitesse à laquelle les
blocs de journaux sont renforcés sur ce réplica secondaire, cela entraîne une croissance du journal au
niveau du réplica principal. Le réplica principal peut uniquement tronqué et réutiliser son propre journal
des transactions au point que tous les threads de réplica secondaire ont appliqué. S’il existe plusieurs
fichiers secondaires, comparez la colonne truncation_lsn de l’affichage gestion dynamique sur les
différents fichiers secondaires pour identifier la base de données secondaire qui retarde le plus la
troncation des sys.dm_hadr_database_replica_states journaux.
Vous pouvez utiliser le tableau de bord AlwaysOn et les affichages de gestion dynamique pour vous aider
à surveiller la file d’attente d’envoi du journal et sys.dm_hadr_database_replica_states la file d’attente de
redessin. Voici quelques champs clés :

CHAMP DESC RIP T IO N

log_send_queue_size Quantité d’enregistrements journaux qui ne sont pas


arrivés au réplica secondaire

log_send_rate Taux d’envoi des enregistrements journaux aux bases de


données secondaires

redo_queue_size La quantité d’enregistrements journaux dans les fichiers


journaux du réplica secondaire qui n’a pas encore été
refaire, en kilo-octets (Ko)

redo_rate La vitesse à laquelle les enregistrements journaux sont


en cours de redone sur une base de données secondaire
donnée, en kilo-octets (Ko)/seconde

last_redone_lsn Numéro de séquence de journal réel du dernier


enregistrement de journal qui a été resaisyé sur la base
de données secondaire. last_redone_lsn est toujours
inférieure à last_hardened_lsn

last_received_lsn ID de bloc de journal identifiant le point vers lequel tous


les blocs de journaux ont été reçus par le réplica
secondaire qui héberge cette base de données
secondaire. Reflète un ID de bloc de journal ajouté avec
des zéros. Il ne s’agit pas d’un numéro de séquence de
journal réel.

Par exemple, exécutez la requête suivante sur le réplica principal afin de signaler le réplica avec la
première truncation_lsn et est la limite supérieure que le principal peut récupérer dans son propre
journal des transactions :

SELECT ag.name AS [availability_group_name]


, d.name AS [database_name]
, ar.replica_server_name AS [replica_instance_name]
, drs.truncation_lsn , drs.log_send_queue_size
, drs.redo_queue_size
FROM sys.availability_groups ag
INNER JOIN sys.availability_replicas ar
ON ar.group_id = ag.group_id
INNER JOIN sys.dm_hadr_database_replica_states drs
ON drs.replica_id = ar.replica_id
INNER JOIN sys.databases d
ON d.database_id = drs.database_id
WHERE drs.is_local=0
ORDER BY ag.name ASC, d.name ASC, drs.truncation_lsn ASC, ar.replica_server_name ASC

Les mesures correctives peuvent inclure, sans s’y limiter, les actions suivantes :
Assurez-vous qu’il n’y a pas de goulot d’étranglement de ressources ou de performances au niveau
du secondaire.
Assurez-vous que le thread Redo n’est pas bloqué au niveau du secondaire. Utilisez l’événement
étendu pour identifier le moment où cela se produit et sur quels objets le lock_redo_blocked thread
de redo est bloqué.

Solution de contournement
Après avoir identifié la base de données secondaire qui se produit, essayez une ou plusieurs des méthodes
suivantes pour contourner ce problème temporairement :
Sortir la base de données du groupe de disponibilité pour le secondaire en cause.

NOTE
Cette méthode entraîne la perte du scénario haute disponibilité/récupération d’urgence pour le secondaire. Vous
de devez peut-être configurer à nouveau le groupe de disponibilité à l’avenir.

Si le thread de redéployage est fréquemment bloqué, désactivez la fonctionnalité en modifiant le


paramètre du Readable Secondary ALLOW_CONNECTIONS réplica sur SECONDARY_ROLE NON .

NOTE
Cela empêche les utilisateurs de lire les données dans le réplica secondaire qui est la cause première du blocage.
Une fois que la file d’attente de retour à la normale a été réduite à une taille acceptable, envisagez d’activer à
nouveau la fonctionnalité.

Activez le paramètre derow automatique s’il est désactivé et s’il y a de l’espace disque disponible.
Augmentez la valeur MaxSize pour le fichier journal des transactions s’il a été atteint et s’il y a de l’espace
disque disponible.
Ajoutez un fichier journal des transactions supplémentaire si le fichier actuel a atteint la valeur système
maximale de 2 To ou si de l’espace supplémentaire est disponible sur un autre volume disponible.

Plus d’informations
Pour plus d’informations sur la raison pour laquelle un journal des transactions augmente de façon
inattendue ou devient plein dans SQL Server, voir : Troubleshoot a Full Transaction Log (SQL Server Error
9002)
Pour plus d’informations sur le problème de blocage des opérations de redoin, voir : AlwaysON -
HADRON Learning Series: lock_redo_blocked/redo worker Blocked on Secondary Replica
Pour plus d’informations AVAILABILITY_REPLICA colonnes log_reuse_wait basées sur un journal, voir :
Facteurs qui peuvent retarder la troncation des journaux
Pour plus d’informations sur sys.dm_hadr_database_replica_states l’affichage, voir :
sys.dm_hadr_database_replica_states (Transact-SQL)
Pour plus d’informations sur la surveillance et le dépannage des modifications consignées qui n’arrivent
pas et ne sont pas appliquées en temps voulu, voir : Surveiller les performances pour les groupes de
disponibilité AlwaysOn

S’applique à
SQL Server 2012 Enterprise
SQL Server 2014 Enterprise
SQL Server 2014 Business Intelligence
SQL Server 2014 Standard
SQL Server 2016 Enterprise
SQL Server 2016 Standard
SQL Server 2017 Enterprise
SQL Server 2017 Standard Windows
Résoudre les problèmes des bases de données de
disponibilité AlwaysOn dans l’état Récupération en
attente ou Suspect dans SQL Server
14/08/2021 • 12 minutes to read

Cet article décrit les erreurs et les limitations d’une base de données de disponibilité dans Microsoft SQL Server
qui est dans un état ou dans un état et comment restaurer la base de données à toutes les fonctionnalités d’un
groupe de Recovery Pending Suspect disponibilité.
Version du produit d’origine : SQL Server 2012
Numéro de la ko d’origine : 2857849

Résumé
Supposons qu’une base de données de disponibilité définie dans un groupe de disponibilité AlwaysOn passe à
un Recovery Pending ou à un état Suspect SQL Server. Si cela se produit sur le réplica principal du groupe de
disponibilité, la disponibilité de la base de données est affectée. Dans ce cas, vous ne pouvez pas accéder à la
base de données via les applications clientes. En outre, vous ne pouvez pas supprimer ou supprimer la base de
données du groupe de disponibilité.
Par exemple, supposons SQL Server est en cours d’exécution et qu’une base de données de disponibilité est
définie sur Recovery Pending l’état Suspect ou l’état. Lorsque vous interrogez les vues de gestion dynamique
(DMV) sur le réplica principal à l’aide du script SQL suivant, la base de données peut être signalée dans un état
ou dans un état comme suit NOT_HEALTHY RECOVERY_PENDING SUSPECT :

SELECT
dc.database_name,
d.synchronization_health_desc,
d.synchronization_state_desc,
d.database_state_desc
From
sys.dm_hadr_database_replica_states d
JOIN sys.availability_databases_cluster dc ON d.group_database_id = dc.group_database_id
AND d.is_local = 1

database_name synchronization_health_desc synchronization_state_desc database_state_desc


-------------------- ------------------------------ ------------------------------ ---------------------
<DatabaseName> NOT_HEALTHY NOT SYNCHRONIZING RECOVERY_PENDING
(1 row(s) affected)
En outre, cette base de données peut être signalée comme étant dans l’état Non synchronisé/Récupération
en attente ou Suspect dans SQL Server Management Studio.

Lorsque la base de données est définie dans un groupe de disponibilité, elle ne peut pas être abandonnée ou
restaurée. Par conséquent, vous devez prendre des mesures spécifiques pour récupérer la base de données et la
remettre en production.

Plus d’informations
Le contenu suivant décrit les erreurs et les limitations d’une base de données de disponibilité qui se trouve dans
un état En attente de récupération dans différentes situations.
L’état de la base de données empêche la restauration de la base de données
Vous essayez d’exécuter le script de SQL suivant afin de restaurer la base de données qui possède le
RECOVERY paramètre :

RESTORE DATABASE <DatabaseName> WITH RECOVERY

Lorsque vous exécutez ce script, vous recevez le message d’erreur suivant, car la base de données est
définie dans un groupe de disponibilité :

Msg 3104, Niveau 16, État 1, Ligne 1


RESTORE ne peut pas fonctionner sur database DatabaseName, car il est configuré pour la mise en
miroir de base de données ou a rejoint un groupe de disponibilité. Si vous avez l’intention de
restaurer la base de données, utilisez ALTER DATABASE pour supprimer la mise en miroir ou la base
de données de son groupe de disponibilité.
Msg 3013, Niveau 16, État 1, Ligne 1
RESTORE DATABASE se termine anormalement.

L’état de la base de données empêche la suppression de la base de données


Vous essayez d’exécuter le script de SQL suivant afin de déposer la base de données :

DROP DATABASE <DatabaseName>

Lorsque vous exécutez ce script, vous recevez le message d’erreur suivant, car la base de données est
définie dans un groupe de disponibilité :

Msg 3752, Niveau 16, État 1, Ligne 1


La base de données DatabaseName est actuellement jointe à un groupe de disponibilité. Avant de
pouvoir supprimer la base de données, vous devez la supprimer du groupe de disponibilité.

L’état de la base de données empêche la suppression de la base de données du groupe de disponibilité


Vous essayez d’exécuter le script de SQL suivant pour supprimer la base de données du groupe de
disponibilité :

ALTER DATABASE <DatabaseName> SET hadr OFF

Lorsque vous essayez d’exécuter ce script, vous recevez le message d’erreur suivant, car la base de
données de disponibilité appartient au réplica principal :

Msg 35240, Niveau 16, État 14, Ligne 1


DatabaseName ne peut pas être joint ou non au groupe de disponibilité AvailabilityGroupName.
Cette opération n’est pas prise en charge sur le réplica principal du groupe de disponibilité.

En raison de ce message d’erreur, vous pouvez être contraint de faire échouer la base de données. Une
fois la base de données échouée, le réplica propriétaire de la base de données de récupération en attente
est dans le rôle secondaire. Dans ce cas, essayez à nouveau d’exécuter le script SQL suivant afin de
supprimer la base de données du groupe de disponibilité sur le réplica secondaire :

ALTER DATABASE <DatabaseName> SET hadr OFF

Toutefois, vous ne pouvez toujours pas supprimer la base de données du groupe de disponibilité et vous
recevez le message d’erreur suivant, car la base de données est toujours dans l’état Récupération en
attente :

Msg 921, Level 16, State 112, Line 1


DatabaseName n’a pas encore été récupéré. Patientez et recommencez.

Résolution lorsque la base de données est dans le rôle secondaire


Pour résoudre ce problème, prenez les mesures générales suivantes :
Supprimez du groupe de disponibilité le réplica qui héberge la base de données endommagée lorsque la
base de données est dans le rôle secondaire.
Résolvez les problèmes qui affectent le système et qui peuvent avoir contribué à la défaillance de la base de
données.
Restituer le réplica au groupe de disponibilité.
Pour exécuter ces actions, connectez-vous au nouveau réplica principal, puis exécutez le script SQL pour
supprimer le réplica qui héberge la base de données de disponibilité ALTER AVAILABILITY GROUP qui a échoué.
Pour cela, procédez comme suit.
Ces étapes supposent que le réplica principal héberge d’abord la base de données endommagée. Par
conséquent, un failover doit d’abord se produire pour faire passer le réplica qui héberge la base de données
endommagée dans un rôle secondaire.
1. Connecter le serveur qui exécute SQL Server et qui héberge le réplica secondaire.
2. Exécutez le script SQL suivant :

ALTER AVAILABILITY GROUP <AvailabilityGroupName> FAILOVER

3. Exécutez le script SQL pour supprimer le réplica qui héberge la base de données endommagée du groupe
de disponibilité :
ALTER AVAILABILITY GROUP AvailabilityGroupName REMOVE REPLICA ON '<SQLServerNodeName>'

4. Résolvez tous les problèmes sur le serveur qui exécute SQL Server et qui peuvent contribuer à la
défaillance de la base de données.
5. Ajoutez de nouveau le réplica au groupe de disponibilité.

Résolution lorsque le réplica principal est le seul réplica dans le


groupe de disponibilité
Si le réplica principal héberge la base de données endommagée et est le seul réplica de travail dans le groupe de
disponibilité, le groupe de disponibilité doit être supprimé. Une fois le groupe de disponibilité supprimé, votre
base de données peut être récupérée à partir d’une sauvegarde, ou d’autres efforts de récupération d’urgence
peuvent être appliqués pour restaurer les bases de données et reprendre la production.
Pour abandonner le groupe de disponibilité, utilisez le script SQL suivant :

DROP AVAILABILITY GROUP <AvailabilityGroupName>

À ce stade, vous pouvez essayer de récupérer la base de données problématique. Vous pouvez également
restaurer la base de données à partir de la dernière copie de sauvegarde de bonne qualité connue.

Résolution lorsque vous déposez le groupe de disponibilité


Lorsque vous déposez un groupe de disponibilité, la ressource d’écoute est également abandonnée et
interrompt la connectivité des applications aux bases de données de disponibilité.
Pour réduire le temps mort de l’application, utilisez l’une des méthodes suivantes pour maintenir la connectivité
de l’application via l’écoute et abandonner le groupe de disponibilité :
Méthode 1 : associer l’écoute à un nouveau groupe de disponibilité (rôle ) dans le Gestionnaire du cluster
deover
Cette méthode vous permet de maintenir l’écoute tout en laissant et en recréant le groupe de disponibilité.
1. Sur l’instance SQL Server l’écoute du groupe de disponibilité existant dirige les connexions, créez un
groupe de disponibilité vide. Pour simplifier ce processus, utilisez la commande Transact-SQL pour créer
un groupe de disponibilité sans réplica secondaire ou base de données :

USE master
GO
CREATE AVAILABILITY GROUP ag FOR REPLICA ON 'sqlnode1' WITH (
ENDPOINT_URL = 'tcp://sqlnode1:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL
)

2. Démarrez le Gestionnaire du cluster de failover, puis cliquez sur Rôles dans le volet gauche. Dans le volet
qui répertorie les rôles, sélectionnez le groupe de disponibilité d’origine.
3. Dans le volet du milieu inférieur sous l’onglet Ressources, cliquez avec le bouton droit sur la ressource du
groupe de disponibilité, puis cliquez sur Propriétés. Cliquez sur l’onglet Dépendances, supprimez la
dépendance à l’écoute, puis cliquez sur OK.
4. Sous les ressources, cliquez avec le bouton droit sur l’écoute, cliquez sur Autres actions, puis cliquez sur
Affecter à un autre rôle.
5. Dans la boîte de dialogue Affecter la source au rôle, sélectionnez le nouveau groupe de
disponibilité, puis cliquez sur OK.

6. Dans le volet Rôles, sélectionnez le nouveau groupe de disponibilité. Dans le volet du milieu inférieur,
sous l’onglet Ressources, vous devez maintenant voir le nouveau groupe de disponibilité et la ressource
d’écoute. Cliquez avec le bouton droit sur la nouvelle ressource de groupe de disponibilité, puis cliquez
sur Propriétés.
7. Cliquez sur l’onglet Dépendances, sélectionnez la ressource d’écoute dans la zone de dépôt, puis
cliquez sur OK.
8. Dans SQL Server Management Studio, utilisez l’Explorateur d’objets pour vous connecter à l’instance de
SQL Server qui héberge le réplica principal du nouveau groupe de disponibilité. Cliquez sur Haute
disponibilité AlwaysOn, cliquez sur le nouveau groupe de disponibilité, puis sur Écouteurs de
groupe de disponibilité. Vous devez trouver l’écoute.
9. Cliquez avec le bouton droit sur l’port d’écoute, cliquez sur Propriétés, tapez le numéro de port
approprié pour l’port d’écoute, puis cliquez sur OK.

Cela permet de s’assurer que les applications qui utilisent l’écoute peuvent toujours l’utiliser pour se connecter à
l’instance de SQL Server qui héberge les bases de données de production sans interruption. Le groupe de
disponibilité d’origine peut maintenant être complètement supprimé et re-créé. Les bases de données et les
réplicas peuvent également être ajoutés au nouveau groupe de disponibilité.
Si vous re-créez le groupe de disponibilité d’origine, vous devez réaffecter l’écoute au rôle de groupe de
disponibilité, configurer la dépendance entre la nouvelle ressource du groupe de disponibilité et l’port d’écoute,
puis réaffecter le port à l’écoute. Pour cela, procédez comme suit :
1. Démarrez le Gestionnaire du cluster de failover, puis cliquez sur Rôles dans le volet gauche. Dans le volet qui
répertorie les rôles, cliquez sur le nouveau groupe de disponibilité qui héberge l’écoute.
2. Dans le volet du milieu inférieur sous l’onglet Ressources, cliquez avec le bouton droit sur l’écoute, cliquez
sur Autres actions, puis cliquez sur Affecter à un autre rôle. Dans la boîte de dialogue, choisissez le groupe
de disponibilité re-créé, puis cliquez sur OK.
3. Dans le volet Rôles, cliquez sur le groupe de disponibilité re-créé. Dans le volet du milieu inférieur, sous
l’onglet Ressources, vous devez maintenant voir le groupe de disponibilité re-créé et la ressource d’écoute.
Cliquez avec le bouton droit sur la ressource de groupe de disponibilité re-créée, puis cliquez sur
Propriétés.
4. Cliquez sur l’onglet Dépendances, sélectionnez la ressource d’écoute dans la zone de dépôt, puis cliquez
sur OK.
5. Dans SQL Server Management Studio, utilisez l’Explorateur d’objets pour vous connecter à l’instance de SQL
Server qui héberge le réplica principal du groupe de disponibilité re-créé. Cliquez sur Haute disponibilité
AlwaysOn, cliquez sur le nouveau groupe de disponibilité, puis sur Écouteurs de groupe de
disponibilité. Vous devez trouver l’écoute.
6. Cliquez avec le bouton droit sur l’port d’écoute, cliquez sur Propriétés, tapez le numéro de port approprié
pour l’port d’écoute, puis cliquez sur OK.
Méthode 2 : associer l’écoute à une instance de cluster de SQL Server existante (SQLFCI )
Si vous hébergez votre groupe de disponibilité sur une instance SQL Server de clustering de failover (SQLFCI),
vous pouvez associer la ressource en cluster d’écoute au groupe de ressources en cluster SQLFCI pendant que
vous déposez et re-créez le groupe de disponibilité.
1. Démarrez le Gestionnaire du cluster de failover, puis cliquez sur Rôles dans le volet gauche.
2. Dans le volet qui répertorie les rôles, sélectionnez le groupe de disponibilité d’origine.
3. Dans le volet du milieu inférieur sous l’onglet Ressources, cliquez avec le bouton droit sur la ressource du
groupe de disponibilité, puis cliquez sur Propriétés.
4. Cliquez sur l’onglet Dépendances, supprimez la dépendance à l’écoute, puis cliquez sur OK.
5. Dans le volet du milieu inférieur sous l’onglet Ressources, cliquez avec le bouton droit sur l’écoute, cliquez
sur Autres actions, puis cliquez sur Affecter à un autre rôle.
6. Dans la boîte de dialogue Affecter une ressource au rôle, cliquez sur l’instance SQL Server FCI, puis
cliquez sur OK.

7. Dans le volet Rôles, sélectionnez le groupe SQLFCI. Dans le volet du milieu inférieur, sous l’onglet
Ressources, vous devez maintenant voir la nouvelle ressource d’écoute.
Cela permet de s’assurer que les applications qui utilisent l’écoute peuvent toujours l’utiliser pour se connecter à
l’instance de SQL Server qui héberge les bases de données de production sans interruption. Le groupe de
disponibilité d’origine peut maintenant être supprimé et re-créé. Les bases de données et les réplicas peuvent
également être ajoutés au nouveau groupe de disponibilité.
Une fois le groupe de disponibilité re-créé, réaffectez l’écoute au rôle de groupe de disponibilité. Ensuite,
définissez la dépendance entre la nouvelle ressource de groupe de disponibilité et l’port d’écoute, puis
réaffectez le port à l’port d’écoute :
1. Démarrez le Gestionnaire du cluster de failover, puis cliquez sur Rôles dans le volet gauche.
2. Dans le volet qui répertorie les rôles, cliquez sur le rôle SQLFCI d’origine.
3. Dans le volet du milieu inférieur, sous l’onglet Ressources, cliquez avec le bouton droit sur l’écoute, cliquez
sur Autres actions, puis cliquez sur Affecter à un autre rôle.
4. Dans la boîte de dialogue, cliquez sur le groupe de disponibilité re-créé, puis cliquez sur OK.
5. Dans le volet Rôles, sélectionnez le nouveau groupe de disponibilité.
6. Sous l’onglet Ressources, vous devriez voir le nouveau groupe de disponibilité et la ressource d’écoute.
Cliquez avec le bouton droit sur la nouvelle ressource de groupe de disponibilité, puis cliquez sur
Propriétés.
7. Cliquez sur l’onglet Dépendances, sélectionnez la ressource d’écoute dans la zone de dépôt, puis cliquez
sur OK.
8. Dans SQL Server Management Studio, utilisez l’Explorateur d’objets pour vous connecter à l’instance de SQL
Server qui héberge le réplica principal du nouveau groupe de disponibilité.
9. Cliquez sur Haute disponibilité AlwaysOn, cliquez sur le nouveau groupe de disponibilité, puis sur
Écouteurs de groupe de disponibilité. Vous devez trouver l’écoute.
10. Cliquez avec le bouton droit sur l’port d’écoute, cliquez sur Propriétés, tapez le numéro de port approprié
pour l’port d’écoute, puis cliquez sur OK.
Méthode 3 : drop the availability group, and then re -create the availability group and listener with the same
listener name
Cette méthode entraîne une petite panne pour les applications qui sont actuellement connectées, car le groupe
de disponibilité et l’écoute sont supprimés, puis re-créés :
1. Déposez le groupe de disponibilité.

NOTE
Cela permet également de déposer l’écoute.

2. Créez immédiatement un groupe de disponibilité vide qui inclut la définition de l’écoute, sur le serveur
qui héberge les bases de données de production.
Par exemple, supposons que l’écoute de votre groupe de disponibilité soit une aglisten. L’instruction
Transact-SQL suivante crée un groupe de disponibilité sans base de données principale ou secondaire,
mais elle crée également un listener nommé aglisten. Les applications peuvent utiliser ce listener pour se
connecter.
USE master
GO
CREATE AVAILABILITY GROUP ag FOR REPLICA ON 'sqlnode1' WITH (
ENDPOINT_URL = 'tcp://sqlnode1:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL
) LISTENER 'aglisten' (
WITH IP ((N'11.0.0.25', N'255.0.0.0')),
PORT = 1433
)
GO

3. Récupérez la base de données endommagée. Ensuite, ajoutez-le et le réplica secondaire au groupe de


disponibilité.
Le délai se produit lorsque vous vous connectez à
un SQL Server de disponibilité AlwaysOn 2012
15/08/2021 • 4 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous vous connectez à un SQL Server de
groupe de disponibilité AlwaysOn 2012 dans un environnement multi-sous-réseau.
Version du produit d’origine : SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012
Express, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise Core
Numéro de la ko d’origine : 2792139

Symptômes
Après avoir configuré l’listener du groupe de disponibilité pour un groupe de disponibilité AlwaysOn dans
Microsoft SQL Server 2012, il se peut que vous ne soyez pas en mesure d’envoyer un ping à l’écoute ou de vous
y connecter à partir d’une application.
Par exemple, lorsque vous essayez de vous connecter à un SQL Server à l’aide de , la connexion SQLCMD est hors
de l’attente. En outre, vous recevez un message d’erreur semblable à ce qui suit :

Sqlcmd : Erreur : Microsoft SQL Native Client : le délai d’expiration de la connexion a expiré.

NOTE
Ces symptômes sont généralement intermittents ou concernent le changement de la ressource du groupe de
disponibilité.

La capture d’écran suivante montre un exemple de ce qui se produit lorsque vous essayez d’envoyer un test ping
à l’écoute pour la disponibilité de aglisten . La capture d’écran montre également une connexion SQL Server à
l’aide de la commande lorsque vous incluez le paramètre deover SQLCMD de plusieurs sous-réseaux. -M

NOTE
Vous pouvez utiliser la commande avec le paramètre comme indiqué dans la capture d’écran pour vous SQLCMD -M
connecter à l’écoute.
Cause
Ce problème se produit parce que votre application utilise un fournisseur de données hérité qui ne prend pas en
charge le nouveau paramètre ou n’est pas configuré MultiSubnetFailover pour utiliser ce paramètre.
Ce paramètre est pris en charge dans les versions plus récentes du pilote SQLClient qui est inclus avec le .NET
Framework 4 et avec les versions ultérieures du .NET Framework, et est de nouveau porté vers le .NET
Framework 3.5.

NOTE
La commande est un outil de test de connectivité simple qui ne prend pas en PING charge le nouveau paramètre.

Résolution
Vous pouvez utiliser l’une des résolutions suivantes selon votre cas :
Pour résoudre cette situation lorsque les fournisseurs de données prendre en charge le paramètre,
ajoutez le paramètre à votre chaîne de connexion et définissez-le MultiSubNetFailover
MultiSubNetFailover sur true .

Pour résoudre cette situation lorsque vos clients hérités ne peuvent pas utiliser la propriété, vous pouvez
modifier la valeur de MultiSubnetFailover l’écoute RegisterAllProvidersIP sur 0 . Pour ce faire, exécutez
la commande suivante à partir de l Windows PowerShell interface de ligne de commande suivante :

Import-Module FailoverClusters
Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0

NOTE
Une fois la valeur définie sur 0, l’adresse IP en ligne actuelle doit être désins inscrite à partir du serveur DNS et l’adresse IP
hors connexion doit être inscrite sur le serveur DNS lorsqu’un failover se RegisterAllProvidersIP produit. Cela peut
entraîner un retard de connexion pour le prochain failover.

Plus d’informations
Lorsque vous essayez de vous connecter à un répondeur défini sur plusieurs sous-réseaux, l’opération peut
échouer si le pilote client tente de se connecter à l’aide de l’une des adresses IP hors connexion de l’écoute.
Lorsqu’un listener est créé, une adresse IP est désignée pour chaque sous-réseau unique où un réplica de
groupe de disponibilité est hébergé. Par exemple, si un listener est créé pour un groupe de disponibilité qui
possède des réplicas qui existent dans deux sous-réseaux, deux adresses IP sont définies dans l’écoute. Une
adresse est utilisée par une application qui peut se connecter à une instance de SQL Server dans le sous-réseau
1, et l’autre adresse est utilisée lorsqu’une application se connecte à une instance de SQL Server dans le sous-
réseau 2.
En arrière-plan, l’écouteur crée une ressource Windows point d’accès client de cluster. L’une de ses propriétés
RegisterAllProvidersIP est . Lorsqu’un listener est créé, il est définie sur 1 et toutes les adresses IP de l’écoute
sont enregistrées dans le serveur DNS. Cette configuration permet de réduire le temps de reconnexion pour les
clients.
Étant donné que l’enregistrement DNS contient toutes les adresses IP, un client qui tente de se connecter à
l’écoute doit savoir comment gérer cette situation. Le paramètre permet au pilote client d’essayer les connexions
en parallèle à toutes les MultiSubnetFailover adresses IP de l’écoute. Sans ce paramètre, le pilote client essaiera
de se connecter de manière séquentielle à toutes les MultiSubnetFailover adresses IP de l’écoute. Les
connexions séquentielles peuvent entraîner un long délai d’connexion ou de connexion.

NOTE
Le problème mentionné dans cet article affecte également les environnements SharePoint configurés pour utiliser le
réplica en lecture seule secondaire d’un groupe de disponibilité AlwaysOn. Pour résoudre ce problème, effectuez l’une des
actions suivantes s’applique à votre version de SharePoint :

Pour SharePoint 2007 : il s’agit d’une application héritée. Par conséquent, SharePoint 2007 ne peut pas
être configuré pour utiliser le MultiSubnetFailover paramètre. À la place, vous devez utiliser la
commande Windows PowerShell décrite dans la section Résolution.
Pour SharePoint 2010 : les packages de mise à jour cumulative sont désormais disponibles et ajoutent la
prise en charge du MultiSubnetFailover paramètre. Pour plus d’informations sur les packages de mise à
jour, consultez l’article suivant :
Une mise à jour introduit la prise en charge des fonctionnalités AlwaysOn dans SQL Server 2012
ou une version ultérieure pour .NET Framework 3.5 SP1
Description du package SharePoint Foundation 2010 (Wss-x-none.msp) : 30 octobre 2012

Références
Délais d’attente de connexion lorsque vous utilisez l’listener de groupe de disponibilité AlwaysOn avec le
paramètre MultiSubnetFailover
Utilitaire sqlcmd
Prise en charge de SqlClient pour la haute disponibilité, récupération d’urgence
Une mise à jour introduit la prise en charge des fonctionnalités AlwaysOn dans SQL Server 2012 ou une
version ultérieure pour .NET Framework 3.5 SP1
SQL Server notes de publication de 2012
Créer ou configurer un listener de groupe de disponibilité (SQL Server)
SQL Server Clustering multi-sous-réseaux (SQL Server)
Délai de connexion dans le groupe de disponibilité multi-sous-réseau
L’exécution des requêtes prend plus de temps SQL
Server réplicas secondaires Always On
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème de problèmes de performances des requêtes sur les réplicas
secondaires en lecture seule.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 4040549

Symptômes
Supposons que vous avez une base Microsoft SQL Server de données membre du groupe de disponibilité
Always On qui contient une ou plusieurs tables de grande taille qui ont un clustered row-store index. Une
requête d’une ou de plusieurs tables de grande taille se termine plus rapidement sur le réplica principal que sur
un réplica secondaire.
Notes
La requête entraîne une analyse d’index en cluster d’une grande partie de la table.
La requête utilise l’indication NOLOCK.
Les opérateurs de plan d’exécution et l’ordre des opérateurs sont identiques pour les exécutions rapides et
lentes.
L’interrogation sys.dm_db_index_physical_stats révèle une fragmentation significative de l’index en cluster.
L’unjoining the database from the Always On Availability Group improves performance on the same (former)
secondary replica instance, so that it is similar to performance on the primary replica.

Cause
Lorsque l’isolation de capture instantanée est appliquée, les conseils NOLOCK sont ignorés. La différence de
durée d’exécution entre les réplicas principaux et secondaires se produit car l’indication NOLOCK est ignorée
sur le réplica secondaire en lecture seule où l’isolation de capture instantanée est appliquée, mais pas sur le
réplica principal où l’isolation de capture instantanée n’est pas appliquée par défaut. Cela entraîne l’application
de l’ordre de clé sur le réplica secondaire pour l’analyse de l’index en cluster. Sur le réplica principal, l’indication
NOLOCK est prioritaire et affecte le comportement. Lorsque l’index en cluster est hautement fragmenté,
l’application de l’ordre de clé pour l’analyse sur le réplica secondaire en lecture seule entraîne l’émission de SQL
Server sur une seule page. Toutefois, sur le réplica principal, SQL Server analyse une unité d’allocation pour lire
plusieurs pages par demande d’IO.

Résolution
Pour résoudre ce problème, ré reconstruire l’index sur le réplica principal. Cette opération se propage ensuite
aux réplicas secondaires. Pour plus d’informations, voir Recommandations maintenance d’index avec les
groupes de disponibilité AlwaysOn.

Plus d’informations
Les informations statistiques réelles sur les opérations d’exécution et le plan d’exécution peuvent ne pas aider au
diagnostic SET STATISTICS IO lorsque ce problème se produit. Celles-ci vous donnent des informations sur le
nombre de pages lues, mais pas sur le nombre d’opérations d’IO pour lire les pages.
Au lieu de cela, recherchez d’abord la fragmentation de l’index en cluster. En outre, vous pouvez collecter les
compteurs de processus Opérations de lecture des opérations d’O de l’observateur de performances/s et
Octets/s deux fois lorsque vous exécutez la requête avec la base de données dans le groupe de disponibilité, et à
nouveau à partir de la même instance lorsque la base de données est supprimée du groupe de disponibilité et
mise en ligne. Si la fragmentation de l’index provoque des lectures sur une seule page sur le réplica secondaire,
mais pas sur le réplica principal, vous vous attendez à voir un plus grand nombre d’IO/s de lecture/s et un plus
petit nombre d’octets de lecture/s lorsque la base de données se trouve dans le groupe de disponibilité par
rapport à ce qui n’est pas le cas.
En outre, ce comportement peut se produire, mais pas de manière significative dans tous les environnements.
Par exemple, un sous-système d’entrée/heure qui peut gérer l’augmentation du niveau d’entrée/seconde avec
une latence minimale et un débit similaire peut permettre à ce problème de passer à travers le monde.
Résolution des problèmes deover automatique dans
SQL Server environnements AlwaysOn
14/08/2021 • 8 minutes to read

Cet article vous aide à résoudre les problèmes qui se produisent lors du SQL Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2833707

Résumé
Microsoft SQL Server Les groupes de disponibilité AlwaysOn peuvent être configurés pour le failover
automatique. Par conséquent, si un problème d’état d’santé est détecté sur l’instance de SQL Server qui héberge
le réplica principal, le rôle principal peut être transitioné vers le partenaire de transfert automatique (réplica
secondaire). Toutefois, le réplica secondaire ne peut pas toujours être transitioné vers le rôle principal, mais
uniquement vers le rôle de résolution. À moins que le réplica principal ne retourne dans un état sain, il n’y a pas
de réplica dans le rôle principal. En outre, les bases de données de disponibilité sont inaccessibles.
Cet article répertorie certaines causes courantes de l’échec du failover automatique. En outre, cet article décrit
les étapes que vous pouvez effectuer pour diagnostiquer la cause de ces échecs.

Symptômes du déclenchement réussi d’un failover automatique


Lorsqu’un changement automatique est déclenché sur l’instance de SQL Server qui héberge le réplica principal,
le réplica secondaire passe au rôle de résolution, puis au rôle principal. En outre, vous recevez des messages
d’erreur dans le SQL Server journal de connexion qui ressemblent à ce qui suit :

L’état du réplica de disponibilité locale dans le groupe de disponibilité ' ' est devenu « RESOLVING_NORMAL
» <Group name> à « PRIMARY_PENDING »
L’état du réplica de disponibilité locale dans le groupe de disponibilité ' ' est devenu « <Group name>
PRIMARY_PENDING » à « PRIMARY_NORMAL »

NOTE
Le réplica secondaire passe d’un état RESOLVING_NORMAL à un état PRIMARY_NORMAL’état.

Symptômes en cas d’échec duover automatique


Si un événement de changement automatique échoue, le réplica secondaire ne passe pas au rôle principal. Par
conséquent, le réplica de disponibilité signale que ce réplica est en état de résolution. En outre, les bases de
données de disponibilité indiquent qu’elles ne sont pas en état de synchronisation et que les applications ne
peuvent pas accéder à ces bases de données.
Par exemple, dans l’image suivante, SQL Server Management Studio signale que le réplica secondaire est en état
de résolution car le processus de transfert automatique n’a pas pu faire passer le réplica secondaire au rôle
principal :

Cet article décrit plusieurs raisons possibles pour lesquelles le failover automatique peut échouer et comment
diagnostiquer chaque cause.

Cas 1 : la valeur « Nombre maximal d’échecs dans la période spécifiée


» est épuisée
Le groupe de disponibilité possède Windows propriétés de ressource de cluster, telles que le nombre maximal
d’échecs dans la propriété Période spécifiée. Cette propriété permet d’éviter le déplacement indéfini d’une
ressource en cluster en cas d’échec de plusieurs nœuds.
Pour déterminer et diagnostiquer s’il s’agit de la cause de l’échec du Windows, consultez le journal du cluster
Windows (Cluster.log), puis vérifiez la propriété. Pour cela, procédez comme suit :
Étape 1 : Passer en revue les données du journal Windows cluster (Cluster.log)
1. Utilisez Windows PowerShell pour générer le journal Windows cluster sur le nœud de cluster qui
héberge le réplica principal. Pour ce faire, exécutez l’cmdlet suivante dans une fenêtre PowerShell
avec élévation de SQL Server qui héberge le réplica principal :

Get-ClusterLog -Node <SQL Server node name> -TimeSpan 15

NOTE
Le paramètre -TimeSpan 15 de cette étape est utilisé dans l’hypothèse que le problème en cours de
diagnostic s’est produit au cours des 15 minutes précédentes.
Par défaut, le fichier journal est créé dans %WINDIR%\cluster\reports.

2. Ouvrez le fichier Cluster.log dans Bloc-notes pour passer en revue le journal Windows cluster.
3. Cliquez sur Modifier Bloc-notes, puis sur Rechercher, puis recherchez la chaîne « failoverCount »
à la fin du fichier. Examinez les résultats et vous devez trouver un message qui ressemble à ce qui
suit :

Sans faire échouer le groupe <Resource name> , failoverCount 3, failoverThresholdSetting


<Number> , computedFailoverThreshold 2

Étape 2 : Vérifier le nombre maximal d’échecs dans la propriété Period spécifiée


1. Démarrez le Gestionnaire du cluster de failover.
2. Dans le volet de navigation, cliquez sur Rôles.
3. Dans le volet Rôles, cliquez avec le bouton droit sur la ressource en cluster, puis cliquez sur
Propriétés.
4. Cliquez sur l’onglet Failover et vérifiez le nombre maximal d’échecs dans la valeur Période
spécifiée.

NOTE
Le comportement par défaut spécifie que si la ressource en cluster échoue trois fois sur une période de six
heures, elle doit rester dans l’état d’échec. Pour un groupe de disponibilité, cela signifie que le réplica est
laissé dans l’état RÉSOLUTION.

Conclusion
Après avoir analysé le journal, vous constatez que la valeur de failoverCount de 3 est supérieure à la valeur
computedFailoverThreshold de 2. Par conséquent, Windows cluster de disponibilité ne peut pas terminer
l’opération deover de la ressource du groupe de disponibilité pour le partenaire deover.
Résolution
Pour résoudre ce problème, augmentez le nombre maximal d’échecs dans la valeur de période spécifiée.
NOTE
L’augmentation de cette valeur risque de ne pas résoudre le problème. Il peut y avoir un problème plus critique qui
entraîne l’échec du groupe de disponibilité plusieurs fois sur une courte période, qui est de 15 minutes par défaut.
L’augmentation de cette valeur peut uniquement provoquer l’échec du groupe de disponibilité plus de fois avant de rester
dans un état d’échec. Nous vous recommandons de faire un effort de dépannage agressif pour déterminer pourquoi le
changement automatique se produit toujours.

Cas 2 : Autorisations de compte NT insuffisantes\Autorisations de


compte SYSTÈME
La SQL Server Moteur de base de données ressource DLL se connecte à l’instance de SQL Server qui héberge le
réplica principal à l’aide d’ODBC afin de surveiller l’état d’état. Les informations d’identification d’ouverture de
session utilisées pour cette connexion sont SQL Server compte de connexion NT AUTHORITY\SYSTEM. Par
défaut, ce compte de connexion local se vu accorder les autorisations suivantes :
Modifier un groupe de disponibilité
Connecter SQL
Afficher l’état du ser veur
Si le compte de connexion NT AUTHORITY\SYSTEM ne dispose d’aucune de ces autorisations sur le partenaire
de changement automatique (réplica secondaire), SQL Server ne peut pas démarrer la détection de l’état d’état
lorsqu’un changement automatique se produit. Par conséquent, le réplica secondaire ne peut pas passer au rôle
principal. Pour déterminer et diagnostiquer s’il en est la cause, examinez le journal Windows cluster. Pour cela,
procédez comme suit :
1. Utilisez Windows PowerShell pour générer le journal Windows cluster sur le nœud du cluster. Pour ce
faire, exécutez l’cmdlet suivante dans une fenêtre PowerShell avec élévation de niveaux sur l’instance de
SQL Server qui héberge le réplica secondaire qui n’a pas été transitionn dans le rôle principal :

Get-ClusterLog -Node <SQL Server node name> -TimeSpan 15

2. Ouvrez le fichier Cluster.log dans Bloc-notes pour passer en revue le journal Windows cluster.
3. Vous pouvez trouver des messages d’erreur qui ressemblent à ce qui suit :

Échec de l’exécuter. L’utilisateur n’est pas autorisé à effectuer cette action.


Conclusion
Le fichier Cluster.log signale qu’il existe un problème d’autorisation SQL Server exécute la commande de
diagnostic. Dans cet exemple, l’échec est dû à la suppression de l’autorisation d’état du serveur d’affichage du
compte de connexion NT AUTHORITY\SYSTEM sur l’instance de SQL Server qui héberge le réplica secondaire
d’une paire deover automatique.
Résolution
Pour résoudre ce problème, accordez des autorisations suffisantes au compte de connexion NT
AUTHORITY\SYSTEM pour la détection d’SQL Server Moteur de base de données DLL de la ressource.

Cas 3 : les bases de données de disponibilité ne sont pas


synchronisées
Pour que le système soit automatiquement mis en panne, toutes les bases de données de disponibilité définies
dans le groupe de disponibilité doivent être synchronisées entre le réplica principal et le réplica secondaire.
Lorsqu’un failover automatique se produit, cette condition de synchronisation doit être remplie pour s’assurer
qu’il n’y a aucune perte de données. Par conséquent, si une base de données de disponibilité dans le groupe de
disponibilité est synchronisée ou n’est pas synchronisée, le transfert automatique ne réussira pas à faire passer
le réplica secondaire au rôle principal.
Pour plus d’informations sur les conditions requises pour un failover automatique, voir les conditions requises
pour une section Deover automatique et les réplicas de validation synchrone prise en charge deux sections de
paramètres de l’article : Les modes de failover et de failover (groupesde disponibilité Always On).
Pour déterminer et diagnostiquer s’il s’agit de la cause de l’échec du SQL Server journal des erreurs. Vous devez
trouver un message d’erreur semblable à ce qui suit :
Une ou plusieurs bases de données ne sont pas synchronisées ou n’ont pas rejoint le groupe de disponibilité

Pour vérifier si les bases de données de disponibilité ont l’état SYNCHRONISÉ, suivez les étapes suivantes :
1. Connecter au réplica secondaire.
2. Exécutez le script SQL suivant afin de vérifier la valeur de toutes les bases de données de disponibilité du
groupe de disponibilité qui n’ont is_failover_ready pas été échouées.
NOTE
Une valeur nulle pour l’une des bases de données de disponibilité peut empêcher le failover automatique, et cette
valeur indique que la base de données de disponibilité n’a pas été SYNCHRONISÉe.

Select database_name, is_failover_ready from sys.dm_hadr_database_replica_cluster_states where


replica_id in (select replica_id from sys.dm_hadr_availability_replica_states)

Conclusion
Pour que le groupe de disponibilité soit réussi, toutes les bases de données de disponibilité doivent être à
SYNCHRONIZED l’état. Pour plus d’informations sur les modes de disponibilité, ez le lien suivant :

Modes de disponibilité dans les groupes de disponibilité AlwaysOn

Cas 4 : Impossible de faire échouer, la configuration « Forcer le


chiffrement de protocole » a été sélectionnée pour les protocoles
clients
Pour vérifier cette configuration :
1. Lancez Gestionnaire de configuration SQL Server.
2. Dans le volet gauche, cliquez avec le bouton droit sur SQL Native Client configuration 11.0 et choisissez
Propriétés.
3. In dialog check Force Encr yption , if set to Yes , change to No .
4. Testez à nouveau leoverover.
Conclusion
SQL Server La surveillance de l’état AlwaysOn utilise une connexion ODBC locale pour surveiller SQL
Server’état. Le chiffrement par protocole de force doit être activé uniquement dans la section Configuration du
client de Gestionnaire de configuration SQL Server, si SQL Server lui-même a été configuré pour forcer le
chiffrement dans Gestionnaire de configuration SQL Server sous la section Configuration du réseau S QL
Ser ver. Pour plus d’informations, voir : Activer les connexions chiffréesau Moteur de base de données .
Résoudre les problèmes SQL Server AlwaysOn
14/08/2021 • 11 minutes to read

Cet article vous aide à résoudre le problème courant de configuration AlwaysOn sur SQL serveur.

NOTE
Pour une visite guidée de l’expérience de cet article, voir Résolution des problèmes SQL Server problèmes AlwaysOn.

Version du produit d’origine : SQL Server 2012 Enterprise, SQL Server 2014 Enterprise, SQL Server 2016
Enterprise
Numéro de la ko d’origine : 10179

Quels sont les problèmes auxquels vous êtes confronté ?


Les données CSS de Microsoft indiquent qu’un pourcentage significatif de problèmes de clients est
souvent traité précédemment dans une mise à jour un jour publiée, mais qu’il n’est pas appliqué de
manière proactive et recommande donc l’installation continue et proactive des CUS dès qu’elles sont
disponibles. Pour plus d’informations, voir : Annonce des mises à jour du SQL Server de maintenance
incrémentielle (ISM).
Pour vérifier les dernières UTIL disponibles pour votre version, voir : Comment déterminer la version,
l’éditionet le niveau de mise à jour de SQL Server et ses composants .
Vous pouvez consulter les outils utiles de dépannage et de surveillance des groupes de disponibilité
AlwaysOn dans le Guide de dépannage et de surveillance des groupes de disponibilité AlwaysOn pour en
savoir plus sur les outils que vous pouvez utiliser pour diagnostiquer différents types de problèmes et
pour surveiller les groupes de disponibilité. Le guide propose également des scénarios supplémentaires
qui peuvent ne pas être abordés dans cette visite guidée.
Nœud parent de la documentation des groupes de disponibilité AlwaysOn et fournit une référence
d’arrêt pour diverses questions, voir : Groupes de disponibilité AlwaysOn (SQL Server).

J’ai besoin de pointeurs sur la configuration des groupes de


disponibilité AlwaysOn
Si vous recherchez de la documentation sur la configuration AlwaysOn, consultez les documents suivants :
Getting Started with AlwaysOn Availability Groups (SQL Server) - The document provides answers to many
questions you may have related to Availability groups, setup etc. Le fait de suivre toutes les étapes de ce
document et de passer en revue les conditions préalables, les restrictions et les Recommandations pour les
groupes de disponibilité AlwaysOn (SQL Server) permettra d’éviter de nombreux problèmes que vous pouvez
être en mesure d’exécuter avec la configuration et la maintenance de groupes de disponibilité dans votre
environnement.
Ressources supplémentaires
Étape par étape : création d’SQL Server de disponibilité AlwaysOn 2012
Guides d’architecture AlwaysOn
Lien externe : SQL Server groupes de disponibilité AlwaysOn
Si ces informations ne sont pas utiles, consultez les informations supplémentaires sur les groupes de
disponibilité AlwaysOn.

J’ai des difficultés à configurer des groupes de disponibilité AlwaysOn


Les groupes de disponibilité AlwaysOn sont en général désactivés, les comptes sont configurés de manière
incorrecte, le point de terminaison de mise en miroir de base de données n’existe pas, le point de terminaison
est inaccessible (SQL Server Erreur 1418), l’accès réseau n’existe pas et une commande de jointage de base de
données échoue (SQL Server Erreur 35250). Examinez le document suivant pour obtenir de l’aide sur la
résolution de ces problèmes :
Résoudre les problèmes de configuration des groupes de disponibilité AlwaysOn (SQL Server)
Liens supplémentaires : Corriger : Erreur 41009 lorsque vous essayez de créer plusieurs groupes de disponibilité
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

J’ai des problèmes avec la configuration de l’écoute (19471, 19476 et


autres erreurs)
L’un des problèmes de configuration les plus courants rencontrés par les clients est la création d’un listener de
groupe de disponibilité. Les erreurs sont similaires à ce qui suit :

Msg 19471, Level 16, State 0, Line 2The WSFC cluster could not bring the Network Name resource
with DNS name '' online. Le nom DNS peut avoir été pris ou être en conflit avec les services de noms
existants, ou le service de cluster WSFC n’est peut-être pas en cours d’exécution ou peut être
inaccessible. Utilisez un autre nom DNS pour résoudre les conflits de noms ou consultez le journal du
cluster WSFC pour plus d’informations.

Msg 19476, Level 16, State 4, Line 2The attempt to create the network name and IP address for the
listener failed. Le service WSFC peut ne pas être en cours d’exécution ou inaccessible dans son état
actuel, ou les valeurs fournies pour le nom du réseau et l’adresse IP peuvent être incorrectes. Vérifiez
l’état du cluster WSFC et validez le nom du réseau et l’adresse IP auprès de l’administrateur réseau.

La plupart du temps, l’échec de création de l’écoute qui a entraîné les messages ci-dessus est dû à un manque
d’autorisations pour l’objet CNO (Cluster Name Object) dans Active Directory pour créer et lire l’objet ordinateur
d’écoute. Pour résoudre ce problème, consultez les articles suivants :
Échec de la création d’un répondeur avec le message « Le cluster WSFC n’a pas pu mettre en ligne la
ressource Nom du réseau »
Résolution des problèmes de création d’un listener de groupe de disponibilité AlwaysOn SQL Server
2012
Configurer un listener pour un groupe de disponibilité Always On
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

Le failover automatique ne fonctionne pas comme prévu


Si vous remarquez que le failover automatique ne fonctionne pas comme prévu pendant le test ou en
production, voir : Résolution des problèmes de failover automatique dans les environnements AlwaysOn SQL
Server 2012.
Une configuration incorrecte du nombre maximal d’échecs dans la période spécifiée est l’une des principales
causes pour que le principal ne passe pas automatiquement au secondaire. La valeur par défaut de ce paramètre
est N-1, où N est le nombre de réplicas. Pour plus d’informations, voir : Limite maximale d’échecs du cluster de
failover (groupe).
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

J’ai des problèmes de connexion aux groupes de disponibilité


AlwaysOn
Après avoir configuré l’écoute de groupe de disponibilité pour un groupe de disponibilité AlwaysOn dans SQL
Server 2012, il se peut que vous ne soyez pas en mesure d’envoyer un ping à l’écoute ou de vous y connecter à
partir d’une application. Vous pouvez obtenir une erreur semblable à celle-ci :

Sqlcmd : Erreur : Microsoft SQL Native Client : le délai d’expiration de la connexion a expiré.

Pour résoudre ce problème et les erreurs similaires, examinez les questions suivantes :
Erreur de délai et vous ne pouvez pas vous connecter à un SQL Server de groupe de disponibilité AlwaysOn
2012 dans un environnement amulti-subnet
Délai de connexion dans le groupe de disponibilité multi-sous-réseau
Liens d’informations supplémentaires :
Une mise à jour introduit la prise en charge des fonctionnalités AlwaysOn dans SQL Server 2012 ou une
version ultérieure pour the.NET Framework 3.5 SP1
SQL Server Clustering multi-sous-réseaux (SQL Server)
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

J’ai des problèmes lors de la configuration des groupes de


disponibilité AlwaysOn dans ma VM Azure (IaaS)
1. De nombreux problèmes liés à AlwaysOn se produisent en raison d’une configuration incorrecte de
l’écoute. Si vous avez des problèmes de connexion à l’écoute,
a. Veillez à lire toutes les limitations de l’écoute ILB et à suivre toutes les étapes documentées dans
l’article suivant en vous intéressant particulièrement à la configuration des dépendances, à
l’adresse IP et à divers autres paramètres du script PowerShell.
b. Si vous n’êtes pas sûr, vous pouvez supprimer et recréer l’écoute comme dans le document ci-
dessus.
2. Si vous avez récemment déplacé votre VM vers un autre service ou si les adresses IP ont changé, vous
devez mettre à jour la valeur de la ressource d’adresse IP pour refléter la nouvelle adresse et recréer le
point de terminaison à charge équilibrée pour votre ag. Vous pouvez mettre à jour l’adresse IP à l’aide des
commandes Get / Set comme suit :

Get-ClusterResource "IPResourceName" | Set-ClusterParameter -name Address -value "w.x.y.z"

Documents recommandés :
Configurer un équilibreur de charge pour un groupe SQL Server de disponibilité Always On dans des
machines virtuelles Azure
Recommandations et meilleures pratiques lors du déploiement SQL Server groupes de disponibilité
AlwaysOn dans Microsoft Azure (IaaS)
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

Le passage du principal au secondaire prend beaucoup de temps, ou


inversement.
Après un failover automatique ou un failover manuel planifié sans perte de données sur un groupe de
disponibilité, il se peut que vous trouviez que le temps de récupération dépasse votre objectif de temps de
récupération (RTO). Pour résoudre les causes et les résolutions potentielles, voir : Résolution des problèmes : Le
groupe de disponibilité a dépassé le RTO.
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

Les modifications apportées au réplica principal ne sont pas reflétées


ou ralenties pour être répliquées vers le réplica secondaire.
Vous remarquerez peut-être que les modifications apportées au réplica principal ne sont pas propagées en
secondaire en temps voulu. Pour résoudre ces problèmes, essayez les éléments suivants :
Pour les environnements SQL Server 2012 et SQL Server 2014, voir : CORRECTIF : Synchronisation lente
lorsque les disques ont des tailles de secteur différentes pour les fichiers journaux de réplica principal et
secondaire dans les environnements SQL Server AG et Logshipping.
Vérifiez si les nodes secondaires sont dans un état Suspendu dans l’administrateur de cluster.
Review this Troubleshooting article: Troubleshoot: Changes on the Primary Replica are not Reflected on
the Secondary Replica.
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

Comment gérer la taille du journal des transactions pour mes bases


de données AG
Vous pouvez réduire la taille des journaux de transactions en configurant des sauvegardes régulières sur des
serveurs principaux ou secondaires.
Pour plus d’informations, examinez les rubriques suivantes :
Décharger les sauvegardes prise en charge vers les réplicas secondaires d’un groupe de disponibilité
Effectuer des sauvegardes du journal des transactions à l’aide du groupe de disponibilité AlwaysOn Read-
Only réplicas secondaires - Partie 1
Si ces informations ne sont pas utiles, consultez les informations supplémentaires sur les groupes de
disponibilité AlwaysOn.

Les serveurs principaux ou secondaires se sont déférés dans l’état de


résolution ou vous faites face à des changements inattendus
Vérifiez les journaux des événements système et d’application pour les problèmes matériels et d’autres
erreurs et travaillez avec le fournisseur pour les résoudre.
Si vous utilisez des ordinateurs virtuels, vérifiez leur base de connaissances pour voir s’il existe des
problèmes récemment signalés qui peuvent contribuer au problème. Par exemple, une perte de paquets
importante au niveau du système d’exploitation invité sur la vNIC VMXNET3 dans ESXi (2039495) a
provoqué des problèmes avec la configuration ag.
Plus d’informations :
Diagnostiquer un échec inattendu ou un groupe de disponibilité en état DE RÉSOLUTION
Lien externe : SQL SERVER - Groupe de disponibilité AlwaysOn bloqué à l’état de résolution pendant
longtemps
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

Pas en mesure de mettre les ressources en ligne


Vérifiez si la récupération des bases de données prend beaucoup de temps en vérifiant les messages dans le
SQL ErrorLog.
Si le problème existe toujours, consultez plus d’informations sur les groupes de disponibilité AlwaysOn.

Foire aux questions


1. Est-il possible d’avoir deux écouteurs pour un groupe de disponibilité ?
Oui, vous pouvez configurer plusieurs écouteurs pour le même groupe de disponibilité. Voir : Comment
créer plusieurs écouteurs pour le même groupe de disponibilité (Goden Yao).
2. Est-il possible d’avoir une car te réseau distincte pour le trafic toujours sur le trafic et la
connectivité client ?
Oui, vous pouvez avoir une carte réseau dédiée pour le trafic AlwaysOn. Voir : Configurer le groupe de
disponibilité pour communiquer sur un réseau dédié.
3. Quelles éditions viennent en charge les instances de cluster de failover Always On ?
Cette rubrique dans SQL Server Books Online contient plus d’informations : Éditions et fonctionnalités
SQL Server 2016.
4. Comment récupérer en cas de défaillance sur tous les nodes de votre cluster ?
Voir : WSFC Disaster Recovery through Forced Quorum (SQL Server).
5. Où puis-je trouver des informations sur la prise en charge des transactions distribuées dans
les configurations AG ?
Voir : Transactions - groupes de disponibilité et mise en miroir de bases de données.
6. Comment mettre à jour les configurations AlwaysOn ?
Voir : Mise à niveau des instances de réplica de groupede disponibilité Always On.
7. Comment ajouter une base de données TDE (Transparent Data Encr yption) à la configuration
AG ?
Pour ajouter la base de données TDE activée à AG, voir : Comment configurer Always On pour une base
de données TDE.
8. Comment configurer des aler tes pour vérifier si la secondaire est en retard par rappor t au
principal ?
Vous pouvez utiliser le script suivant :
SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server,
dr_state.database_id as database_id,
is_ag_replica_local = CASE
WHEN ar_state.is_local = 1 THEN N'LOCAL'
ELSE 'REMOTE'
END,
ag_replica_role = CASE
WHEN ar_state.role_desc IS NULL THEN N'DISCONNECTED'
ELSE ar_state.role_desc
END,
dr_state.last_hardened_lsn, dr_state.last_hardened_time,
datediff(s,last_hardened_time, getdate()) as 'seconds behind primary'
FROM (( sys.availability_groups AS ag
JOIN sys.availability_replicas AS ar
ON ag.group_id = ar.group_id)
JOIN sys.dm_hadr_availability_replica_states AS ar_state
ON ar.replica_id = ar_state.replica_id)
JOIN sys.dm_hadr_database_replica_states dr_state
on ag.group_id = dr_state.group_id and dr_state.replica_id = ar_state.replica_id

9. Comment être aler té si l’état de la base de données n’est pas synchronisé ?


Vous pouvez utiliser le script suivant :

SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server,


dr_state.database_id as database_id,
is_ag_replica_local = CASE
WHEN ar_state.is_local = 1 THEN N'LOCAL'
ELSE 'REMOTE'
END,
ag_replica_role = CASE
WHEN ar_state.role_desc IS NULL THEN N'DISCONNECTED'
ELSE ar_state.role_desc
END,
ar_state.connected_state_desc, ar.availability_mode_desc, dr_state.synchronization_state_desc
FROM (( sys.availability_groups AS ag
JOIN sys.availability_replicas AS ar
ON ag.group_id = ar.group_id )
JOIN sys.dm_hadr_availability_replica_states AS ar_state
ON ar.replica_id = ar_state.replica_id)
JOIN sys.dm_hadr_database_replica_states dr_state
ON ag.group_id = dr_state.group_id and dr_state.replica_id = ar_state.replica_id

Vous pouvez également consulter les liens suivants pour obtenir des méthodes supplémentaires pour
surveiller les groupes AlwaysOn :
Gestion basée sur une stratégie pour les problèmes opérationnels avec les groupes de
disponibilité Always On
Lien externe : utilisation de la gestion basée sur la stratégie pour SQL Server groupes de
disponibilité des alertes de perte de données
Comportement du témoin dynamique sur le clustering Windows Server 2012 R2

Plus d’informations sur les groupes de disponibilité AlwaysOn


Guide de résolution et de surveillance des groupes de disponibilité AlwaysOn
Groupes de disponibilité Always On : solution de haute disponibilité et de récupération d’urgence
Les bases de données en miroir sont déconnectées
après le redémarrage du miroir de base de données
dans SQL Server
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où les bases de données en miroir sont laissées dans un état
Déconnecté ou En récupération.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 2490051

Symptôme
Prenons l’exemple du scénario suivant :
Vous avez un ordinateur qui exécute une instance secondaire de Microsoft SQL Server dans un miroir de
base de données à deux serveurs.
L’utilisation du processeur atteint 100 % sur l’ordinateur et vous ne pouvez pas arrêter le service SQL
Server à l’aide SQL Server outils de gestion.
Vous terminez le processus de l’instance SQL Server secondaire à l’aide du Gestionnaire des tâches.
Vous redémarrez l’instance secondaire de SQL Server.
Dans ce scénario, toutes les bases de données en miroir sont dans un état Déconnecté ou En cours de
récupération. En outre, un message d’erreur semblable à ce qui suit est consigné dans le journal SQL
Server’erreurs pour chaque base de données :

Contournement de la récupération pour la base de données « Nom de la base de données » car elle est
marquée comme une base de données de mise en miroir de base de données inaccessible. Il existe un
problème avec la session de mise en miroir. La session n’a pas de quorum ou les liens de communication
sont rompus en raison de problèmes liés aux liens, à la configuration du point de terminaison ou aux
autorisations (pour le compte de serveur ou le certificat de sécurité). Pour accéder à la base de données,
recherchez ce qui a changé dans la configuration de la session et annuler la modification.

Cause
Ce problème se produit en raison de problèmes dans les points de terminaison SQL Server de mise en miroir de
bases de données.

Résolution
Pour résoudre ce problème, utilisez les méthodes suivantes. Si la première méthode ne résout pas le problème,
utilisez la deuxième méthode.

Méthode 1
Recyclez le point de terminaison sur la base de données miroir. Pour cela, procédez comme suit :
1. Sur la base de données principale, exécutez le script de SQL suivant pour arrêter le point de terminaison :
ALTER ENDPOINT <Endpoint Name> STATE=STOPPED

2. Exécutez le script SQL suivant pour redémarrer le point de terminaison :

ALTER ENDPOINT <Endpoint Name> STATE=STARTED

NOTE
Si la communication entre les points de terminaison ne redémarre pas après l’exécution des scripts, exécutez les
scripts sur le miroir de base de données. Toutefois, la base de données peut entrer dans un état Suspendu une fois
que vous avez fait cela. Si ce problème se produit, exécutez le script SQL suivant :

ALTER DATABASE < **Database Name** > SET PARTNER RESUME

Méthode 2
Supprimez et re-créez les points de terminaison de mise en miroir de bases de données sur les deux serveurs.
Une SQL Server de cluster passe à l’état « échec »
lorsque vous essayez de mettre la ressource en ligne
SQL Server
15/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème qui se produit si des clés de Registre spécifiques aux ressources
sont manquantes.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 883732

Symptômes
Lorsque vous essayez d’SQL Server de cluster en ligne pour une instance virtuelle de Microsoft SQL Server,
vous remarquerez peut-être le comportement suivant :
La SQL Server de cluster passe à l’état « échec » et n’est pas mise en ligne.
Vous recevez une combinaison des messages d’erreur suivants sur l’ordinateur propriétaire de la SQL
Server cluster.
Message d’erreur 1
Un événement semblable à celui-ci se trouve dans le journal des événements système :

Date : 05/08/2004
Heure : 1:11:19 AM
Source : ClusSvc
Catégorie : Mgr deover
Tapez : Erreur
ID d’événement : 1069
Utilisateur : N/A
Ordinateur : <Computer Name> Description :
La ressource de cluster « SQL Server ( ) » dans le groupe <SQL Server instance name> de
ressources ' ' a <Cluster group name> échoué.

Message d’erreur 2
Un message d’erreur semblable au suivant se trouve dans le fichier journal du cluster :

00000644.00000944::2003/11/30-18:11:30.360 SQL Server : [sqsrvres] Impossible de lire la


propriété <SQLServer> « VirtualServerName ». Erreur : d.
00000644.00000944::2003/11/30-18:11:30.360 SQL Server <SQLServer> : [sqsrvres]
OnlineThread : Erreur lors de la mise en ligne de la ressource.

Message d’erreur 3
Les messages d’erreur semblables aux suivants sont dans le SQL Server journal des erreurs :

2003-11-30 17:00:37.27 Serveur Erreur : 17826, Gravité : 18, État : 1


2003-11-30 17:00:37.27 Server Could not set up Net-Library 'SSNETLIB'..
2003-11-30 17:00:37.27 spid13 Démarrage de la base de données « SPB ».
2003-11-30 17:00:37.27 spid12 Démarrage de la base de données « BD_MTA ».
2003-11-30 17:00:37.27 spid14 Démarrage de la base de données « BD_SPF ».
2003-11-30 17:00:37.27 Serveur Erreur : 17059, Gravité : 18, État : 0
2003-11-30 17:00:37.27 serveur Erreur du système d’exploitation -1073723998 : ..
Serveur 2003-11-30 17:00:37.27 Impossible de charger des netlibs.
Le serveur 2003-11-30 17:00:37.27 n SQL Server pas pu générer le thread FRunCM.

Cause
Les clés de Registre spécifiques aux ressources qui correspondent à la ressource de cluster SQL Server que vous
essayez de mettre en ligne sont manquantes. Ce problème se produit également si les valeurs qui
correspondent aux clés de Registre spécifiques aux ressources ne sont pas correctes.

Résolution
IMPORTANT
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des
problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces
étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le
restaurer en cas de problème. Pour plus d’informations sur la façon de back up et restore the registry, voir How to back
up and restore the registry in Windows.

Pour résoudre ce problème, vous devez manuellement créer à nouveau les clés de Registre spécifiques aux
ressources qui correspondent à la ressource SQL Server cluster. Pour cela, procédez comme suit :
1. Cliquez sur Démarrer, cliquez sur Exécuter, tapez Regedit, puis cliquez sur OK.
2. Dans l’Éditeur du Registre, recherchez et sélectionnez la clé de Registre :
HKEY_LOCAL_MACHINE\Cluster\Resources\<GUID>\Parameters .

3. Créez les valeurs de Registre suivantes dans la clé de Registre Parameters :


Pour une instance par défaut de SQL Server :
InstanceName
Nom de la valeur : InstanceName
Type de valeur : REG_SZ
Données de valeur : MSSQLSERVER
VirtualServerName
Nom de la valeur : VirtualServerName
Type de valeur : REG_SZ
Données de valeur : <Name of the virtual SQL server>
Pour une instance nommée de SQL Server :
InstanceName
Nom de la valeur : InstanceName
Type de valeur : REG_SZ
Données de valeur : <SQL Server instance name corresponding to the virtual server>
VirtualServerName
Nom de la valeur : VirtualServerName
Type de valeur : REG_SZ
Données de valeur : <Name of the virtual SQL server>
4. Quittez l’Éditeur du Registre.Après avoir créé les clés de Registre spécifiques à la ressource, vous pouvez
mettre la ressource SQL Server cluster en ligne.
Si vous remarquez qu’une ressource de cluster agent SQL Server ne peut pas être mise en ligne, vous
devez créer le même ensemble de clés spécifiques aux ressources qui correspondent à la ressource de
cluster de l’agent SQL Server.

Plus d’informations
Comment créer manuellement les clés de Registre propres aux ressources pour SQL Server de cluster
Message d’erreur lors de l’installation SQL Server
sur un cluster Windows Server
13/08/2021 • 4 minutes to read

Cet article vous aide à résoudre le problème qui se produit lorsque vous installez SQL Server sur Windows
cluster de serveurs.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 953748

Symptômes
Lorsque vous installez Microsoft SQL Server sur un cluster Windows server, la règle de validation de cluster du
processus d’installation peut échouer. En outre, le message d’erreur suivant peut s’afficher :

Erreur : « Erreurs de vérification du cluster du service de cluster Microsoft (MSCS) » a échoué. Le cluster n’a
pas été vérifié ou il y a des erreurs ou des échecs dans le rapport de vérification. Consultez la KB953748 ou
SQL en ligne pour plus d’informations »

Le fichier journal d’installation peut contenir un message semblable à ce qui suit :

2008-05-20 05:27:18 Slp : Évaluation de la règle : Cluster_VerifyForErrors


2008-05-20 05:27:18 Slp : Règle en cours d’exécution sur l’ordinateur : SQLNode_Name
2008-05-20 05:27:18 Slp : Évaluation de la règle effectuée : Échec
2008-05-20 05:27:18 Slp : Message d’évaluation de la règle : le cluster n’a pas été vérifié ou il y a des erreurs
ou des échecs dans le rapport de vérification.

Par exemple, le fichier journal d’installation (Detail.txt) peut se présenter dans le dossier :
%ProgramFiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\20090316_112604 .

Pour une validation réussie, la règle aura une entrée qui ressemble à ce qui suit :

Computer_name : Cluster_VerifyForErrors : Transmis

Cause
Le processus de validation peut échouer dans différentes conditions. Lorsque ce problème se produit, vous
devez effectuer une validation manuelle pour vous assurer que la configuration matérielle est correcte avant
d’essayer une solution de contournement mentionnée dans cet article. Vous pouvez utiliser les références
mentionnées dans la section Références pour plus d’informations sur la validation des clusters dans les
environnements Windows Server. Cela permet d’éviter d’autres problèmes que vous risquez de résoudre à
l’avenir, si vous utilisez la solution de contournement lorsque des problèmes sous-jacents existent.

Solution de contournement
Pour contourner ce problème, vous devez résoudre le problème à l’origine de l’échec de la validation. Si vous
pouvez déterminer que le problème à l’origine de l’échec de la validation peut être résolu ultérieurement, vous
pouvez utiliser l’option d’installation de ligne de commande de cet article pour ignorer le message d’erreur et
essayer d’installer l’instance du cluster de SQL Server. Si vous faites cela, avant d’utiliser à nouveau le système,
vous devez toujours résoudre le problème sous-jacent qui a provoqué l’échec de la validation.

NOTE
Si vous essayez cette option d’installation de ligne de commande et que le programme d’installation de SQL Server
échoue, assurez-vous que la configuration matérielle du cluster est valide, puis contactez les services de support
technique Microsoft (CSS) pour obtenir de l’aide supplémentaire.

À l’invite de commandes, modifiez le lecteur de disque dur et le dossier qui contient SQL Server(Setup.exe).
Tapez ensuite l’une des commandes suivantes pour ignorer la règle de validation :
Pour une configuration de Add-Note intégrée, exécutez la commande sur chaque nœud ajouté
Setup/SkipRules=Cluster_VerifyForErrors/Action=InstallFailoverCluster :

Pour une installation avancée ou d’entreprise, exécutez la commande :


Setup/SkipRules=Cluster_VerifyForErrors/Action=CompleteFailoverCluster

Si vous recevez cet échec de validation lorsque vous ajoutez un nœud à une installation deover existante,
exécutez la commande sur chaque nœud ajouté
Setup /SkipRules=Cluster_VerifyForErrors /Action=AddNode :

NOTE
La configuration d’une instance de cluster de SQL Server de Windows Server contenant des erreurs dans le rapport de
validation du cluster de serveur Windows n’est pas pris en compte. Pour qu’SQL Server instance de cluster de point de
contrôle soit dans un scénario pris en charge, le rapport de validation du cluster Windows server ne peut pas contenir
d’erreurs. Confirmez avec CSS que la configuration de cluster est dans un état pris en charge.

Le SkipRules paramètre d’installation n’est pas une fonctionnalité documentée. Vous ne devez pas utiliser ce
paramètre pour ignorer d’autres règles à l’exception de la règle, sauf si Cluster_VerifyForErrors CSS vous en
fait l’indication.

SQL Server de validation de cluster de failover


À l’aide de l’Assistant Validation de cluster, vous pouvez exécuter un ensemble de tests axés sur une collection de
serveurs que vous avez l’intention d’utiliser comme des serveurs dans un cluster. Ce processus de validation de
cluster teste le matériel et les logiciels sous-jacents directement et individuellement, afin d’obtenir une
évaluation précise de la prise en charge du clustering de SQL Server dans une configuration donnée.

Procédure à prendre en cas d’échec des tests de validation


Dans la plupart des cas, si des tests de la règle de validation de cluster échouent, Microsoft ne considère pas la
solution comme prise en charge. Il existe des exceptions à cette règle, comme dans le cas de clusters
multisessulaires (géographiquement dispersés) où il n’y a pas de stockage partagé. Dans ce scénario, le résultat
attendu de l’Assistant Validation de cluster est que les tests de stockage échoueront. Il s’agit toujours d’une
solution prise en charge si le reste des tests se termine correctement.
Le type de test qui échoue est une recommandation pour l’action corrective à prendre. Par exemple, si le test de
stockage List all disks échoue et si les tests de stockage ultérieurs ne s’exécutent pas parce qu’ils échouent
également, contactez le fournisseur de stockage pour résoudre les problèmes. De même, si un test réseau lié aux
adresses IP échoue, discutez avec l’équipe d’infrastructure réseau.

Références
Valider le matériel pour un cluster de failover
Instances de cluster de failover Always On (SQL Server)
Installer les SQL Server à partir de l’invite de commandes
Lorsque vous exécutez l’Assistant Validation d’une configuration sur un ordinateur Windows Server 2008
ou sur un ordinateur Windows Vista, la validation n’est pas validée.
Créer des bases de données ou modifier des
emplacements de fichiers disque sur un lecteur de
cluster partagé sur lequel SQL Server n’a pas été
installé à l’origine
14/08/2021 • 2 minutes to read

Cet article explique comment créer des bases de données ou modifier des emplacements de fichiers disque sur
un lecteur de cluster partagé sur lequel SQL Server n’a pas été installé à l’origine.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 295732

Résumé
Après avoir installé une instance de serveur virtuel SQL Server, vous pouvez créer des bases de données ou
déplacer des données existantes ou des fichiers journaux sur un disque de cluster partagé secondaire. Pour créer
des bases de données ou déplacer des données ou des fichiers journaux existants, l’autre disque que SQL Server
doit utiliser doit être ajouté en tant que dépendance à la ressource SQL Server dans l’administrateur de cluster.
Si vous tentez de créer une base de données sur un autre lecteur de cluster partagé lorsque la ressource SQL
Server ne dépend pas de ce disque, vous pouvez recevoir une erreur semblable à celle-là :

Serveur : Msg 5184, Niveau 16, État 2, Ligne 1. Impossible d’utiliser le fichier « %.*ls » pour le serveur en
cluster. Seuls les fichiers mis en forme sur lesquels la ressource de cluster du serveur a une dépendance
peuvent être utilisés.
Serveur : Msg 1802, Niveau 16, État 1, Ligne 1
ÉCHEC DE LA CRÉATION D’UNE BASE DE DONNÉES. Certains noms de fichiers répertoriés n’ont pas pu être
créés. Vérifiez les erreurs précédentes.

Une erreur similaire s’affiche lorsque vous essayez de déplacer ou d’ajouter des fichiers à une base de données
existante sur un lecteur de cluster partagé qui n’est pas dans le groupe SQL Server et qui n’a pas non plus la
dépendance SQL Server ressources.
En outre, si vous essayez de créer un catalogue d’index de texte intégral sur un disque dont la ressource SQL
Server ne dépend pas, l’erreur suivante s’affiche :

Serveur : Msg 7627, Level 16, State 1, Procedure sp_fulltext_database, Line 61 Full-text catalog in directory
'Y:\FTDATA' for clustered server cannot be created. Seuls les répertoires sur un disque du groupe de clusters
du serveur peuvent être utilisés.

Plus d’informations
Pour ajouter un disque en tant que dépendance au SQL Server, le disque de cluster partagé doit résider dans le
même groupe dans l’administrateur de cluster que les ressources SQL Server cluster.
Pour déplacer le disque de cluster partagé, sélectionnez le disque que vous souhaitez déplacer vers le groupe de
SQL Server, puis cliquez avec le bouton droit sur cette ressource. Cliquez sur Modifier le groupe. Une fois que
le disque se trouve dans le même groupe dans lequel réside la ressource SQL Server, suivez les étapes suivantes
pour l’ajouter en tant que SQL Server dépendance :
1. Ouvrez l’administrateur de cluster.
2. Assurez-vous que toutes les ressources de disque physique qui contiennent SQL Server bases de données
sont dans le même groupe que la SQL Server ressource.
3. Cliquez avec le bouton droit SQL Server ressource, puis mettre la ressource dans un état hors connexion en
cliquant sur Mettre hors connexion.
4. Cliquez avec le bouton droit sur SQL Server ressource, puis cliquez sur Propriétés.
5. Sélectionnez l'onglet Dépendances .
6. Cliquez sur Modifier pour ajouter le disque à la liste des dépendances de cette ressource.
7. Remettre la SQL Server en ligne, puis placer les fichiers SQL Server sur ce disque de cluster partagé.
Une erreur se produit lorsque vous installez SQL
Server 2016 sur un disque de volume partagé de
cluster
12/08/2021 • 2 minutes to read

Cet article vous aide à contourner le problème d’autorisations qui se produit lorsque vous installez SQL Server
2016 sur un disque de volume partagé de cluster (CSV).
Version du produit d’origine : SQL Server 2016 Standard, SQL Server 2016 Enterprise
Numéro de la ko d’origine : 4082888

Symptômes
Supposons que vous essayiez d’installer une instance de Microsoft SQL Server 2016 sur un disque CSV, vous
pouvez recevoir une erreur ressemblant à ce qui suit :

TITRE : configuration Microsoft SQL Server 2016


L’erreur suivante s’est produite :
Échec de la mise à jour du paramètre d’autorisation pour le dossier « C:\ClusterStorage\volume1\Data1 ». '
Le paramètre d’autorisation de dossier était supposé être « D:P(A;OICI;FA;; ; ; BA)(A;OICI;FA;;; SY)(A;OICI;FA;;;
CO)(A;OICI;FA;;)'.
Cliquez sur « Réessayer » pour réessayer l’action qui a échoué ou cliquez sur « Annuler » pour annuler cette
action et poursuivre l’installation.

Cause
Le bouton Autorisations héritées est activé pour le dossier choisi pour les emplacements de base de données.

Solution de contournement
La solution de contournement pour ce problème est la suivante :
Supposons que nous utilisons le dossier C:\ClusterStorage\Volume1\Data1\ comme exemple.
1. Accédez à C:\ClusterStorage\Volume1\ .
2. Cliquez avec le bouton droit sur le dossier Data1, puis sélectionnez le bouton Propriétés.
3. Sélectionnez l’onglet Sécurité, puis le bouton Avancé en bas.
4. Sélectionnez le bouton Désactiver l’héritage, puis sélectionnez Convertir les autorisations héritées en
autorisations explicites sur cette option d’objet.
5. Réessayez l’installation.
Re-créer manuellement les clés de Registre propres
aux ressources pour SQL Server cluster
13/08/2021 • 3 minutes to read

Cet article montre comment créer manuellement les clés de Registre spécifiques aux ressources pour SQL
Server de cluster lorsque vous supprimez une ressource de l’administrateur de cluster.
Version du produit d’origine : Microsoft SQL Server
Numéro de la ko d’origine : 810056

Résumé
Les ressources de cluster SQL Server (SQL Server, agent SQL Server et recherche en texte intégral) contiennent
toutes des clés de Registre spécifiques aux ressources qui doivent être présentes pour mettre la ressource en
ligne. Si vous supprimez une ressource de l’administrateur de cluster, vous pouvez la créer à nouveau
manuellement. Les étapes peuvent uniquement être utilisées pour ajouter des ressources qui dépendent de SQL
Server. Elles ne peuvent pas être utilisées pour les ressources dont SQL Server dépend. Consultez la section Plus
d’informations de cet article pour ajouter manuellement la ressource. Ces étapes supposent que vous avez déjà
utilisé le programme d SQL Server de cluster pour installer correctement tous les fichiers et composants du
cluster. Cette procédure ne décrit pas tous les fichiers, modifications ou clés de Registre que le programme
d’installation effectue dans une nouvelle installation de cluster.

Plus d’informations
Chaque ressource que l’administrateur de cluster répertorie a une clé de Registre qui se trouve sous
HKEY_LOCAL_MACHINE (HKLM) HKLM\Cluster\Resources\GUID . Un GUID est créé lorsque vous ajoutez la ressource et
diffère d’un ordinateur à l’autre. Chaque clé contient une valeur Name qui contient le nom de ressource affiché
par l’administrateur de cluster. Sous chaque clé de ressource se trouve une sous-clé Parameters dans laquelle la
ressource peut stocker des informations de paramètre spécifiques à la ressource.
SQL Server, SQL Server agent de recherche et les informations de recherche en texte intégral dans cette sous-clé
Parameters. Si les informations sont manquantes, des erreurs telles que les suivantes sont consignées dans le
fichier journal du cluster lorsque vous essayez de mettre la ressource en ligne :

SQL Server : [sqsrvres] Impossible de lire la propriété « VirtualServerName ». Erreur : d.


Recherche Microsoft Recherche en texte intégral de l’instance de service : une erreur s’est produite lors de
l’opération en ligne pour l’exemple de recherche en texte intégral : 80070002 - Le système ne peut pas
trouver le fichier spécifié.

Re-créer manuellement une ressource


Pour créer manuellement une ressource dans l’administrateur de cluster, vous devez ajouter les valeurs de
Registre suivantes sous la clé qui représente la ressource :
SQL Server
Nom : InstanceName
Type : REG_SZ
Valeur : nom de l’instance de SQL Server que représente le serveur virtuel. Utilisez MSSQLSERVER pour utiliser
l’instance par défaut.
Nom : VirtualServerName
Type : REG_SZ
Valeur : nom du serveur virtuel que vous avez affecté au serveur
SQL Server Agent
Nom : InstanceName
Type : REG_SZ
Valeur : nom de l’instance de SQL Server que représente le serveur virtuel. Utilisez MSSQLSERVER pour utiliser
l’instance par défaut.
Nom : VirtualServerName
Type : REG_SZ
Valeur : nom du serveur virtuel affecté au serveur
Full-Text recherche
Nom : ApplicationName
Type : REG_SZ
Valeur : SQL Server$instance_nom, où instance_name est l’instance de SQL Server à utiliser. Pour utiliser une
instance par défaut, utilisez SQLServer.
Nom : ApplicationPath
Type : REG_SZ
Valeur : chemin d’accès complet au dossier qui contient les fichiers de données Fulltext. En règle générale, il se
trouve dans \MSSQL\FTDATA pour une instance par défaut et dans MSSQL$instancename\FTDATA pour une
instance nommée.
Ajouter les clés de Registre à l’aide de lCluster.exe de registre

IMPORTANT
Vous pouvez utiliser cette méthode uniquement dans une situation critique. Par exemple, vous pouvez utiliser cette
méthode lorsque vous ne pouvez pas démarrer l’instance de SQL Server. Toutefois, vous pouvez utiliser le programme
d’installation pour re-créer le serveur virtuel.

Vous pouvez utiliser l’utilitaire Cluster.exe pour ajouter les clés de Registre. Pour ce faire, vous devez exécuter
une commande semblable à la commande suivante à l’invite de commandes :

cluster res "ResourceName" /priv KeyName = KeyValue:STR

NOTE
Vous devez remplacer ResourceName par le nom de la ressource SQL Server appropriée, de la ressource agent SQL
Server ou de la ressource Full-Text search.
Vous devez remplacer KeyName par les noms de clé de Registre appropriés. Par exemple, InstanceName,
VirtualServerName sont des noms de clé de Registre.
Vous devez remplacer KeyValue par la valeur appropriée pour la clé. Pour la clé de Registre InstanceName, vous
pouvez affecter le nom de l’instance de SQL Server que le serveur virtuel représente pour la valeur de clé. Vous pouvez
utiliser MSSQLSERVER comme nom de l’instance pour l’instance par défaut.
Stratégie de support Microsoft pour les
configurations en cluster de SQL Server avec
Windows Server
14/08/2021 • 5 minutes to read

Cet article décrit la stratégie de support Microsoft pour les configurations en cluster de SQL Server avec
Windows Server.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 327518

Résumé
Cet article décrit la stratégie de support Microsoft pour SQL Server clustering deover. Les services de support
technique Microsoft (CSS) prend en charge le clustering de SQL Server de SQL Server basé sur les
fonctionnalités de clustering de clustering de Windows dans les produits suivants :
Windows Serveur 2008 Êdition Entreprise
Windows Server 2008 Datacenter Edition
Windows Server 2008 R2 Entreprise Edition
Windows Server 2008 R2 Datacenter Edition
Window Server 2012
Windows Server 2012 R2
Windows Server 2016 Standard et Datacenter Editions

NOTE
Windows Server 2012 et Windows Server 2012 R2 doivent passer en revue la stratégie de prise en charge de Microsoft
de la Windows clusters de serveurs de serveurs.

Les stratégies suivantes pour n’importe quelle version SQL Server prise en charge lorsqu’elle est installée en
tant qu’instance SQL Server cluster de SQL Server.

IMPORTANT
Le terme clusters de ser veurs signifie les ordinateurs qui exécutent le service de cluster Microsoft. La Windows Server
2003 fournit les types de services de clustering suivants :

Cluster de serveurs (cluster deover)


Équilibrage de la charge réseau
Serveur de cluster de calcul
Seules les solutions de cluster de serveurs peuvent être utilisées avec SQL Server pour la haute disponibilité en
cas de perte d’un nœud ou en cas de problème avec une instance de SQL Server. L’équilibrage de la charge
réseau peut être utilisé dans certains cas avec des installations en lecture seule SQL Server’installation. SQL
Server Les instances de cluster de failover nécessitent chacune un groupe unique. Cette exigence est vraie sur
les ressources de disque de cluster qui utilisent des lettres de lecteur propres au cluster et à chaque instance de
cluster de SQL Server de cluster de SQL Server. Chaque instance de cluster de SQL Server doit également avoir
au moins une adresse IP unique. Selon la version installée, plusieurs adresses IP uniques peuvent être possibles.
En outre, chaque instance de cluster de failover doit avoir à la fois des noms de serveur virtuel et d’instance
propres au domaine auquel le cluster appartient.
Solutions de cluster autres que Windows clustering de failover
Si vous regroupez des SQL Server avec un produit de clustering autre que le clustering Microsoft Server, votre
contact de support principal est le fournisseur de solutions de cluster tiers pour tout problème de support lié à
SQL Server. SQL Server été développé et testé à l’aide du clustering Microsoft Server. Les fournisseurs de
solutions de clustering tiers qui SQL Server installations de clustering doivent être votre principal contact pour
tout problème d’installation, de performance ou de comportement de cluster. CSS fournit une prise en charge
commerciale raisonnable pour les installations de clusters tiers de la même manière que pour une version
autonome de SQL Server.

SQL Server 2008 et SQL Server 2008 R2


Pour SQL Server éditions 2008 et SQL Server 2008 R2, consultez les rubriques suivantes de SQL Server Books
Online :
Pour plus d’informations sur le nombre de nodes pris en charge, voir la rubrique suivante : Éditions et
fonctionnalités SQL Server 2016

NOTE
Même s’il s’agit SQL Server 2008 R2 Books Online, le même contenu s’applique SQL Server 2008.

Pour plus d’informations sur les systèmes d’exploitation pris en charge pour le clustering de SQL Server
failover, reportez-vous à la section « Vérifier votre Paramètres de système d’exploitation » dans la
rubrique suivante : Avant d’installer le clustering deover
En résumé, les éditions SQL Server 2008 et SQL Server 2008 R2 peuvent prendre en charge jusqu’à 8
nodes sur Windows Server 2003 et 16 sur Windows Server 2008 et les versions ultérieures en ce qui a
trait aux installations AlwaysOn.
SQL Server 2012, SQL Server 2014 et SQL Server 2016
Reportez-vous aux articles MSDN suivants pour chacune des versions :
Clustering de basculement Windows Server (WSFC) avec SQL Server
Stratégie de failover pour les instances de cluster de failover
Windows Clustering de serveur avec SQL Server
Stratégie de failover pour les instances de cluster de failover
Windows Clustering de serveur avec SQL Server 2016
SQL Server 2016 pour les instances de cluster de failover

Lecteurs montés
L’utilisation de lecteurs montés n’est pas prise en charge sur un cluster qui inclut une installation Microsoft SQL
Server’installation. Pour plus d’informations, voir SQL Server prise en charge des volumes montés.

Volumes partagés de cluster (CSV)


Utilisez les volumes partagés de cluster pour SQL Server dans un cluster de SQL Server 2014 n’est pas pris en
charge.
Reportez-vous aux articles suivants sur l’utilisation de CSV avec SQL Server 2014 ou une version ultérieure de
SQL Server :
Déploiement de SQL Server 2014 avec des volumes partagés de cluster
Volumes partagés de cluster
Utiliser des volumes partagés de cluster dans un cluster de failover

Utilisation des serveurs contrôleurs de domaine dans Windows cluster


de serveurs de failover (WSFC)
SQL Server instances de cluster de failover ne sont pas pris en charge sur les nodes d’instance de cluster de
failover configurés en tant que contrôleurs de domaine.

Migration ou modification de SQL Server instances de cluster de


failover vers un nouveau domaine
SQL Server 2005 et versions ultérieures ne peuvent pas être migrées vers un nouveau domaine. Vous devrez
désinstaller et réinstaller les composants du cluster deover. Pour plus d’informations sur le déplacement d’un
cluster Windows Server d’un domaine à un autre, voir Déplacer un cluster Windows Server d’un domaine vers
un autre.
CRITIQUE - Avant la désinstallation, SQL Server doit être définie pour utiliser la sécurité en mode mixte ou les
nouveaux comptes de domaine ajoutés aux connexions SQL Server et le dossier DATA contenant les bases de
données système doit être renommé afin que ce dossier puisse être remplacé une fois réinstallé afin de réduire
le temps d’indispérable. Aucune suppression des SQL Server de support, SQL Server Native Client, des services
d’intégration ou des composants de station de travail ne doit être effectuée. Sauf si vous allez reconstruire le
nœud dans son intégralité.

WARNING
Si, pendant la désinstallation, vous obtenez des erreurs, il est probable que le nœud devra être reconstruit sinon
l’installation ne se réinstalle pas correctement.

Plus d’informations
Prise en charge de la virtualisation
Pour plus d’informations sur l’installation de clusters de SQL Server dans un environnement de virtualisation de
matériel, voir Stratégie de prise en charge pour les produits Microsoft SQL Server qui s’exécutent dans un
environnement de virtualisation de matériel.

Références
Pour plus d’informations, consultez la rubrique clustering de SQL Server livres en ligne ou sur le site web
MSDN.

S’applique à
SQL Server 2008 Developer
SQL Server 2008 Enterprise
SQL Server 2008 Standard
SQL Server 2008 R2 Datacenter
SQL Server 2008 R2 Developer
SQL Server 2008 R2 Enterprise
SQL Server 2012 Analysis Services
SQL Server 2012 Business Intelligence
SQL Server 2012 Developer
SQL Server 2012 Enterprise
SQL Server 2012 Standard
SQL Server 2012 Enterprise Core
SQL Server Développeur 2014
SQL Server 2014 Enterprise
SQL Server 2014 Enterprise Core
SQL Server 2014 Standard
SQL Server Développeur 2016
SQL Server 2016 Enterprise
SQL Server 2016 Enterprise Core
SQL Server 2016 Standard
Microsoft Windows des ressources de cluster de
SQL Server
14/08/2021 • 7 minutes to read

Cet article présente les dépendances de ressources par défaut dans SQL Server et les restrictions sur ces
dépendances.
Version du produit d’origine : SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL
Server 2008
Numéro de la ko d’origine : 835185

Résumé
Lorsque vous installez SQL Server sur un cluster en tant qu’instance de cluster de SQL Server de SQL Server, un
ensemble spécifique de ressources SQL Server qui ont des dépendances sur d’autres ressources dans le groupe
de clusters est créé.

IMPORTANT
Ne modifiez pas l’arborescence des dépendances par défaut à l’exception des modifications répertoriées dans cet article ou
des modifications répertoriées dans l’article suivant de la Base de connaissances Microsoft : prise en charge SQL Server
pour les dossiers montés

Exemple 1 - Dépendances d’instances SQL Server de cluster de SQL


Server par défaut

Dans ce diagramme, notez les remarques suivantes :


Le disque de cluster 1 n’a pas de dépendances requises.
Adresse IP : xxx.xxx.xxx.xxx aucune dépendance n’est requise.
Adresse IP : xxxx:xxxx:xx:xxxx:xxxx:xxxx:xxxx:xxxx aucune dépendance n’est requise.
Name: SOFTY dependencies are IP Address: xxxx:xxxx:xx:xxxx:xxxx:xxxx:xxxx:xxxx and IP Address:
xxx.xxx.xxx.xxx .
SQL Les dépendances requises du nom de réseau (SOFTY) sont l’adresse IP.
SQL Server dépendances sont le disque de cluster 1 et le nom : SOFTY.
SQL Server n’a pas de dépendances requises.
SQL Server Les dépendances de l’agent sont SQL Server.
SQL Server L’agent n’a pas de dépendances requises.

Exemple 2 : SQL Server instances de failover Analysis Services 2008


Dans ce diagramme, notez les remarques suivantes :
Les dépendances Analysis Services (LOCALINSTANCE) sont le disque de cluster 2 et le nom :
STANDALONE2008R.
Analysis Services (LOCALINSTANCE) n’a aucune dépendance requise.
Le disque de cluster 2 n’a pas de dépendances requises.
Adresse IP : xxx.xxx.xxx.xxx aucune dépendance n’est requise.
Adresse IP : xxxx:xxxx:xx:xxxx:xxxx:xxxx:xxxx:xxxx aucune dépendance n’est requise.
Name: STANDALONE2008R dependencies are IP Address: xxxx:xxxx:xx:xxxx:xxxx:xxxx:xxxx:xxxx and IP
Address: xxx.xxx.xxx.xxx .
SQL Les dépendances requises du nom de réseau (STANDALONE2008R) sont l’adresse IP.
SQL Server (LOCALINSTANCE) sont cluster Disk 2 et Name: STANDALONE2008R .
SQL Server (LOCALINSTANCE) n’a pas de dépendances requises.
SQL Server Les dépendances d’agent (LOCALINSTANCE) SQL Server (LOCALINSTANCE).
SQL Server L’agent (LOCALINSTANCE) n’a pas de dépendances requises.

Exemple 3 : SQL Server instance de bas de la charge 2008 avec un


point de montage

Dans ce diagramme, notez les remarques suivantes :


Le disque de cluster 1 n’a pas de dépendances requises.
Cluster Disk 4, Mountpoint dependencies are Cluster Disk 1.
Cluster Disk 4, Mountpoint n’a pas de dépendances requises.
Adresse IP : xxx:xxxx:c0:xxxx:xxxx:c597:8cb0:49f2 aucune dépendance n’est requise.
Name: SOFTY dependencies are IP Address: xxx:xxxx:c0:xxxx:xxxx:c597:8cb0:49f2 and IP Address:
xxx.xxx.xxx.88 .
SQL Les dépendances requises du nom de réseau (SOFTY) sont l’adresse IP.
SQL Server dépendances sont Name: SOFTY, Cluster Disk 4, Mountpoint et Cluster Disk 1.
SQL Server n’a pas de dépendances requises.

NOTE
La double dépendance vis-à-vis du point de montage consiste à s’assurer que les SQL Server ne peuvent pas démarrer et
charger des bases de données sans que les disques physiques ne sont disponibles. Cela permet d’éviter l’altération de la
base de données.

L’arborescence des dépendances par SQL Server a les implications suivantes :


La ressource SQL Server agent de gestion dépend de la SQL Server ressource.
La SQL Server dépend de la ressource SQL nom de réseau, des ressources de disque physiques et des
dossiers montés qui contiennent les fichiers de base de données.
La SQL de nom de réseau dépend de la ressource SQL’adresse IP.
La SQL’adresse IP de l’ordinateur et les ressources de disque physique ne dépendent d’aucune ressource

Plus d’informations
Pour plus d’informations sur l’ajout de dépendances à SQL Server ressource :
Comment ajouter des dépendances dans SQL Server 2008
Comment ajouter des dépendances dans SQL Server 2008 R2
Comment ajouter des dépendances dans SQL Server 2012
Comment ajouter des dépendances à un SQL Server 2016 ou une version ultérieure de SQL Server
Limitations et restrictions
Si vous ajoutez d’autres ressources au groupe SQL Server, ces ressources doivent toujours avoir leurs propres
ressources de nom de réseau SQL et leurs propres ressources d SQL’adresse IP. N’utilisez pas les ressources de
nom de SQL réseau existantes SQL ressources d’adresse IP pour d’autres SQL Server. Si SQL Server ressources
sont partagées avec d’autres ressources ou sont mal définies, vous pouvez être en face des problèmes suivants :
Des pannes qui ne sont pas prévues peuvent se produire.
Une altération de la base de données peut se produire.
Les installations du Service Pack risquent de ne pas réussir.
Il est possible SQL Server programme d’installation de l’ordinateur ne soit pas réussi. Si cela se produit, vous
ne pouvez pas installer d’instances supplémentaires de SQL Server ni effectuer de maintenance de routine.
SQL Server ne peuvent pas être en ligne.
Il se peut que les disques ne soient pas disponibles SQL Server’utilisation.
Considérations supplémentaires
FtP avec réplication SQL Server : pour les instances de SQL Server qui utilisent FTP avec la réplication SQL
Server, votre service FTP doit utiliser l’un des mêmes disques physiques que l’installation de SQL Server qui
est définie pour utiliser le service FTP.
SQL Server de ressources : si vous ajoutez une ressource à un groupe SQL Server et que vous avez une
dépendance sur la ressource SQL Server pour vous assurer que SQL Server est disponible, nous vous
recommandons d’ajouter une dépendance sur la ressource agent SQL Server au lieu d’ajouter une
dépendance à la ressource SQL Server. Pour vous assurer que l’ordinateur qui exécute SQL Server reste
hautement disponible, configurez la ressource de l’agent SQL Server afin qu’elle n’affecte pas le groupe SQL
Server en cas d’échec de la ressource agent SQL Server.
Partages de fichiers et ressources d’imprimante : une exception est le partage de fichiers utilisé par la SQL
Server FILESTREAM. Une ressource d’imprimante ne doit pas faire SQL Server groupe. Les ressources de
partage de fichiers ou d’imprimante nécessitent leur propre nom réseau et ressource IP sur un cluster de
Windows Server 2003. Les partages de fichiers et les ressources d’imprimante nécessitent également leur
propre nom réseau et ressource IP pour un point d’accès au client sur Windows Server 2008 et versions
ultérieures. Pour une instance de cluster de Windows Server 2008 ou une version ultérieure, utilisez
l’Assistant Création d’un dossier partagé pour spécifier un nom unique et d’autres paramètres pour le dossier
partagé.
Performances : une diminution des performances et une perte de service sur l’ordinateur qui exécute SQL
Server peut se produire lorsque les conditions suivantes sont vraies :
Une ressource de cluster de partage de fichiers qui n’utilise pas la fonctionnalité FILESTREAM est
installée sur la même ressource de disque physique sur laquelle SQL Server est installée.
Une ressource de cluster d’imprimantes est installée sur la même ressource de disque physique sur
laquelle SQL Server est installée.
Considérations sur MSDTC
Lisez les Recommandations MSDTCsur SQL Cluster de failover , qui doit être le point de départ pour toute
discussion sur les dépendances MSDTC, selon qu’elle est requise ou non.
Ce FAQ sur les Recommandations MSDTC (forum aux questions) consiste à répondre aux questions courantes et
aux meilleures pratiques avec MSDTC (Microsoft Distributed Transaction Coordinator) lorsqu’il est utilisé avec
les instances de clustered de SQL Server pour inclure les recommandations actuelles et les meilleures pratiques.
Lorsque vous ajoutez une ressource MSDTC à un groupe SQL Server, vous pouvez utiliser l’un des disques SQL
Server ou un autre disque. Toutefois, pour que la ressource fonctionne correctement et pour pouvoir utiliser
l’applet de la cmdlet Test-DTC PowerShell, vous devez utiliser le nom de réseau et l’adresse IP des serveurs SQL
et renommer votre ressource MSDTC en nom de serveur virtuel SQL Servers.
À partir de Windows Server 2012 et plus tard lors de la création d’un coordinateur de transactions distribuées à
l’aide du Gestionnaire de cluster, vous n’avez pas le choix dans le nom des ressources. Il s’agit toujours du
Nouveau coordinateur de transactions distribuées, et vous n’avez pas la possibilité de renommer la ressource
dans le Gestionnaire de cluster.
PowerShell en exemple, cette commande vous permet de renommer le Nouveau coordinateur de transactions
distribuées en nom de votre choix. Dans cet exemple, le nom est modifié en MSDTC.
Exemple (PowerShell) :

Get-ClusterResource "New Distributed Transaction Coordinator" | %{ $_.Name = MSDTC }

S’applique à
SQL Server 2008 Standard
SQL Server 2008 Enterprise
SQL Server Développeur 2008
SQL Server 2008 R2 Datacenter
SQL Server 2008 R2 Developer
SQL Server 2008 R2 Enterprise
SQL Server 2008 R2 Standard
SQL Server 2008 R2 Édition Standard for Small Business
SQL Server 2008 R2 Express avec services avancés
SQL Server 2008 R2 Workgroup
SQL Server Développeur 2012
SQL Server 2012 Enterprise
SQL Server 2012 Standard
SQL Server 2012 Enterprise Core
SQL Server 2014 Enterprise
SQL Server 2014 Enterprise Core
SQL Server 2014 Standard
SQL Server 2014 Business Intelligence
SQL Server 2016 Enterprise Core
SQL Server 2016 Enterprise
SQL Server Développeur 2016
SQL Server 2016 Standard
SQL Server 2017 Windows (toutes les éditions)
Configurer la sécurité pour la SQL Server des
journaux de bord
14/08/2021 • 9 minutes to read

Cet article explique comment configurer la sécurité pour la SQL Server des journaux de livraison et fournit des
informations sur le problème qui peut se produire lorsque vous configurez la sécurité pour la SQL Server des
journaux de livraison.
Version du produit d’origine : SQL Server
Numéro de la ko d’origine : 321247

Résumé
Cet article fournit des informations sur la configuration de la sécurité pour la livraison des journaux de livraison.
Il existe plusieurs problèmes à prendre en compte lors de la configuration de la sécurité pour la copie des
journaux de transaction SQL Server qui vont du compte de démarrage pour SQL Server pour partager les
autorisations pour le partage réseau où résident les sauvegardes du journal des transactions. Ces problèmes
sont décrits dans cet article.

Compte de domaine
Si vous avez placé des SQL Server dans un domaine, Microsoft vous recommande d’utiliser un compte de
domaine pour démarrer SQL Server services. Vous devez utiliser un compte de domaine si vous comptez
configurer SQL Server pour qu’il s’exécute en tant que serveur virtuel sous Windows clustering. Un compte de
domaine offre l’avantage d’une maintenance minimale en cas de modification de mot de passe. Toutefois, il se
peut que vous ne soyez pas en mesure de démarrer SQL sous un compte de domaine si SQL Server réside sur
un serveur qui se trouve dans un groupe de travail.

Compte réseau local


Vous pouvez utiliser SQL Server pour démarrer sous un compte réseau créé localement. Dans le cas où l’accès
réseau est requis par un processus SQL Server, ce qui est le cas si vous avez configuré SQL Server pour utiliser
la livraison des journaux de bord, vous pouvez utiliser la sécurité réseau pass-through. Avec la sécurité pass-
through, tous les ordinateurs accessibles par SQL Server doivent avoir le même compte réseau avec le même
mot de passe et les mêmes autorisations appropriées, configurés localement. En outre, lorsque le processus SQL
Server demande des ressources au deuxième ordinateur, la sécurité réseau traditionnelle est contourné si le
même compte (sous lequel le service SQL Server demande est démarré) existe avec le même mot de passe. Tant
que le compte sur le deuxième ordinateur est configuré avec suffisamment d’autorisations pour effectuer la
tâche demandée par l’SQL Server, la tâche réussit.

Compte système local


Vous pouvez également configurer SQL Server pour démarrer sous le compte système local. La modification du
mot de passe du compte LocalSystem peut entraîner l’échec de certains services essentiels à la stabilité du
système. Ce compte est local pour l’ordinateur où il réside, ce qui signifie que le contexte de sécurité utilisé par
SQL Server services est local. Comme indiqué dans la section Compte réseau local, vous ne pouvez pas utiliser
la sécurité de réseau pass-through lorsque vous démarrez SQL Server sous le compte LocalSystem, car les mots
de passe du compte LocalSystem sur différents ordinateurs sont différents. Le démarrage des SQL Server sous
ce compte lorsque l’accès aux ressources réseau est requis entraîne très probablement l’échec de l’exécution des
tâches.
Pour plus d’informations sur les droits minimaux requis pour qu’un compte réseau démarre et exécute
correctement les services SQL Server et SQL Server Agent, voir Setting up Windows Service Accounts.

Comprendre le modèle SQL Server sécurité de l’entreprise


Pour bien comprendre les implications en matière de sécurité, il est important de comprendre le modèle de
sécurité que Microsoft a implémenté SQL Server 2000. Lorsque vous créez une connexion, elle est ajoutée à la
syslogins table dans la base de données MASTER. Pour chaque base de données à qui cette connexion
nouvellement ajoutée est fournie, elle est ajoutée à la sysusers table de cette base de données. Le mappage
syslogins entre la table et la table se trouve sur le champ sysusers SID.

Si une base de données utilisateur est déplacée vers un autre serveur, les valeurs SID sont transférés à partir du
serveur précédent. La sécurité de la base de données est rompte lorsque les connexions sur le deuxième serveur
ne sont pas créées avec les mêmes valeurs SID ou si la sécurité n’est pas correctement configurée en raison de
l’inconvenance des valeurs SID.
Pour plus d’informations, voir Comment résoudre les problèmes d’autorisation lorsque vous déplacez une base
de données entre des serveurs en cours d’exécution SQL Server.

Exigences de sécurité
Partage de sauvegarde
Configurez le partage réseau configuré pour contenir les sauvegardes du journal des transactions afin
d’avoir des autorisations de lecture/modification pour le compte sous lequel les services SQL Server (sur
le serveur secondaire configuré pour la copie des journaux de transaction) démarrent.
Le partage réseau configuré pour contenir les sauvegardes du journal des transactions doit être
configuré pour avoir des autorisations de lecture/modification pour le compte sous lequel les services
SQL Server, sur le serveur secondaire configuré pour la copie des journaux de transaction, sont en cours
de démarrage. Ce partage est accessible par la tâche Copier sur le serveur secondaire pour copier les
sauvegardes du journal des transactions dans le dossier local sur le serveur secondaire respectif. Le
travail Charger charge ensuite ces sauvegardes à partir du dossier local.
Envoi de journaux de trafic entre domaines
Si les ordinateurs qui exécutent SQL Server sont placés dans un environnement multi-domaines,
Microsoft recommande de configurer des relations d’confiance entre tous les domaines impliqués dans la
livraison des journaux de bord. Toutefois, si vous ne pouvez pas établir d’relations d’confiance entre les
domaines, vous pouvez utiliser la sécurité de connexion réseau pour la livraison des journaux. Reportez-
vous à la section de cet article qui traite de l’option de démarrage du compte réseau LocalSystem pour
SQL Server services associés.
Sélection du mode d’authentification Connecter pour surveiller le serveur
Vous pouvez sélectionner l’authentification Windows ou l’authentification SQL (par les serveurs
principaux et secondaires) pour vous connecter pour surveiller le serveur et mettre à jour les tables de
surveillance. Vous pouvez le sélectionner lors de la configuration de la livraison des journaux ou une fois
que vous avez installé l’envoi des journaux et qu’il est fonctionnel. Par défaut, les SQL Server
l’authentification Windows utilisateur ; toutefois, si vous sélectionnez l’authentification SQL, une nouvelle
log_shipping_monitor_probe de connexion SQL est créée sur les serveurs principal, secondaire et
moniteur s’il n’en existe pas. Si vous sélectionnez SQL l’authentification à cet effet, configurez SQL Server
pour utiliser l’option SQL et Windows’authentification.
Configuration de la sécurité sur le serveur secondaire pour les bases
de données de veille
Si vous configurez la base de données secondaire en mode veille, vous pouvez accéder à cette base de données
en lecture seule. En restaurant la base de données secondaire dans ce mode, cela peut fournir un moyen
d’exécuter des rapports hors connexion, ce qui permet de décharger une partie du travail à partir du système de
production. Toutefois, pour que la base de données de veille puisse prendre en charge la fonctionnalité de
lecture seule, vous de devez peut-être appliquer les mêmes paramètres de sécurité sur le serveur secondaire.
Étant donné que la base de données est en état de veille, vous ne pouvez même pas apporter de modifications
aux fins de configuration de la sécurité. Dans ce cas, vous devez créer toutes les connexions SQL Server avec les
mêmes valeurs SID sur le serveur secondaire. Windows connexions conservent automatiquement les mêmes
SID, car le GUID Windows est globalement unique, même lors de l’utilisation de plusieurs domaines.
Pour plus d’informations sur la création de connexions SQL avec le même SID sur différents serveurs, voir
Comment accorder l’accès aux connexions SQLsur une base de données de veille lorsque l’invité est désactivé
dans SQL Server .

Configuration de la sécurité lors de la modification du rôle


La procédure de modification de rôle pour la livraison des journaux de bord implique la promotion d’un serveur
secondaire à prendre le relais en tant que serveur principal. Vous pouvez le faire avec ou sans que le serveur
principal soit en ligne. Dans le cadre du changement de rôle, jusqu’à quatre procédures stockées sont exécutées.
L’une de ces procédures stockées, permet de corriger les valeurs SID des connexions qui résident dans la base
de données de veille juste avant qu’elles ne soit disponibles pour être utilisés comme base de données
sp_resolve_logins principale.

Dans le cadre de cette procédure stockée, un fichier de la table de l’ancien serveur principal est .bcp chargé
dans une table syslogins temporaire. Chaque connexion présente dans cette table temporaire est ensuite
comparée à la table de la base de données MASTER du serveur secondaire et à la table de la syslogins
sysusers base de données secondaire. Pour chaque connexion dans la table temporaire qui possède une
connexion avec le même nom dans la table et le même SID que celui de la table de la base de données
secondaire, le SID est corrigé (dans la base de données secondaire) en utilisant pour correspondre à celui qui se
trouve dans la syslogins sysusers sp_change_users_login syslogins table.
La configuration de la sécurité à l’aide de cette procédure stockée nécessite les opérations suivantes :
SQL connexions doivent déjà être créées sur le serveur secondaire. Pour ce faire, utilisez la tâche DTS De
connexions de transfert expliquée dans la rubrique SQL Server Books Online : Comment configurer et
effectuer la modification du rôle d’expédition de journaux .
Vous devez fournir un .bcp fichier de la table à partir du serveur syslogins principal. Ce fichier doit
être à jour, car un fichier non à jour peut entraîner l’échec de la correction sp_resolve_logins des
connexions.
Vous devez respecter les trois conditions suivantes avant de pouvoir réellement corriger les sp_resolve_logins
connexions dans la base de données secondaire :
1. Le nom de connexion du fichier de la table doit correspondre au nom de la table à .bcp syslogins
partir du serveur syslogins principal.
2. La valeur SID doit correspondre entre le fichier de connexion et .bcp la table dans la base de données
sysusers secondaire.

3. La valeur SID de la base de données secondaire doit être différente de la valeur SID de la table de la base
de données syslogins MASTER sur le serveur secondaire.
Si vous créez des connexions SQL Server comme décrit au Q303722, il n’est pas besoin d’exécuter cette
procédure stockée, car toutes les connexions ont déjà été présentées avec la même valeur SID dans la table
(dans la base de données MASTER sur le serveur secondaire) et la table (dans la base de données syslogins
sysusers secondaire).

Foire aux questions


Question : La livraison des journaux propage-t-elle automatiquement les modifications liées
à la sécurité sur un ser veur secondaire ?
Réponse : oui. Étant donné que toutes les modifications apportées aux tables système sont des opérations
consignées, celles-ci sont propagées automatiquement sur le ou les serveurs secondaires.
Question : Pouvez-vous avoir deux connexions sur le ser veur secondaire avec le même SID ?
J’en ai besoin, car j’utilise le même ordinateur SQL Ser ver pour gérer plusieurs bases de
données de veille à par tir de plusieurs ser veurs.
Réponse : non. SQL Server de sécurité ne permet pas d’avoir deux connexions avec le même SID. S’il
existe un conflit sur le SID lors de l’utilisation de la livraison de journaux avec plusieurs serveurs, la seule
façon de corriger cela consiste à abandonner la connexion en conflit sur le serveur principal, puis à la
créer avec un SID qui n’existe pas sur le serveur secondaire.
Le moniteur de connexion lève de manière
incorrecte le numéro d’erreur 14420 au lieu de 14421
lorsque la base de données secondaire n’est plus
synchronisée
13/08/2021 • 2 minutes to read

Cet article vous aide à résoudre le problème où le moniteur Logshipping lève de manière incorrecte le numéro
d’erreur 14420 au lieu de 14421 lorsque la base de données secondaire n’est plus synchronisée.
Version du produit d’origine : Microsoft SQL Server
Numéro de la ko d’origine : 2006312

Symptômes
Prenons la configuration suivante d’un environnement de livraison de journaux de route :
Le serveur A héberge l’instance du serveur principal et la base de données.
Le serveur B héberge l’instance de serveur secondaire et la base de données.
Le serveur C héberge une instance de serveur de surveillance dans laquelle le travail Moniteur de livraison
de journaux est configuré pour utiliser un compte proxy usurpé pour les connexions au serveur A et au
serveur B.
Lorsque vous utilisez cette configuration, le travail du moniteur de livraison des journaux de livraison lève à tort
le message d’erreur 14420 au lieu de 14421 lorsque la base de données secondaire n’est pas synchronisée. La
description de ces messages d’erreur SQL Server 2005 et SQL Server 2008 est la suivante :

Erreur : 14420, Gravité : 16, État : 1


La base de données primaire de copie des journaux de données %s.%s a un seuil de sauvegarde de %d
minutes et n’a pas effectué d’opération de journal de sauvegarde pendant %d minutes. Vérifiez les
informations du journal de l’agent et de l’écran de connexion.

Erreur : 14421, Gravité : 16, État : 1


La base de données secondaire de livraison de journaux %s.%s a un seuil de restauration de %d minutes et
n’est plus synchronisée. Aucune restauration n’a été effectuée pendant %d minutes. La latence restaurée est
de %d minutes. Vérifiez les informations du journal de l’agent et de l’écran de connexion.

Le message d’alerte 14221 indique que la différence entre l’heure actuelle (UTC) et la valeur de la table sur le
serveur moniteur est supérieure à la valeur définie pour le seuil d’alerte de restauration, tandis que le
last_restored_date_utc log_shipping_monitor_secondary message d’alerte 14220 indique que la différence
entre l’heure UTC et la valeur de la table sur le serveur moniteur est supérieure à la valeur définie pour le seuil
d’alerte de last_backup_date_utc log_shipping_monitor_primary sauvegarde.

Cause
Le problème survient en raison d’un problème dans l’interface utilisateur de la livraison des journaux de route.
Lorsque vous créez le travail de moniteur pour le secondaire, 14220 est transmis au lieu de 14221.
Résolution
Pour résoudre le problème, corrigez la valeur du paramètre pour la base de données secondaire en exécutant
l’instruction suivante sur le serveur @threshold_alert moniteur (serveur C) :

use master
go
sp_change_log_shipping_secondary_database @secondary_database = 'dbname', @threshold_alert = 14421

Plus d’informations
Description du message d’erreur 14420 et du message d’erreur 14421 qui se produisent lorsque vous utilisez la
livraison des journaux de SQL Server
Comprendre la .NET Framework requise pour les
différentes versions de SQL Server
13/08/2021 • 5 minutes to read

Cet article décrit la .NET Framework requise pour différentes versions SQL à partir de SQL Server 2005.
Version du produit d’origine : SQL Server 2019, SQL Server 2017, SQL Server 2014, SQL Server 2012, SQL
Server 2008, SQL Server 2005
Numéro de la ko d’origine : 2027770

Résumé
Différentes versions de Microsoft SQL Server ont des versions .NET Framework différentes en tant que
conditions préalables à l’installation, et la procédure d’installation du .NET Framework peut être différente sur
différents systèmes d’exploitation. Pour les versions plus récentes SQL Server, ces informations sont couvertes
dans le cadre des rubriques relatives à la configuration matérielle et logicielle requise, comme répertorié ci-
dessous :
Configuration matérielle et logicielle requise pour SQL Server 2019
Configuration matérielle et logicielle requise pour SQL Server 2017
Configuration matérielle et logicielle requise pour SQL Server 2016
Configuration matérielle et logicielle requise pour SQL Server 2014
Configuration matérielle et logicielle requise pour SQL Server 2012
Pour les versions SQL Server 2008R2 et versions antérieures, la .NET Framework requise varie en fonction de
l’édition de SQL Server que vous installez. Cet article décrit ces conditions requises et vous fournit les
informations nécessaires pour pouvoir installer les .NET Framework requises.
1. Utilisez Table 1 les conditions préalables de Microsoft DotNET Framework pour SQL Server pour vérifier la
.NET Framework requise pour la version et l’édition que vous installez.
2. Vérifiez si le .NET Framework est déjà inclus dans le système d’exploitation ou si vous devez le télécharger
séparément des téléchargements Microsoft répertoriés dans Table 2 la section .NET Frameworks for SQL
Server sur différents systèmes d’exploitation et la section liens de téléchargement.
3. Utilisez la dernière colonne pour vérifier si des procédures spéciales sont requises pour installer
l’infrastructure Table 2 sur le système d’exploitation cible. Si l’entrée est Oui, recherchez les procédures
nécessaires dans les sections ultérieures de ce document. Si l’entrée est Non, vous pouvez télécharger
l’infrastructure correspondante à partir du lien correspondant et Table 2 l’installer sur le système
d’exploitation cible.

Microsoft .NET Framework conditions préalables pour SQL Server


2008 R2 et les versions antérieures de SQL Server
Le tableau suivant récapitule les exigences de version .NET Framework pour les différentes versions et éditions
de SQL Server et explique si le produit est inclus dans le support d’installation et s’il est installé dans le cadre de
l’installation.
Tableau 1 :
. VERSIO N DE N ET IN STA L L É DA N S L E C A DRE
SQ L VERSIO N O U ÉDIT IO N F RA M EW O RK IN C L US AVEC L E P RO DUIT ? DE L’IN STA L L AT IO N ?

SQL Server 2005 (toutes les 2.0 Oui Non


éditions)

SQL Server 2008 express 2.0 SP2 Non Non


(cœur)

SQL Server 2008 sur 2.0 SP2 Oui Oui


Windows Server 2003 (64
bits), IA-64

SQL Server 2008 (toutes les 3.5 SP1 Oui Oui


autres éditions)

Pour SQL Server 2008 et pour les installations de cluster de SQL Server 2008 R2 et Express Edition, le
programme d’installation n’installe pas .NET Framework 3.5 Service Pack 1 sur les systèmes qui exécutent
Windows Server 2008 R2 Edition. Pour plus d’informations sur l’activer .NET Framework 3.5 SP1 sur ces
systèmes, voir la section Comment installer ou activer .NET Framework 3.5 SP1 sur Windows.

.NET Frameworks for SQL Server on Windows Server 2008 R2 and


earlier operating systems
Le tableau suivant indique si le .NET Framework requis pour SQL Edition et la version que vous installez est
inclus dans le système d’exploitation cible. Le tableau indique également si des étapes supplémentaires sont
nécessaires pour installer ou activer l’infrastructure sur le système d’exploitation correspondant et fournit un
lien de téléchargement pour les fichiers redistribuables .NET Framework correspondants.
Tableau 2 :

DES
P RO C ÉDURES
SP ÉC IA L ES
SO N T - EL L ES
PA R DÉFA UT REQ UISES
IN C L US AVEC AVEC L ES REDIST IST R P O UR
L E SY ST ÈM E SY ST ÈM ES IN STA L L É OU IN STA L L ER L E
VERSIO N DE N UM ÉRO DE D’EXP LO ITAT I D’EXP LO ITAT I AVEC VISUA L T ÉL ÉC H A RGE REDIST IST ISM
. N ET VERSIO N ON ON ST UDIO . N ET R L E L IEN E?

2.0 2.0.50727.42 Windows Serv Aucun Microsoft 2.0 Non


er 2003 R2 Visual
Studio 2005

3.5 SP1 3.5.30729.1 Windows Serv Aucun Aucun 3.5 SP1 Oui, pour
er 2008 R2 Windows
Server 2008
R2

Comment installer ou activer .NET Framework 3.5 SP1 sur Windows


Pour installer .NET Framework sur Windows 8 et les versions ultérieures du système d’exploitation, voir Installer
le .NET Framework 3.5sur Windows 10, Windows 8.1 et Windows 8 .
Dans Windows Server 2008 R2, la .NET Framework est une fonctionnalité et son installation est différente des
versions précédentes du système d Windows d’exploitation. La procédure suivante explique comment vérifier
que le .NET Framework 3.5.1 est installé. La procédure explique également comment déterminer si le .NET
Framework n’est pas installé et comment vous pouvez l’ajouter dans ces environnements.

Comment déterminer si le .NET Framework 3.5 SP1 est installé


Pour déterminer si le .NET Framework 3.5.1 est installé sur Windows Server 2008 R2, suivez les étapes suivantes
:
1. Sélectionnez Démarrer, Sélectionnez Outils d’administration, puis Sélectionnez Gestionnaire de
ser veur.
2. Sélectionnez les fonctionnalités pour afficher toutes les fonctionnalités installées dans le volet sur le côté
droit.
3. Vérifiez que .NET Framework 3.5.1 figure dans la liste des fonctionnalités installées.
Si .NET Framework 3.5.1 n’est pas répertorié comme fonctionnalité installée, utilisez l’une des méthodes
suivantes pour l’installer.
Méthode 1 : utiliser le Gestionnaire de serveur
1. Dans le Gestionnaire de ser veur, sélectionnez Ajouter des fonctionnalités pour afficher la liste des
fonctionnalités possibles.
2. Dans l’interface Sélectionner des fonctionnalités, développez .NET Framework l’entrée Fonctionnalités
3.5.1.
3. Après avoir développé .NET Framework fonctionnalités 3.5.1, vous voyez deux cases à cocher. Une case à
cocher est .NET Framework 3.5.1 et l’autre est pour l’activation WCF. Cliquez pour cocher la case en
regard .NET Framework 3.5.1, puis sélectionnez Suivant .

NOTE
Si vous ne développez pas l.NET Framework 3.5.1 Features et vérifiez-le, l’Assistant Ajout de fonctionnalités
suivant est démarré :

Si l’Assistant démarre, sélectionnez Annuler, développez .NET Framework Fonctionnalités 3.5.1, puis
cochez la case .NET Framework 3.5.1.
4. Vous ne pouvez pas installer .NET Framework 3.5.1, sauf si les services et fonctionnalités de rôle
requis sont également installés.
5. Dans la sélection Confirmer l’installation, examinez les sélections, puis sélectionnez Installer.
6. Laissez le processus d’installation se terminer, puis sélectionnez Fermer.
Méthode 2 : Utiliser Windows PowerShell
1. Cliquez sur Démarrer, sélectionnez Tous les programmes, puis sélectionnez Accessoires.
2. Développez Windows PowerShell, cliquez avec le bouton Windows PowerShell, puis sélectionnez
Exécuter en tant qu’administrateur. sélectionnez Oui dans la zone Contrôle de compte d’utilisateur.
3. À l’invite de commandes PowerShell, tapez les commandes suivantes, puis appuyez sur Entrée après chaque
commande :

Import-Module ServerManager
Add-WindowsFeature as-net-framework

NOTE
Pour plus d’informations, voir la capture d’écran :

Références
Log WebLog de Stebner
.NET Framework Prise en charge Windows Server 2008
Tentative d’effectuer une erreur d’opération non
autorisée lorsque vous avez installé ou mis à jour
SQL Server instances
13/08/2021 • 3 minutes to read

Cet article vous aide à résoudre le problème d’échec de la configuration ou de la mise à jour SQL Server
instances de données et renvoie un message d’erreur.
S’applique à : SQL Server 2019 sur Windows, SQL Server 2017 sur Windows, SQL Server 2016, SQL Server
2014, SQL Server 2012
Numéro de la ko d’origine : 4594205

Symptômes
Prenons l’exemple du scénario suivant :
Vous avez un ordinateur qui exécute Windows 10, version 20H2 et le navigateur Microsoft Edge de
n’importe quelle version de la version 84.0.522.52 à 86.0.622.55.
Vous essayez de mettre à jour une instance existante de Microsoft SQL Server 2012 à 2019, ou d’installer
une nouvelle instance SQL Server avec une mise à jour (slipstream).
Dans ce scénario, un échec se produit pendant le processus de mise à jour et vous recevez le message d’erreur
suivant :

Tentative d’effectuer une opération non autorisée.

En outre, une entrée est enregistrée dans le fichier journal d’installation de SQL Server, Detail.txt, qui indique que
l’échec s’est produit lors de la tentative d’ouverture de la sous-clé de Registre Microsoft Edge .

Cause
Le SQL Server du programme d’installation ne peut pas émaner la sous-clé de Registre suivante :
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge

Résolution
Pour résoudre ce problème, utilisez l’une des méthodes suivantes, selon le cas :
Méthode 1
Si vous exécutez Windows 10 64 bits, version 20H2 (19042.xxx), vous devez installer la version
86.0.622.56 du navigateur Edge ou une version ultérieure qui inclut le correctif pour ce problème. Pour
voir le numéro de version dans Edge, sélectionnez Paramètres > à propos de Edge.
Pour mettre à jour manuellement le navigateur Edge, suivez les étapes suivantes :
1. Démarrer Microsoft Edge .
2. Sélectionnez le Paramètres (ellipses) dans le coin supérieur droit.
3. Dans le menu Paramètres, sélectionnez Aide et commentaires > sur Microsoft Edge .

NOTE
Edge recherche automatiquement les mises à jour.

4. Pour terminer l’installation de la mise à jour Edge, sélectionnez Redémarrer.


Méthode 2

IMPORTANT
Suivez attentivement les étapes de cette méthode. Des problèmes graves peuvent se produire si vous modifiez le
Registre de façon incorrecte. Avant de modifier le Registre, sauvegardez-le pour restauration en cas de problèmes.

Ajoutez l’autorisation Contrôle total au compte Administrateurs. Pour cela, procédez comme suit :
1. Démarrez l’Éditeur du Registre. Pour ce faire, sélectionnez Démarrer, tapez regedit, puis
sélectionnez Éditeur du Registre dans les résultats de la recherche.
2. Dans l’Éditeur du Registre, cliquez avec le bouton droit sur
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge la sous-
clé, puis sélectionnez Autorisations.
3. Dans la fenêtre Autorisations qui s’ouvre, sélectionnez Avancé.
4. En haut de la fenêtre Sécurité avancée Paramètres, sélectionnez Modifier en dessous du
propriétaire répertorié.
5. Dans la fenêtre Sélectionner un utilisateur, un ordinateur, un compte de service ou un groupe,
tapez le nom de votre compte d’utilisateur Windows (ou votre adresse de messagerie si vous avez
un compte Microsoft) dans la zone Entrer le nom de l’objet à sélectionner, puis sélectionnez Vérifier
les noms pour valider le nom du compte.
6. Sélectionnez deux fois OK .
7. Dans la fenêtre Autorisations, sélectionnez le groupe Utilisateurs, puis cochez la case
Autoriser les autorisations Contrôle total.

NOTE
Pour accorder des autorisations uniquement à votre compte d’utilisateur au lieu du groupe Utilisateurs,
sélectionnez Ajouter, suivez les étapes de l’Assistant Ajout, puis accordez les autorisations Contrôle total à
ce compte.

8. Sélectionnez OK pour revenir à la fenêtre principale de l’Éditeur du Registre.

Plus d’informations
SQL Server Le programme d’installation s’attend à ce que les administrateurs ont des autorisations d’accès en
lecture/écriture sur toutes les sous-clés sous , où le programme d’installation recherche les mises à jour SQL
Server HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall installées. Toutefois, dans
certains cas, le système fournit aux administrateurs uniquement des autorisations de lecture sur les sous-clés,
comme c’est le cas, par exemple, sur Microsoft Edge.
Une prochaine SQL Server mise à jour de maintenance modifiera l’exigence d’accès afin que le programme
d’installation n’a besoin que d’autorisations de lecture sur toutes les sous-clés sous
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall .
Description du dossier Cache de mise à jour dans
SQL Server
15/08/2021 • 2 minutes to read

Cet article explique pourquoi ce dossier est créé et à quoi il est utilisé.
Version du produit d’origine : SQL Server 2008, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL
Server 2017 sur Windows (toutes les éditions)
Numéro de la ko d’origine : 3196535

Résumé
Le dossier Cache de mise à jour Microsoft SQL Server est trouvé à l’emplacement :
C:\Program Files\Microsoft SQL Server\<m.n>\Setup Bootstrap\Update Cache .

Cet article fournit des informations pour vous aider à comprendre pourquoi ce dossier est créé et à quoi il est
utilisé.

Plus d’informations
Quand ce dossier est-il créé et à quoi ser t-il ?
Lorsque vous installez une mise à jour SQL Server (mise à jour cumulative, mise à jour critique ou
Service Pack), le support d’installation de mise à jour est mis en cache dans SQL Server cache de mise à
jour. Les entrées sont créées à partir du contenu du dossier multimédia mis en cache et sont utilisées
pour désinstaller (si nécessaire) la mise à jour la plus récente qui a été a