2012-09-11 11 views
35

ho cercato di ripristinare un database utilizzando la seguente query:La parte finale del log per il database "DBName" non è stato eseguito il backup

ALTER DATABASE [DatabaseName] SET Single_User WITH Rollback Immediate GO 
RESTORE DATABASE DatabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
ALTER DATABASE [DatabaseName] SET Multi_User GO 

ma invece di ripristino del database, sto ottenendo questo errore:

Msg 3159, Level 16, State 1, Line 2

The tail of the log for the database "DatabaseName" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log. Msg 3013, Level 16, State 1, Line 2 RESTORE DATABASE is terminating abnormally.

+0

Nel mio caso era successo quando avevo già un database con lo stesso nome sullo stesso SQL Server. Ho appena cancellato il db con lo stesso nome e ho eseguito il comando di ripristino. Nota: ho cancellato db con lo stesso nome dato che era una vecchia copia del db di cui non avevo più bisogno. Ma, se hai ancora bisogno della vecchia copia, potresti voler fare un backup o rinominare il vecchio o il nuovo db. Ma, se non si dispone di un db con lo stesso nome, fare ciò che il messaggio di errore chiede di fare. – nam

risposta

76

Il messaggio di errore che viene visualizzato indica esattamente ciò che è necessario fare se non si cura del database o del registro esistente.

RESTORE DATABASE DAtabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
WITH REPLACE 

In SQL Server Management Studio (attività> Ripristina), è possibile aggiungere l'opzione WITH REPLACE aprendo la pagina "Opzioni" sul lato sinistro e orologeria "sovrascrivere il database esistente".

+0

Aveva anche un problema di trasporto. Doveva eseguire USE master; ALTER DATABASE RAVEN SET RECUPERO SEMPLICE; Ricordati di tornare a FULL quando hai finito. –

1

Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose.

Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.

In realtà, questa è la risposta. Proprio lì, nel messaggio. Che cosa vuoi fare? Backup della coda quindi non è perso? Sostituisci il log di cui non è stato eseguito il backup? La tua chiamata.

+0

poiché lavoro raramente con il database di backup di SQL Server I andando alle attività, eseguendo il backup ed eseguendo un backup, e ora voglio ripristinarlo, ma non me lo consente, quindi non conosco esattamente il motivo dell'errore di cui sopra, e la maggior parte dei forum dice che funziona senza ottenere alcun errore –

+2

L'errore ti avverte che se continui con il RESTRORE, perderai la coda corrente del log. In altre parole, alcune operazioni non sono state ancora completate.Ti offre due opzioni: eseguire il backup della coda corrente del log, quindi è conservata e puoi ripristinarla da qualche altra parte o più tardi * o * utilizzare la clausola WITH REPLACE di RESTORE per indicare a SQL Server che non ti interessa le operazioni che verrebbero essere perso nella coda corrente del registro e semplicemente andare avanti e sostituire il contenuto corrente con quello dal file di backup che si sta ripristinando. –

2

In alternativa, è possibile modificare il modello di recupero del database su "Semplice" anziché su "Completo".

Fare clic con il pulsante destro del mouse sul database, selezionare "Proprietà", "Opzione", "Modello di ripristino" su "Semplice".

Quindi quello che hai scritto dovrebbe funzionare senza produrre errori.

21

Per coloro che utilizzano Management Studio questo dovrebbe funzionare:

enter image description here

+0

essenzialmente aggiunge solo una parola chiave [replace] a [With] param list se in genere generi script da SSMS –

2

In alternativa, è possibile modificare il modello di recupero del database per Simple invece di Full.

  1. Fare clic destro sul database
  2. Scegliere properties ->option
  3. Change recovery model al simple

Allora quello che hai scritto dovrebbe funzionare senza produrre errori.

Ha funzionato bene con me.

Problemi correlati