La fonction FILESTREAM de SQL Server vous permet de stocker les Binary Large Objects (BLOB) avec une colonne varbinary (max) de manière externe dans le système de fichiers au lieu de les stocker dans une base de données. Toutefois, cette fonction n’est pas activée par défaut. Vous devez l’activer à l’aide de SQL Server Management Studio (SSMS) et de SQL Server Configuration Manager. Si cette fonction est activée, la base de données est sauvegardée dans les groupes de fichiers FILESTREAM. Une fois qu’elle est stockée dans une colonne FILESTREAM, vous pouvez accéder aux fichiers à l’aide de transactions T-SQL.
Parfois, la modification ou la suppression de fichiers dans le dossier FILESTREAM ou l’enregistrement d’un fichier dans la base de données du serveur SQL peut entraîner des incohérences ou une corruption de la base de données du serveur SQL. Si le groupe de fichiers FILESTREAM est corrompu, votre base de données entrera dans l’état ‘Récupération de données en attente’. Dans ce blog, nous allons discuter des causes qui peuvent conduire à la corruption de la base de données SQL Server FILESTREAM et de la façon dont vous pouvez corriger la corruption et récupérer la base de données.
Causes de la corruption d’une base de données FILESTREAM dans SQL Server
La base de données FILESTREAM peut être corrompue pour diverses raisons. Les raisons les plus courantes sont les suivantes
- FILESTREAM enregistre les références des fichiers et les métadonnées dans la base de données. Si la base de données SQL elle-même est endommagée en raison d’erreurs matérielles, de problèmes de disque dur, etc., les références liant le fichier à la base de données deviendront également incohérentes.
- Les données réelles de FILESTREAM sont stockées dans le système de fichiers. Ces données peuvent être corrompues en raison de secteurs défectueux, d’erreurs de disque dur et d’autres problèmes.
- Si vous supprimez ou modifiez directement les fichiers du dossier du système de fichiers dans les conteneurs de données, des incohérences peuvent se produire entre le système de fichiers et le serveur SQL, ce qui entraînera la corruption des données FILESTREAM.
Vous pouvez utiliser la commande DBCC CHECKDB pour détecter la corruption ou les problèmes de cohérence physique et logique dans la base de données SQL compatible avec FILESTREAM. Elle vérifie également la cohérence au niveau des liens entre les métadonnées de la table et les fichiers et répertoires du système de fichiers FILESTREAM. Vous trouverez ici comment utiliser la commande DBCC CHECKDB pour vérifier la corruption d’une base de données compatible avec FILESTREAM :
DBCC CHECKDB 'nom_de_la_banque_de_données';
La commande DBCC CHECKDB peut signaler des erreurs telles que 7903, 7904, 7905, 7907, etc. Ces erreurs indiquent une corruption, des incohérences ou des problèmes d’intégrité causés par la manipulation du dossier FILESTREAM du serveur SQL.
Méthodes de réparation d’une corruption dans une base de données SQL Server FILESTREAM
Si la base de données SQL activée par FILESTREAM est endommagée ou inaccessible, vous pouvez utiliser les méthodes suivantes.
Méthode 1 : Restauration à partir d’une sauvegarde d’un groupe de fichiers
Les données du flux de fichiers sont stockées dans le groupe de fichiers FILESTREAM. Il contient les répertoires du système de fichiers, connus sous le nom de conteneurs de données. Si vous disposez d’une sauvegarde des fichiers et du groupe de fichiers dans SQL Server, vous pouvez facilement remettre la base de données à partir de la sauvegarde. Avant cela, assurez-vous que le fichier de sauvegarde contient les données FILESTREAM en utilisant la commande RESTORE FILELISTONLY. Cette commande affiche tous les fichiers de la sauvegarde.
Voici les étapes à suivre pour remettre la base de données à partir de la sauvegarde dans SQL Server :
Remarque : lisez d’abord les restrictions et limitations relatives à la restauration des fichiers et des groupes de fichiers. Assurez-vous également que vous disposez des autorisations de RESTORE.
- Ouvrez SSMS et établissez une connexion à l’instance correspondante du moteur de base de données SQL Server dans l'”Explorateur d’objets”.
- Développez la structure du serveur en cliquant sur le nom du serveur.
- Développez ensuite l’onglet “Bases de données“. Sélectionnez une base de données utilisateur ou développez l’onglet “Base de données système”.
- Cliquez sur Base de données système, cliquez avec le bouton droit de la souris sur la base de données, puis cliquez sur Tâches > Remettre en état > Fichiers et groupes de fichiers.
- Ensuite, indiquez la source et le bureau de stockage des jeux de sauvegarde en sélectionnant l’option “À partir de la base de données ou du périphérique”.
- Dans le tableau “Sélectionner les jeux de sauvegarde à restaurer”, sélectionnez les sauvegardes que vous souhaitez remettre. La grille affiche toutes les sauvegardes disponibles au bureau sélectionné.
- Dans la boîte de dialogue “Remettre les fichiers et les groupes de fichiers“, cliquez sur la page “Options” sous “Sélectionner la page” pour sélectionner les options avancées.
- Sélectionnez l’une des options de la fenêtre Options de remise en état :
- Remettre en tant que groupe de fichiers
- Remplacer la base de données existante
- Invite avant de remettre chaque sauvegarde en état
- Restreindre l’accès à la base de données remise en état
- Cliquez sur OK.
Cette opération permet de remettre la base de données en état. Vous pouvez localiser le bureau physique du groupe FILESTREAM à l’aide de la commande suivante :
SQL
SELECT nom, nom_physique, description de l'état, description du type
FROM sys.database_files
WHERE type_desc = 'FILESTREAM'
Vous pouvez également utiliser des commandes Transact-SQL pour restaurer les fichiers et les de fichiers groupes.
Méthode 2 : Utilisez la commande DBCC CHECKDB
Si la sauvegarde est obsolète ou indisponible, vous pouvez réparer la base de données à l’aide de la commande DBCC CHECKDB avec l’option de réparation REPAIR_ALLOW_DATA_LOSS. Voici la marche à suivre :
- Commencez par mettre la base de données en mode SINGLE_USER à l’aide de la commande suivante :
ALTER DATABASE Dbtesting SET SINGLE_USERCopy
- Ensuite, réparez la base de données à l’aide de la commande DBCC CHECKDB avec REPAIR_ALLOW_DATA_LOSS comme indiqué ci-dessous :
DBCC CHECKDB (N 'Dbtesting', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS ;
Code GOCopy
- Mettez maintenant la base de données en mode MULTI_USER en exécutant la commande suivante :
ALTER DATABASE Dbtesting SET MULTI_USERCopy
Bien que la commande DBCC CHECKDB ci-dessus puisse résoudre les problèmes de corruption dans une base de données FILESTREAM, elle présente certaines limites. Elle peut laisser votre base de données dans un état logiquement incohérent. Lorsque vous réparez des erreurs complexes, vous devez exécuter la commande plusieurs fois, ce qui prend du temps. En plus, des lignes ou des pages peuvent être libérées lors de la réparation de la base de données, ce qui entraîne une perte de données.
Méthode 3 : utiliser un programme professionnel de réparation SQL
Pour réparer le fichier de base de données avec précision et intégrité, vous pouvez utiliser Stellar Repair for MS SQL – un outil de réparation SQL spécialisé qui peut réparer les fichiers MDF rapidement, même s’ils sont gravement endommagés. Après la réparation, l’outil enregistre les données récupérées dans un nouveau fichier de base de données MS SQL.
L’outil aide à réparer toutes les erreurs de corruption dans la base de données SQL signalées par la commande DBCC CHECKDB. Il dispose d’une interface utilisateur intuitive qui permet à l’utilisateur d’effectuer le processus de réparation facilement.
Caractéristiques importantes :
- Réparation des fichiers de base de données MDF et NDF sans perte de données
- Remet en état tous les composants de la base de données, y compris les tables, les clés, les index, les déclencheurs et les procédures stockées supprimés.
- Soutien des types de données SQL Server FILESTREAM, des types de données XML, des colonnes SQL Server Sparse, des indices XML et des propriétés SQL Server Columns Set.
- Remet en état les tables SQL avec la compression PAGE et ROW
- Fournit un aperçu des objets de la base de données récupérables avant l’enregistrement.
- Prise en charge de la récupération sélective des objets de la base de données
- Enregistre la base de données réparée dans une nouvelle base de données ou une base de données active et dans des formats tels que CSV, HTML et XLS.
- Prise en charge de la base de données SQL Server 2022, 2019 et versions inférieures.
- Compatible avec les systèmes d’exploitation Windows et Linux
À la fin
Les corruptions dans les bases de données FILESTREAM peuvent se produire pour de nombreuses raisons. Nous avons décrit ci-dessus comment vous pouvez réparer une base de données FILESTREAM endommagée dans SQL Server. Vous pouvez facilement remettre la base de données en état à partir d’une sauvegarde. Toutefois, si vous n’avez pas accès à votre sauvegarde, vous pouvez utiliser la commande DBCC CHECKDB pour réparer la base de données. Cependant, cette méthode nécessite du temps et des efforts et ne garantit pas une récupération complète des données. Pour une récupération des données en douceur, vous devez donc utiliser un programme de réparation SQL professionnel tel que Stellar®Repair for MS SQL
Was this article helpful?