Il file mdf non può essere sovrascritto durante il ripristino di un database in SQL Server


21

Ho un databse A. Contiene alcuni dati. Ho creato un backup per A come file A.bak . Quindi creo un nuovo database vuoto B. E quindi provo a ripristinare B da A.bak . Ma il servizio SQL mi dice il seguente errore:

Il file 'C: \ Directory SQL \ DATA \ A.mdf' non può essere sovrascritto. Viene utilizzato dal database 'A'.

Ma se cancello A da SQL Server, il retore va bene.

Non capisco perché l'SQL debba scrivere nel file di database originale durante il ripristino da un file di backup separato ?

grazie ~

Risposte:


19

Se si ripristina un database, per impostazione predefinita SQL Server tenterà di ripristinare tutti i dati e i file di registro nelle posizioni originali. Poiché tali percorsi originali sono ancora utilizzati dal database originale ("A"), il ripristino ha esito negativo. È necessario utilizzare la clausola WITH MOVE per specificare nuovi percorsi per tutti i file nel database.

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

Qualcosa del genere comunque. Utilizzare RESTORE FILELISTONLY FROM DISK ... per visualizzare i nomi dei file logici nel backup, se necessario.


11

WITH MOVE/ MOVEè la soluzione giusta in T-SQL.

A proposito, se vuoi usare la GUI puoi andare su File e rinominare:

  • a.MDF
  • a.NDF
  • a.LDF

a

  • b.MDF
  • b.NDF
  • b.LDF

inserisci qui la descrizione dell'immagine


1
Inoltre, quando si modifica il nome del database di destinazione nella scheda Generale, la GUI aggiornerà automaticamente i nomi di Restore As di conseguenza.
Wouter,

0

Quando si ripristina il backup, è possibile specificare i file di dati da ripristinare.

Guarda qui e qui . È possibile utilizzare l'opzione "Ripristina i file di database come" e l'opzione "Sovrascrivi il database esistente".


0

Stai utilizzando l'opzione REPLACE, nel comando TSQL o come casella di controllo selezionata? In alternativa, è possibile rinominare i file e chiamare il database in modo diverso.

Troverai anche un po 'difficile ripristinare su un database che viene utilizzato ..... dovrai uccidere i processi usando il database; OPPURE rilascia / elimina prima il database, chiudendo le connessioni (questo è probabilmente il più semplice); OPPURE imposta il database che desideri sovrascrivere in qualcosa come la modalità utente con restrizioni con rollback immediato in modo che solo i DBA possano usare; O addirittura arrestare SQL Server e riavviarlo - si spera che il ripristino venga avviato prima che chiunque / qualunque cosa utilizzi quel database.

PS effettua un backup del database che stai per sovrascrivere, per ogni evenienza.


0

Se qualcuno cerca una soluzione nella GUI di Management Studio dopo aver già utilizzato la Optionspagina e attivato l' Overwrite the existing database (WITH REPLACE)opzione:

Basta fare clic nella Restore Ascolonna e modificare i nomi dei *.mdffile e dei *.ldffile.

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.