2011-12-13 2 views
37

J'ai lu beaucoup de messages Google et StackOverflow des questions sur la façon de restaurer une base de données dans SQL Server à partir d'un fichier .bak.Ouverture d'un fichier .bak SQL Server (ne pas restaurer!)

Mais aucun d'entre eux indique comment simplement LIRE les tables dans la sauvegarde de base de données. (Aucun que je n'ai pu trouver de toute façon?)

Je veux juste vérifier certaines anciennes informations qui ont maintenant été supprimées, sans réellement restaurer la base de données complète. Est-ce possible?

.

EDIT:

Je voulais juste poster ma solution T-SQL au problème, pour que les autres peuvent l'utiliser et je peux revenir en arrière et regarder vers le haut;)

D'abord, je créé une nouvelle base de données appelée backup_lookup et l'a mis hors ligne. Après cela, je pouvais restaurer mon ancienne base de données mydb à la nouvelle, sans jamais toucher à mon original.

USE master 
GO 
RESTORE DATABASE backup_lookup 
FROM DISK = 'D:\backup\mydb.bak' 
WITH REPLACE, 
MOVE 'mydb' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup.mdf', 
MOVE 'mydb_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup_log.ldf' 
GO 

J'espère que cette aide :)

Répondre

29

à partir de SQL Server 2008 SSMS (SQL Server Management Studio), simplement:

  1. Connectez-vous à votre instance de base de données (par exemple, "localhost \ SQLEXPRESS")
  2. Soit:

    • a) Sélectionnez la base de données à restaurer; ou, alternativement,
    • b) Créez simplement une nouvelle base de données vide à restaurer.
  3. clic droit, Tâches, restauration, Base de données

  4. Device [...], Ajouter, recherchez votre fichier .bak
  5. Sélectionnez la sauvegarde.
    Choisissez "écraser = Y" dans les options.
    Restaurer la base de données
  6. Il doit indiquer "100% terminé" et votre base de données doit être en ligne.

PS: Encore une fois, je souligne: vous pouvez facilement le faire sur une « base de données de zéro » - vous ne pas besoin d'écraser votre base de données actuelle. Mais vous devez besoin de RESTORE. PPS: Vous pouvez également effectuer la même chose avec les commandes T-SQL, si vous souhaitez le script.

+0

Ah, si je pouvais faire une base de données temporairement et restaurer dans et supprimer par la suite sans aucun effet sur ma base de données d'origine? :) – Behrens

+0

Oui, exactement :) – paulsm4

+0

+1 et réponse acceptée à cause d'une solution gratuite :) – Behrens

9

La seule solution viable est de restaurer le fichier .bak. Le contenu et la structure de ces fichiers sont non documenté et, par conséquent, il n'y a vraiment aucun moyen (autre qu'un affreux hack) pour que cela fonctionne - certainement pas la peine de votre temps et l'effort!

Le seul outil que je suis conscient de cela peut donner un sens .bak fichiers sans les restaurer est Red-Gate SQL Compare Professional (et les données SQL ci-joints Compare) qui vous permettent de comparer la structure de votre base de données contre le contenu d'un fichier .bak. Les outils Red-Gate sont absolument merveilleux - hautement recommandé et vaut chaque centime qu'ils coûtent!

Et je viens de vérifier leur site web - il semble que vous pouvez effectivement restaurer une seule table à partir d'un fichier .bak avec SQL Compare Pro! :-)

0

Cela ne semble pas possible avec SQL Server 2008 uniquement. Vous allez avoir besoin de l'aide d'un outil tiers.

Il vous aidera à faire votre acte .bak comme une base de données en direct:

http://www.red-gate.com/products/dba/sql-virtual-restore/

+1

Encore un autre joyau Red-Gate! :-) –

+0

Je ne comprends pas vraiment pourquoi Microsoft n'a pas décidé de rendre ce type de fonctionnalité disponible .. Ce serait bon pour les affaires si elles l'ont fait .. – Nonym

+1

pas pour les affaires de Red-Gate, cependant .... –

9

Il n'y a aucun moyen standard pour ce faire. Vous devez utiliser des outils tiers tels que ApexSQL Restore ou SQL Virtual Restore. Ces outils ne lisent pas vraiment le fichier de sauvegarde directement. Ils permettent à SQL Server de "penser" aux fichiers de sauvegarde comme s'il s'agissait de bases de données actives.

+0

La prise en charge de SQL Virtual Restore a pris fin le 6 février 2015. – mukama

1

Pour ajouter ma solution scriptée TSQL-:

tout d'abord; ajoutez une nouvelle base de données nommée backup_lookup. Ensuite, il suffit de lancer ce script, insérer votre propre chemin racine de bases de données et de sauvegarde filepath

USE [master] 
GO 
RESTORE DATABASE backup_lookup 
FROM DISK = 'C:\backup.bak' 
WITH REPLACE, 
MOVE 'Old Database Name' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup.mdf', 
MOVE 'Old Database Name_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_lookup_log.ldf' 
GO 
Questions connexes