Errore 3154 durante il ripristino di un backup utilizzando WITH REPLACE


16

Ho SQL 2012 con SP1 installato sul mio computer. Ho fatto un backup di un database test.bak.

Ho un database con il nome test2 che è lo stesso database, ma i dati sono cambiati.

Voglio ripristinare test.bak su test2database.

Ricevo sempre l'errore:

Errore 3154: il set di backup contiene un backup di un database diverso dal database esistente.

Provai:

  1. Ho cliccato a destra test2 -> Restore database -> From device

    Ho scelto test.bake controllato With Replacema ho ricevuto l'errore.

  2. Quindi ho provato a fare clic con il tasto destro su test2 -> Restore file and filegroups

    Ho scelto test.bake controllato With Replacema ho ricevuto l'errore.

Posso cancellare il mio vecchio database e quindi ripristinare il mio backup con il nome giusto, ma quando stavo usando SQL 2008, non ho avuto problemi a ripristinare un database esistente.

Sembra che da quando utilizzo SQL2012, ottengo molto questo errore!

Risposte:


12

Dovresti usare WITH REPLACEe in generale evitare di usare le cose point-and-click in Management Studio: sono poco flessibili e spesso hanno dei bug.

Questo ha funzionato per me:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

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

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

Inoltre, è necessario accertarsi quando si esegue il backup dei database in uso WITH INIT e / o non punti il ​​dispositivo su un file che contiene già un backup (poiché potrebbe non essere lo stesso database di cui stai eseguendo il backup ora, specialmente se riutilizzi nomi come test...).


@AaronBertrand fyi, questa funzione esiste. Quello che faccio di solito è usare l'interfaccia utente e scriverla per assicurarsi che tutto sia a posto. Ci sono molti bug, sì.
usr

2

1) Utilizzare WITH REPLACEdurante l'utilizzo del RESTOREcomando.

2) DROP il database precedente che è in conflitto e ripristina nuovamente utilizzando il RESTOREcomando.

Non ci sono problemi con la versione di SQL Server. Come sottolineato da Aaron, sono anche in grado di ripristinare il database dal 2008 al 2012 e anche le stesse versioni.


2

Stai ripristinando il database sbagliato. Non pensarlo come "ripristino test2con un backup da test", pensa "ripristina il mio backup testma rinominalo come test2". È possibile scegliere l'attività di ripristino teste inserirla test2nel campo "Al database:".

Come menziona Aaron, impara la sceneggiatura piuttosto che fare affidamento sul mago: è più chiaro cosa sta succedendo.


2

Puoi ancora farlo ma richiede un ulteriore passaggio.

Apri la finestra di dialogo di ripristino, fai le tue solite selezioni secondo le abitudini del 2008. Se il database originale è DB, selezionare il dispositivo DB.bak per Origine e modificare il Nome destinazione in DBTest. Quindi in Seleziona una pagina (angolo in alto a sinistra) dove vedi Generale / File / Opzioni - scegli File. Guarda nella griglia. Vedrai le colonne per Nome file originale e Ripristina come nome file. Allargare manualmente quest'ultimo e digitare il nuovo nome (se il nome originale del database è DB e si desidera creare DBTest, modificare .... \ DB.mdf in ... \ DBTest.mdf, ecc.)

Questo accetterà il tuo file .bak per DB come origine e DBTest come destinazione. Potrebbe anche essere necessario andare alla pagina Opzioni e selezionare Con Sostituisci. Devo farlo per altri motivi, quindi non posso provarlo senza questa opzione.


2

La risposta corretta, come sottolineato, è utilizzare l' WITH REPLACEopzione.

Voglio solo sottolineare che è possibile ottenere l'errore nella domanda anche durante l'utilizzo WITH REPLACE, se si tenta di ripristinare da un backup differenziale (senza quello completo).


Probabilmente non avevo abbastanza punti per commentare al momento di questa risposta, volevo solo sottolineare che puoi ottenere l'errore anche quando usi "WITH REPLACE" se provi a ripristinare da un backup differenziale (senza quello completo)
Brimstedt,

0

Spero che questo funzioni.

  1. Una volta impostato il percorso per ripristinare il file.
  2. Fai clic su "Opzioni" sul lato sinistro.
  3. Spuntare la casella di controllo "Chiudi connessioni esistenti al database di destinazione".
  4. Clicca OK. inserisci qui la descrizione dell'immagine

-4

Si prega di interrompere il server in esecuzione e quindi ripristinare db, ti aiuterà. :)

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.