web-dev-qa-db-fra.com

Créer / restaurer une base de données à partir d'une sauvegarde SQL Server Express

Je n'ai pas SQL Server Management Studio sur ma machine.

J'ai une sauvegarde de base de données (SQL Server 2008 R2). Il y a SQL Server Express qui est installé avec Visual studio 2010 Ultimate installé sur ma machine.

Comment puis-je restaurer cette sauvegarde sur une base de données et la joindre à SQL Server Express?
Existe-t-il une solution sans utiliser SQL Managment Studio Express?

23
Shahin

Même avec SQL Server Management Studio Express, vous ne pourrez pas restaurer cette sauvegarde. L'édition Express en cours d'installation avec Visual Studio 2010 est la version 2008 de SQL Server - votre sauvegarde est celle d'un SQL Server 2008 R2 release - ces sauvegardes ne peuvent pas être restaurées sur une version 2008.

Vous devrez télécharger le SQL Server 2008 R2 version Express , et pendant que vous y êtes - obtenez la version avec le Management Studio! Installez-le, puis vous pourrez restaurer votre sauvegarde de base de données.

Si vous voulez vraiment vraiment restaurer votre base de données sans utiliser Mgmt Studio - vous pouvez bien sûr utiliser une instruction RESTORE dans T-SQL et l'exécuter à l'aide de l'outil de ligne de commande sqlcmd :

RESTORE DATABASE YourDatabaseName
FROM DISK = N'(path to your BAK file)'
WITH FILE = 1,  
MOVE N'(your DB name)' TO N'(your SQL path)database.MDF',  
MOVE N'(your DB name)_LOG' TO N'(your SQL path)database_LOG.LDF',  
NOUNLOAD,  
REPLACE,  
STATS = 10
GO

(et bien sûr, il y a aussi une commande BACKUP que vous pouvez utiliser de la même manière - les MSDN Books Online sont vos amis pour plus de détails sur la syntaxe !!).

29
marc_s

En retard, mais nous l'espérons utile à ceux qui regardent ceci….

Si le problème est en cours de restauration sans Management Studio, cela peut être facilement résolu en utilisant sqlcmd comme Marc_s l'a déjà souligné.

Cependant, si le véritable problème est de restaurer la sauvegarde 2008 R2 sur SQL 2008 sans utiliser SSMS, seule la solution utilise des outils tiers qui peuvent lire la sauvegarde et générer des scripts pour créer un schéma et insérer des données.

L'idée est de créer une base de données vide sur SQL 2008 et d'utiliser un outil tiers pour la comparer à la sauvegarde générée avec 2008 R2.

J'ai utilisé ApexSQL Diff et ApexSQL Data Diff avec un bon succès dans mon travail précédent, mais il existe également de bons outils de Red Gate (SQL Compare ) et Idera (Ensemble d'outils de comparaison). Si vous recherchez en ligne, vous en trouverez probablement beaucoup plus….

Avertissement: je ne suis affilié à aucune des sociétés mentionnées ci-dessus…

17
ScottS

Pourquoi n'obtenez-vous pas SQL Managment Studio Express? Il est gratuit et devrait vous permettre d'administrer des instances sql express locales.

http://www.Microsoft.com/downloads/en/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796

BACKUP DATABASE [AdventureWorks] TO  
    DISK = N'\\nas\Backup\L40\SQL2005\AdventureWorks_backup_200702120215.bak' 
    WITH NOFORMAT, NOINIT,  NAME = N'AdventureWorks-Full Database Backup', 
    SKIP, NOREWIND, NOUNLOAD,  STATS = 10

RESTORE DATABASE [AdventureWorksNew] 
    FROM  DISK = N'\\nas\Backup\L40\SQL2005\AdventureWorks_backup_200702120215.bak' 
    WITH  FILE = 1,  
    MOVE N'AdventureWorks_Data' TO N'C:\Data\MSSQL.1\MSSQL\Data\AdventureWorksNew_Data.mdf',  
    MOVE N'AdventureWorks_Log' TO N'C:\Data\MSSQL.1\MSSQL\Data\AdventureWorksNew_Log.ldf',  
    NOUNLOAD,  STATS = 10
12
Chris Kooken

Le lien suivant fournit une solution similaire à celle de marc_s, et il va encore plus loin. J'ai réussi à créer une nouvelle base de données à partir d'un fichier de sauvegarde avec la solution fournie dans le lien ci-dessous.

http://codeonaboat.wordpress.com/2012/02/16/sql-server-2008-creating-a-database-from-a-bak-file/

La solution ci-dessous est copiée à partir du lien ci-dessus:

  1. Dans SSMS, ouvrez une fenêtre de requête dans la base de données master du serveur de base de données. C'est là que vous exécuterez les requêtes suivantes.

  2. Voir à quoi correspond le "LogicalName" de la base de données sauvegardée dans le fichier .bak

    RESTORE FILELISTONLY FROM DISK = 'c:\DatabaseBackups\dev2012021601.bak'

Cela vous donnera le nom logique de la base de données et son fichier journal associé. Supposons que les noms soient " dbname " et " dbname_log "

  1. Exécutez maintenant la commande de restauration suivante. Assurez-vous qu'une base de données portant le nom que vous essayez de créer n'existe pas déjà (dans l'exemple de code ci-dessous, dbForSocialMigration n'existe pas).
RESTORE DATABASE dbForSocialMigration
FROM DISK = 'c:\DatabaseBackups\dev20120307.bak'
WITH
MOVE 'dbname' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\dbForSocialMigration.mdf',
MOVE 'dbname_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\dbForSocialMigration_log.mdf'

C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA est le répertoire dans lequel SQL Express conserve généralement ses fichiers de données. Vous pouvez trouver le répertoire que votre serveur de base de données utilise en sélectionnant une base de données, en cliquant avec le bouton droit et en ouvrant la boîte de dialogue des propriétés et en sélectionnant l'option "Fichiers" à gauche.

Cela devrait fonctionner et à ce stade, vous devriez pouvoir accéder à la base de données "dbForSocialMigration" remplie de toutes les tables et données du fichier .bak.

7
Rohit Gupta