web-dev-qa-db-fra.com

Ouverture d'un fichier .bak SQL Server (pas de restauration!)

J'ai lu BEAUCOUP de publications sur Google et de questions sur StackOverflow sur la restauration d'une base de données dans SQL Server à partir d'un fichier .bak.

Mais aucun d’entre eux n’indique comment lire simplement les tables de la sauvegarde de la base de données. (Aucun que je pourrais trouver de toute façon?)

Je veux juste vérifier quelques 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, afin que d'autres puissent l'utiliser et que je puisse revenir en arrière et le rechercher;)

J'ai d'abord créé une nouvelle base de données appelée backup_lookup et l’a pris hors ligne. Après cela, je pourrais restaurer mon ancienne base de données mydb vers 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 ça aide :)

44
Behrens

A 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. Non plus:

    • a) Sélectionnez la base de données que vous souhaitez restaurer. Ou bien
    • b) Créez simplement une nouvelle base de données vide à restaurer.
  3. Clic droit, tâches, restauration, base de données

  4. Périphérique, [...], Ajouter, Parcourir votre fichier .bak
  5. Sélectionnez la sauvegarde.
    Choisissez "écraser = Y" sous les options.
    Restaurer la base de données
  6. Il devrait indiquer "100% complet" et votre base de données devrait être en ligne.

PS: Encore une fois, je souligne: vous pouvez facilement le faire sur une "base de données scratch" - vous faites pas besoin de remplacer votre base de données actuelle. Mais vous faites avez besoin de [~ # ~] restaurer [~ # ~] .

PPS: Vous pouvez également accomplir la même chose avec les commandes T-SQL, si vous souhaitez le scripter.

33
paulsm4

La seule solution réalisable consiste à restaurer le .bak fichier. Le contenu et la structure de ces fichiers sont non documentés et, par conséquent, il n'y a vraiment aucun moyen (autre qu'un piratage horrible) de le faire fonctionner - définitivement ne vaut pas votre temps et l'effort!

Le seul outil que je connaisse qui puisse donner un sens à .bak fichiers sans les restaurer est Red-Gate SQL Compare Professional (et la comparaison de données SQL qui l'accompagne) qui vous permettent de comparer la structure de votre base de données au contenu d'un .bak fichier. Les outils Red-Gate sont absolument merveilleux - hautement recommandés et valent bien chaque centime dépensé!

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

11
marc_s

Il n'y a pas de moyen standard de le 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. SQL Server doit "penser" aux fichiers de sauvegarde comme s'il s'agissait de bases de données actives.

9
David Smithers

Juste pour ajouter ma solution scriptée TSQL:

Tout d'abord; ajouter une nouvelle base de données nommée backup_lookup. Ensuite, exécutez ce script en insérant le chemin racine et le chemin de fichier de sauvegarde de vos propres bases de données.

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
1
Behrens

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

Cela vous aidera à faire de votre .bak une base de données dynamique:

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

0
Nonym