Il set di backup contiene un backup di un database diverso da quello esistente


485

Sto provando a ripristinare un file di backup di SQL Server per il mio database, ma sta generando un errore come segue:

Il set di backup contiene un backup di un database diverso da quello esistente

Il mio database in SQL Server 2008 e il file di backup sono nel 2005.

Quale può essere il problema?


95
La risposta molto votata di seguito è una mazza per rompere un dado. È molto probabile che il problema non sia stato selezionato l'opzione " Sovrascrivi il database esistente (WITH REPLACE) " nella finestra Ripristina> Opzioni . Ho avuto questo problema dalla riga di comando utilizzando WITH MOVE, ed è stato risolto utilizzando WITH REPLACE, MOVE.
James McCormack,

Ho lo stesso errore con uno dei miei database, ma solo quando SQL Server Agent è disattivato. Se lo accendo, non ci sono errori e posso ripristinare senza problemi. Il mio file BAK contiene solo un singolo database e quel nome di database (e nomi di file logici) sono univoci sul mio server.
Web degli sviluppatori,

Risposte:


807

Anch'io ho riscontrato questo problema.

Soluzione:

  • Non creare un database vuoto e ripristinare il .bakfile su di esso.
  • Utilizzare l' opzione "Ripristina database" accessibile facendo clic con il pulsante destro del mouse sul ramo "Database" di SQL Server Management Studio e fornire il nome del database fornendo al contempo l'origine da ripristinare.
  • Modificare anche i nomi dei file in "File" se esiste ancora l'altro database. Altrimenti si ottiene "Il file '...' non può essere sovrascritto. Viene utilizzato dal database 'yourFirstDb'".

102
Sarebbe così facile per SSMS dirmi questo quando si verifica l'errore
cja

16
+1 per " Non creare un database vuoto e ripristinare il file .bak su di esso " ... sì, questo lo risolve. (Ma perché non ho riscontrato questo problema tutte le altre volte che ho fatto la stessa cosa? E non abbiamo iniziato a fare quella pre-creazione in primo luogo come soluzione alternativa per qualche altro messaggio di errore inspiegabile?:])
Modifica Reg

Qualcuno dovrebbe contrassegnarlo come una risposta perché era il consiglio di cui avevo bisogno per ripristinare con successo un backup.
Doreen,

2
In Restore Database, sono andato su Files, Restore As e ho inserito nomi di file univoci, poiché conteneva ancora i nomi originali per i dati e i file di registro.
Dave Mateer,

2
Modificare anche i nomi dei file in "File" se esiste ancora l'altro database. Altrimenti viene visualizzato "Il file '...' non può essere sovrascritto. Viene utilizzato dal database 'yourFirstDb'".
Verena Haunschmid,

175

O:

1) Utilizzare WITH REPLACEdurante l'utilizzo del RESTOREcomando (se si utilizza la GUI, si trova in Opzioni -> Sovrascrivi il database esistente ( WITH REPLACE)).

2) Deleteil database precedente che è in conflitto e ripristina nuovamente usando il RESTOREcomando.

Controlla il link per maggiori dettagli.


1
copiato dal link e fornito anche il link .. * sospiro * (intelligente)
Abhijeetchindhe

4
@Abhijeetchindhe haha ​​.. Riutilizzabilità e cortesia .. :)
Amarnath

:) Un software onesto Er lo sei! Comunque, questa è la risposta migliore a questa domanda. E vota per il tempo che hai preso per trovarlo :)
Abhijeetchindhe,

1
Ha avuto lo stesso problema dell'operazione e questa risposta funziona perfettamente. +1
Esteban

1
Questa opzione WITH REPLACE è stata anche la soluzione di cui avevo bisogno. Grazie!
Adam,

90

Innanzitutto creare un database vuoto con lo stesso nome. Quindi vai per l'opzione di ripristino

In Opzioni nel riquadro sinistro non dimenticare di selezionare

  • Sovrascrivi il database esistente
  • Conserva le impostazioni di replica

inserisci qui la descrizione dell'immagine

Questo è tutto


51

Hanno affrontato lo stesso problema e trovato la soluzione facendo questo, usando SSMS 2014

- Basta selezionare l'opzione Sovrascrivi il database esistente (WITH REPLACE) 

Database esistente> Attività> Ripristina> Database


34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

BACKUP DATABASE db TO DISK = 'c:\temp\db.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';

33

Semplici 3 passaggi:

1- Fare clic con il tasto destro sul database → Attività → ripristina → Database

2- Verifica Devicecome sorgente e individua il file .bak (o zippato .bak)

3- Nel riquadro sinistro fare clic su optionse:

  • seleziona Sovrascrivi il database esistente.
  • deseleziona Esegui backup del registro di coda prima del ripristino
  • selezionare Chiudi connessione esistente al database di destinazione.

