El archivo mdf no se puede sobrescribir al restaurar una base de datos en SQL Server

21

Tengo un databse A. Tiene algunos datos. Creé una copia de seguridad para A como archivo A.bak . Luego creo una nueva base de datos vacía B. Y luego trato de restaurar B desde A.bak . Pero el Servidor SQL me dice el siguiente error:

El archivo 'C: \ SQL Directory \ DATA \ A.mdf' no se puede sobrescribir. Está siendo utilizado por la base de datos 'A'.

Pero si elimino A de SQL Server, la restauración está bien.

No entiendo por qué el SQL necesita escribir en el archivo de base de datos original mientras se restaura desde un archivo de copia de seguridad separado .

Gracias ~

smwikipedia
fuente

Respuestas:

19

Si restaura una base de datos, SQL Server intentará, de manera predeterminada, restaurar todos los datos y archivos de registro a sus ubicaciones originales. Dado que esas ubicaciones originales todavía están en uso por la base de datos original ("A"), la restauración falla. Debe usar la cláusula WITH MOVE para especificar nuevas ubicaciones para todos los archivos en la base de datos.

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

Algo así de todos modos. Use RESTORE FILELISTONLY FROM DISK ... para ver los nombres de archivo lógicos en la copia de seguridad si es necesario.

db2
fuente
11

WITH MOVE/ MOVEes la solución correcta en T-SQL.

Por cierto, si quieres usar la GUI puedes ir a Archivos y renombrar:

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

a

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

ingrese la descripción de la imagen aquí

Francesco Mantovani
fuente
1
Además, al cambiar el nombre de la base de datos de destino en la pestaña General, la GUI actualizará automáticamente los nombres de Restaurar como en consecuencia.
Wouter
0

Cuando restaura la copia de seguridad, puede especificar archivos de datos para restaurar.

Mira aquí y aquí . Puede usar la opción "Restaurar los archivos de la base de datos como" y el indicador "Sobrescribir la base de datos existente".

demas
fuente
0

¿Está utilizando la opción REEMPLAZAR, ya sea en el comando TSQL o como una casilla de verificación seleccionada? Alternativamente, puede cambiar el nombre de los archivos y llamar a la base de datos de otra manera.

También le resultará un poco difícil restaurar a través de una base de datos que se está utilizando ..... necesitará eliminar los procesos que utilizan la base de datos; O suelte / elimine la base de datos primero, cerrando las conexiones (esta es probablemente la más fácil); O configure la base de datos que desea sobrescribir en algo como el modo de usuario restringido con reversión inmediata para que solo los DBA puedan usar; O incluso detenga SQL Server y reinícielo, esperemos que la restauración comience a funcionar antes de que alguien / nada use esa base de datos.

PD: haga una copia de seguridad de la base de datos que está a punto de sobrescribir, por si acaso.

Peter Schofield
fuente
0

Si alguien busca una solución en la GUI de Management Studio después de usar la Optionspágina y la Overwrite the existing database (WITH REPLACE)opción de activación :

Simplemente haga clic en la Restore Ascolumna y cambie los nombres de *.mdfarchivo y el *.ldfarchivo.

ene
fuente