web-dev-qa-db-fra.com

Restauration de la base de données à partir de fichiers .mdf et .ldf de SQL Server 2008

Pour une raison quelconque, je dois désinstaller SQL Server 2008 R2, mais auparavant, j'avais copié deux fichiers (.mdf et .ldf) de ma base de données à partir de

C:\Fichiers de programme (x86)\Microsoft SQL Server\MSSQL10_50.MSSQL2008\MSSQL\DATA

La question est de savoir s'il m'est possible de récupérer la base de données à partir de ces fichiers dans mon nouveau SQL Server 2008 R2 installé.

Si oui, alors comment puis-je faire cela?

42
Ahsan Raza

Oui, c'est possible . Les étapes sont les suivantes:

  1. Commencez par placer les fichiers .mdf et .ldf dans le dossier C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\

  2. Ensuite, allez dans le logiciel SQL, cliquez avec le bouton droit de la souris sur «Bases de données» et cliquez sur l'option «Joindre» pour ouvrir la boîte de dialogue Attacher des bases de données.

  3. Cliquez sur le bouton “Ajouter” pour ouvrir et localiser les fichiers de base de données à partir du dossier C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\

  4. Cliquez sur le bouton "OK". SQL Server Management Studio charge la base de données à partir du fichier .MDF.

95
sridhar

La première recherche sur Google m'a donné cette réponse. J'ai donc pensé à mettre à jour ceci avec une version plus récente de attach, detach. 

Create database dbname 
On 
(   
Filename= 'path where you copied files',   
Filename ='path where you copied log'
)
For attach; 

En outre, si votre base de données est correctement arrêtée (il n'y a pas de transactions actives alors que la base de données a été arrêtée) et que vous n'avez pas de fichier journal, vous pouvez utiliser la méthode ci-dessous, SQL Server créera un nouveau fichier journal de transactions.

Create database dbname 
    On 
    (   
    Filename= 'path where you copied files'   
    )
    For attach; 

si vous ne spécifiez pas le fichier journal des transactions, SQL essaiera de rechercher le chemin par défaut et de l’utiliser indépendamment du fait que la base de données ait été correctement arrêtée ou non.

Voici ce que MSDN a à dire à ce sujet ..

Si une base de données en lecture-écriture comporte un seul fichier journal et que vous ne spécifiez pas un nouvel emplacement pour le fichier journal, l'opération de connexion recherchera le fichier à l'ancien emplacement. S'il est trouvé, l'ancien fichier journal est utilisé, que la base de données ait été arrêtée correctement ou non. Toutefois, si l'ancien fichier journal n'est pas trouvé et si la base de données a été arrêtée proprement et ne comporte aucune chaîne de journaux active, l'opération d'attachement tente de créer un nouveau fichier journal pour la base de données.

Il y a quelques restrictions avec cette approche et certains effets secondaires aussi.

Les opérations 1.attach-and-détach permettent de désactiver le chaînage des propriétés entre bases de données.
2.La base de données de confiance est désactivée
3. La récupération d'une base de données en lecture seule perd des informations sur les bases différentielles des sauvegardes différentielles. 

Plus important encore ... vous ne pouvez pas attacher une base de données avec des versions récentes à une version antérieure 

Références:
https://msdn.Microsoft.com/en-in/library/ms190794.aspx

11
TheGameiswar

À partir d'un script (celui qui fonctionne):

CREATE DATABASE Northwind
ON ( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Northwind.mdf' )
LOG ON ( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Northwind_log.ldf')
GO

évidemment mettre à jour le chemin:

C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA

Où résident vos fichiers .mdf et .ldf.

9
jenson-button-event

J'ai une réponse pour vous .__ Oui, c'est possible.

Aller à

SQL Server Management Studio> sélectionnez la base de données> cliquez sur attacher

Ensuite, sélectionnez et ajoutez les fichiers .mdf et .ldf. Cliquez sur OK.

7
Adam John

c'est ce que j'ai fait 

d'abord exécuter create database x. x est le nom de votre ancienne base de données, par exemple le nom du MDF.

Ouvrez ensuite la migration de serveur SQL et arrêtez le serveur SQL.

Là, après avoir navigué jusqu’à l’emplacement de votre nouvelle base de données créée, elle devrait se trouver sous le fichier programme, dans mon cas, c’est 

C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQL\MSSQL\DATA

et replacer les nouveaux fichiers mdf et Idf créés avec les anciens fichiers/bases de données.

puis redémarrez simplement le serveur SQL et walla :)

0
Alen.Toma
use test
go
alter proc restore_mdf_ldf_main (@database varchar(100), @mdf varchar(100),@ldf varchar(100),@filename varchar(200))
as
begin 
begin try
RESTORE DATABASE @database FROM DISK = @FileName
with norecovery,
MOVE @mdf TO 'D:\sql samples\sample.mdf',
MOVE @ldf TO 'D:\sql samples\sample.ldf'
end try
begin catch
SELECT ERROR_MESSAGE() AS ErrorMessage;
print 'Restoring of the database ' + @database + ' failed';
end catch
end

exec restore_mdf_ldf_main product,product,product_log,'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\product.bak'
0
Sarfaraz Kazi