Altre opzioni sono davvero opzionali (e ovviamente ovviamente importanti)!


23

È perché i file .mdfe .ldfdell'originale Dbsono stati individuati in forse c:\programFile\....e queste informazioni vengono salvate nel backup!

Se si crea lo stesso DB su un diverso SQL Server in cui è installata l'installazione, non è c:\program Files (x86)\ ....possibile ripristinare come di consueto. È necessario riposizionare il percorso di .mdfe .ldfFiles.

Perciò:

  • Creare un DB vuoto sul nuovo server

  • Fare clic con il tasto destro del mouse su Db vuoto> Attività> Ripristina> Database> fare clic su Dispositivo selezionare i .bakfile> Seleziona Db in cui ripristinare

  • fai clic su File a sinistra> Seleziona "Riposiziona tutti i file nella cartella"
  • fai clic su Opzioni nel sito a sinistra> fai clic su Sovrascrivi

Fatto!
Spero che sia d'aiuto!


16

Mi ero imbattuto in un problema simile oggi. Ho provato tutte le soluzioni sopra ma non ha funzionato. Quindi pubblicando la mia soluzione qui.

Non dimenticare di deselezionare Backup lungo la coda prima del ripristino

Non dimenticare di deselezionare Backup lungo la coda prima del ripristino

Spero che aiuti anche gli altri!


Questo è ciò che ha funzionato per me. Grazie!
Bill Norman,

16

Se si utilizza l'approccio script e si verifica un errore relativo ai file LDF e MDF, è possibile innanzitutto eseguire una query sul file di backup per i nomi logici (e altri dettagli) dei file nel set di backup, utilizzando quanto segue:

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

Otterrai risultati simili ai seguenti:

inserisci qui la descrizione dell'immagine

E poi puoi usare quei nomi logici nelle query:

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

Ulteriori informazioni su RESTORE FILELISTONLY sono disponibili nei documenti di SQL Server .


Ho avuto lo stesso problema nella domanda e nel mio caso il backup Db proveniva dal server remoto e ho dovuto creare la stessa struttura di cartelle nel mio disco D che assomiglia all'output della prima query. Quindi la seconda query ha funzionato correttamente e il database è stato ripristinato.
rinilnath

11

È altrettanto importante assicurarsi che il nome del database corrisponda al nome della base di dati nel backup che si sta tentando di ripristinare. Se non corrisponde, otterrai lo stesso errore.


Questo sembra essere particolarmente vero se hai più file / gruppi di file e tabelle partizionate
AlexC

9

Prima di fare qualsiasi altra cosa, confermare se il backup è completo o differenziale. Se stai provando a creare un nuovo database da un backup differenziale, qualunque cosa tu faccia, riscontrerai l'errore.


1
Questo era il problema che stavo riscontrando, quindi grazie per questo !!! (Non sapevo che il file di backup fosse in realtà un backup differenziale.). Ecco come verificare: "RESTORE HEADERONLY FROM DISK = 'C: \ myfile.bak'" Nei risultati, BackupType di 1 = Backup completo. BackupType of 5 = Backup differenziale.
Wimpie Ratte,

9

system.data.sqlclient.sqlerror: il set di backup contiene un backup di un database diverso dal database "Dbname" esistente

Mi sono imbattuto in trovare l'anima

  1. Non creare un database con lo stesso nome o nome di database diverso! Importante.

  2. fare clic con il tasto destro sul database | Attività> Ripristina> Database

  3. In "Sorgente per ripristino" selezionare "Da dispositivo"

  4. Seleziona il file .bak

  5. Selezionare la casella di controllo per il database nella griglia visualizzata di seguito

  6. Per DataBase: "Qui puoi digitare il nome del nuovo database" (es: DemoDB)

  7. Non selezionare il database esistente da DropDownlist

  8. Ora fai clic sul pulsante OK, creerà un nuovo Databse e ripristinerà tutti i dati dal tuo file .bak.

puoi ottenere aiuto anche da questo link

Spero che possa aiutarti a risolvere il tuo problema ...


1
"Non creare un database con lo stesso nome o nome di database diverso! Importante." Cosa intendi?
sajid

6

Ciò causa sempre a causa dell'incompatibilità della versione. seguire questi passaggi per risolvere:

Passaggio 1: creare un database con il nome preferito. (Nel nostro caso AdventureWorks)

Passaggio 2: scrivere fare clic sul database e fare clic su Attività >> Ripristina >> Database ...

inserisci qui la descrizione dell'immagine

Passaggio 3: nella schermata di ripristino vai alla terza selezione di Opzioni. Ora seleziona la casella di controllo "Sovrascrivi il database esistente (WITH REPLACE)"

