2011-12-13 17 views
37

Ho letto un sacco di post su google e domande StackOverflow su come ripristinare un database in SQL Server da un file .bak.Apertura di un file .bak di SQL Server (Non ripristino!)

Ma nessuno di questi indica come leggere solo le tabelle nel backup del database. (Nessuno che ho trovato comunque?)

Voglio solo controllare alcune vecchie informazioni che ora sono state cancellate, senza effettivamente ripristinare il database completo. È possibile?

.

EDIT:

Volevo solo inviare la mia soluzione T-SQL per il problema, in modo che altri possono utilizzarle e posso tornare indietro e guardare in su;)

Per prima cosa ho creato un nuovo database chiamato backup_lookup e lo ha portato offline. Dopo questo potrei ripristinare il mio vecchio database mydb a quello nuovo, senza mai toccare il mio originale.

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 

Spero che questo aiuta :)

risposta

29

da SQL Server 2008 SQL Server Management Studio (SQL Server Management Studio), semplicemente:

  1. connettersi all'istanza database (ad esempio, "localhost \ SQLEXPRESS")
  2. O:

    • a) Selezionare il database che si desidera ripristinare; oppure, in alternativa
    • b) Creare semplicemente un nuovo database vuoto da ripristinare.
  3. pulsante destro del mouse, Attività, Ripristina, Database

  4. dispositivo, [...], Aggiungi, individuare il file .bak
  5. Selezionare il backup.
    Scegli "Sovrascrivi = Y" sotto Opzioni.
    Ripristinare il database
  6. Si dovrebbe dire "100% completo" e il database dovrebbe essere in linea.

PS: Anche in questo caso, sottolineo: si può facilmente fare questo su un "database scratch" - si fa non bisogno di sovrascrivere il database corrente. Ma è necessario a RESTORE.

PPS: È anche possibile eseguire la stessa operazione con i comandi T-SQL, se si desidera copiarlo.

+0

Ah, quindi ho potuto solo fare una temporanea database e ripristinarlo in, e poi eliminarlo senza alcun effetto sul mio database originale? :) – Behrens

+0

Sì, esattamente :) – paulsm4

+0

+1 e risposta accettata a causa di una soluzione gratuita :) – Behrens

9

L'unica soluzione praticabile è quella di ristabilire il file .bak. Il contenuto e la struttura di questi file sono non documentati e quindi, non c'è davvero alcun modo (a parte un brutto attacco) per farlo funzionare - sicuramente non vale il tuo tempo e lo sforzo!

L'unico strumento io sappia che può dare un senso di .bak file senza il loro restauro è Red-Gate SQL Compare Professional (ei dati di SQL accompagnamento Confronta), che consentono di confrontare la struttura del database contro il contenuto di un file di .bak. Gli strumenti Red-Gate sono assolutamente meravigliosi: altamente raccomandati e valgono ogni centesimo che costano!

E ho appena controllato il loro sito web - sembra che si possa effettivamente ripristinare un singolo tavolo da un file .bak con SQL Compare Pro! :-)

0

Non sembra possibile con SQL Server 2008 da solo. Avrai bisogno dell'aiuto di uno strumento di terze parti.

Essa vi aiuterà a rendere il vostro agire .bak come un database attivo:

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

+1

Ancora un altro gioiello Red-Gate! :-) –

+0

Non capisco perché Microsoft non abbia deciso di rendere questo tipo di funzionalità disponibile .. Sarebbe bene per gli affari se lo facessero .. – Nonym

+1

non per gli affari di Red-Gate, però .... –

9

Non v'è alcun modo standard per fare questo. È necessario utilizzare strumenti di terze parti come ApexSQL Restore o SQL Virtual Restore. Questi strumenti non leggono il file di backup direttamente. Consentono a SQL Server di "pensare" ai file di backup come se fossero database live.

+0

Supporto per il ripristino virtuale SQL terminato il 6 febbraio 2015. – mukama

1

solo per aggiungere la mia soluzione TSQL-script:

Prima di tutto; aggiungere un nuovo database denominato backup_lookup. Poi basta eseguire questo script, inserendo percorso principale le proprie basi di dati e percorso file di backup

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