Symptômes
Au démarrage de Microsoft SQL Server 2016 et 2017, si un utilisateur tente de se connecter à une base de données avant le démarrage, la session utilisateur peut entraîner le démarrage automatique de la base de données. Dans ce cas, si la base de données contient une table FileTable et que FILESTREAM non_transacted_access est activé, le répertoire FileTable au niveau de la base de données est inaccessible après le démarrage de la base de données. Si vous essayez d’accéder au dossier à l’aide de l’Explorateur de fichiers, cela peut indiquer qu’il n’est pas disponible. Lorsque vous exécutez une commande « dir » à partir de l’invite de commandes, elle renvoie « Le fichier spécifié est introuvable ».
En outre, vous pouvez voir les erreurs suivantes dans le journal des erreurs, indiquant qu’une session utilisateur a déclenché le démarrage automatique de la base de données :
DateTime Erreur d’ouverture de session : 18456, Gravité : 14, État : 38.
DateTime Échec de la connexion pour l’utilisateur « UserName ». Raison : Échec de l’ouverture de la base de données explicitement spécifiée « DatabaseName ». [CLIENT : IPNumber]
État
Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».
Résolution
Ce problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server :
À propos des mises à jour cumulatives pour SQL Server :
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
- Dernière mise à jour cumulative pour SQL Server 2017
- Dernière mise à jour cumulative pour SQL Server 2016
Solution de contournement
La solution de contournement à ce problème consiste à désactiver et à réactiver la non_transacted_access FILESTREAM de la base de données.
ALTER DATABASE [DatabaseName] DÉFINIR SINGLE_USER AVEC LA RESTAURATION IMMÉDIATE
ALTER DATABASE [DatabaseName] SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF )
ALTER DATABASE [DatabaseName] SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL )
ALTER DATABASE [DatabaseName] DÉFINIR MULTI_USER AVEC ROLLBACK IMMEDIATE
Références
En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.