inserisci qui la descrizione dell'immagine

Passaggio 4: fare clic su OK. Dovrebbe ripristinare correttamente il database.

Nota: quando si ripristina un database WITH REPLACE, questo sovrascriverà il vecchio database.


Grazie Alireza per il tuo impegno .. Ma stiamo usando query anziché GUI.
Pugal,

5

Lo stesso problema con me. La soluzione per me è:

  1. Fare clic con il tasto destro sul database.
  2. Seleziona attività, seleziona ripristina database.
  3. Fai clic sulle opzioni sul lato sinistro.
  4. Controlla la prima opzione Sovrascrivi il database esistente (WITH REPLACE).
  5. Vai a Generale, seleziona il database di origine e di destinazione.
  6. Fai clic su OK, tutto qui

3

Stavo solo cercando di risolvere questo problema.

Avevo provato di tutto, correndo come amministratore fino ai suggerimenti trovati qui e altrove; ciò che mi ha risolto alla fine è stato controllare l'opzione "riposiziona i file" nella scheda delle proprietà dei file.

Spero che questo aiuti qualcun altro.


3

Ho dovuto creare un nuovo db sul mio locale per i test e ho avuto un backup dal mio prod. Ho creato prima il db e ho provato a eseguire il BAK sopra il nuovo db che ha prodotto questo errore per me. Ho cancellato il db e ripristinato mentre cercavo il nuovo nome db nella schermata di ripristino stesso. Il db è stato creato automaticamente al ripristino.


3

Alcuni di voi lo hanno complicato molto. Ho trovato questo estremamente semplice.

1) Crea un database con lo stesso nome del tuo nome di database di file .bak! Importante

2) fare clic con il tasto destro sul database | Attività> Ripristina> Database

3) In "Sorgente per ripristino" selezionare "Da dispositivo"

4) Seleziona il file .bak

5) Selezionare la casella di controllo per il database nella griglia vista in basso

6) Sotto "Seleziona una pagina" a destra Seleziona "Opzioni"

7) Selezionare la casella di controllo "Conserva le impostazioni di replica (WITH KEEP_REPLICATION)

Ora torna alla pagina Generale e fai clic su OK per ripristinare il database ... Ecco.


dov'è "seleziona una pagina"?
KansaiRobot,

2

Ho fatto il lavoro in modo alternativo, usando gli script Genera. Ciò ha funzionato per me poiché Backup-Restore non ha aiutato a risolvere il problema a causa dello stesso errore.


2

In Opzioni, modifica il nome del file "Ripristina come" nel nuovo database mdf e ldf. Fa riferimento ai file .mdf e .ldf del database di origine.


1

È possibile ripristinare su un nuovo DB, verificare la sintassi del nome file, sarà nel file di registro, per la nuova versione di SQL sarà un suffisso "_log"

controlla la sovrascrittura del flag del database esistente nella scheda delle opzioni

Fabio


0

Sono sicuro che questo problema è legato alle autorizzazioni per file e cartelle.


0

Stavo cercando di ripristinare un database di produzione in un database di gestione temporanea sullo stesso server.

L'unica cosa che ha funzionato nel mio caso è stata il ripristino in un nuovo database vuoto. Funzionava alla grande, non tentava di sovrascrivere i file di produzione (cosa che farebbe se ripristinassi il file di backup di produzione nel database di gestione temporanea esistente). Quindi elimina il vecchio database e rinomina: i file manterranno il nuovo nome temporaneo, ma nel mio caso va bene.

(O altrimenti eliminare prima il database di gestione temporanea e quindi è possibile ripristinare in un nuovo database con lo stesso nome del database di gestione temporanea)


0

invece di fare clic su Ripristina database, fare clic su Ripristina file e filegroup.

questo funziona sul mio server SQL


0

Questo mi ha aiutato a importare il file di backup dall'unità di sistema

  1. Creare un database con lo stesso nome (preferibilmente) del nome del database di file .bak
  2. Fare clic con il tasto destro del mouse sul database> Attività> Ripristina> Database
  3. In "Sorgente per ripristino" selezionare "Da dispositivo"
  4. Seleziona il file .bak selezionando il percorso dal sistema
  5. Selezionare la casella di controllo per il database nella casella di riepilogo di seguito
  6. In "Seleziona una pagina" a destra Seleziona "Opzioni"
  7. Seleziona la casella di controllo "Conserva le impostazioni di replica (WITH KEEP_REPLICATION)
  8. Seleziona la casella di controllo Sovrascrivi il database esistente (WITH REPLACE) Ora torna alla pagina Generale e fai clic su OK per ripristinare il database ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.