La corruption des bases de
données SQL survient généralement avec plusieurs problèmes. Ces problèmes affectent
la disponibilité et la performance des bases de données à grande échelle. Le
niveau de corruption dans la base de données décide des chances réelles de
récupération et de la façon dont vous pouvez résoudre efficacement le problème
en évitant tout risque de perte potentielle de données.
Dans un cas particulier, il se peut que vous rencontriez un échec de connexion au serveur SQL ou que vous soyez dans l’impossibilité de restaurer les fichiers de la base de données MS SQL. Un autre problème pourrait être que vous ne pouvez pas créer de base de données ‘tempdb’ ou que chaque fois que vous essayez de joindre votre base de données, vous êtes incapable de le faire.
Ces problèmes sont associés à l’erreur SQL 5171 qui indique :
“database.mdf is not a primary database file. (Microsoft SQL Server, Error: 5171)”
Cette erreur se produit
principalement en raison d’entrées de registre invalides, de problèmes
d’alimentation, d’infections de virus ou de pilotes endommagés. Les scénarios
discutés ci-dessous sont très susceptibles de causer l’erreur SQL 5171.
Si vous n’avez pas de sauvegarde, ou si la sauvegarde est corrompue, vous devrez peut-être suivre différentes étapes pour restaurer vos données.
Nous allons expliquer 2 scénarios de corruption différents dans cet article.
Cas I : La corruption des bases de données dans les bases de données en miroir
Imaginez que vous ayez des
bases de données en miroir.
Supposons que le serveur MS SQL 2016 soit installé sur votre système. Lors de l’utilisation d’une base de données en miroir, vous essayez de configurer votre base de données en ligne en exécutant la commande suivante et recevez l’erreur 5171.
ALTER DATABASE mydb SET online
Dans ce cas, vous pouvez utiliser la procédure ci-dessous pour résoudre le problème:
- Définir le principe de la base de données
- Modifiez les informations du fichier à l’aide de la commande ‘ALTER DATABASE MODIFY FILE’.
- Arrêter l’instance en cours d’exécution du serveur MS SQL
- Copiez vos fichiers de base de
données MDF et LDF dans un autre répertoire. Vous pouvez vérifier le chemin des
fichiers MDF et LDF en cliquant avec le bouton droit de la souris sur la base
de données et en sélectionnant les propriétés dans SSMS dans la page fichiers :
- Redémarrez le serveur SQL, puis joignez les fichiers de la base de données.
Malheureusement, vous perdrez sûrement la mise en miroir de la base de données après le processus. Vous devrez à nouveau configurer la mise en miroir de la base de données.
Cas II
Supposons maintenant que vous utilisez le serveur MS SQL 2014. Maintenant, vous détachez votre base de données et passez au serveur MS SQL 2016. Une fois l’installation terminée, vous essayez de joindre à nouveau la base de données en ajoutant les fichiers de données primaires et secondaires. Dans ce processus, vous pouvez rencontrer le message d’erreur ci-dessous :
“M:\folder\file_1.mdf is not a primary database file. (Microsoft SQL Server, Error: 5171)”
Pour résoudre le problème ci-dessus, vous pouvez utiliser ‘sp_attach_db’ pour joindre la base de données.
sp_attach_db @dbname = N'mydb',
@filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\mydb_Data.mdf',
@filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\ mydb_log.ldf';
Vous pouvez également utiliser l’interface utilisateur pour joindre une base de données :
Cependant, cette méthode ne
fonctionnera pas si vous n’utilisez pas ‘sp_detach_db’ pour détacher la même
base de données.
La phrase T-SQL suivante montre comment utiliser la procédure système sp_detach_db :
EXEC sp_detach_db 'mydb', 'true';
Cette procédure détache la
base de données mydb.
Une autre possibilité est
d’utiliser la commande ‘CREATE DATABASE’ avec la clause ‘FOR ATTACH’.
La phrase utilisée sera similaire à celle-ci :
CREATE DATABASE N'mydb'
ON (FILENAME = N'C:\MySQLServer\AdventureWorks_Data.mdf'),
(FILENAME = N'C:\MySQLServer\AdventureWorks_Log.ldf')
FOR ATTACH;
Nous créons une base de
données appelée mydb et spécifions le fichier de données et le fichier journal,
y compris le chemin d’accès. Enfin, nous utilisons l’option FOR ATTACH.
Si les problèmes persistent, vous pouvez utiliser Stellar Repair for MS SQL pour résoudre et réparer l’erreur SQL 5171.
Solution Stellar
Stellar Repair for MS SQL est un outil complet qui comprend une multitude de mécanismes de réparation puissants pour récupérer efficacement chaque objet perdu, supprimé ou inaccessible de la base de données SQL endommagée. Le logiciel permet d’effectuer une récupération précise des tableaux, vues, requêtes, procédures stockées, index, fonctions définies par l’utilisateur, clés uniques, clés étrangères, identités, les valeurs par défaut, contraintes par défaut et types de données définis par l’utilisateur. De plus, il prend en charge les dernières versions de SQL Server, y compris MS SQL Server 2017, 2016, 2014, 2012, 2008, 2005, 2000 et 7.0 et les formats mixtes.
Il peut récupérer les erreurs
de grande gravité et les problèmes mineurs à partir des fichiers MDF, ndf et
LDF. Ce logiciel nécessite un installateur de moins de 5 MB
Le logiciel exige que vous arrêtiez le serveur MS SQL et que vous déplaciez les fichiers MDF et LDF à un emplacement différent, puis vous pouvez redémarrer le serveur et réparer la copie de la base de données :
Si vous ne connaissez pas le chemin de votre base de données, vous pouvez utiliser le bouton search du logiciel :
Conclusion
Dans cet article, nous avons appris que la base de données peut être
corrompue dans un miroir de base de données et lorsque nous attachons une base
de données dans un serveur SQL mis à jour. Nous avons appris comment réparer la
base de données en utilisant le serveur SQL et Stellar Repair for MS SQL.
Ce logiciel est facile à apprendre et permet de gagner beaucoup de
temps.
Was this article helpful?