none
Duplicar BD en SQL Server Express RRS feed

  • Pregunta

  • Buenas , tengo una BD que se llama "coches" y me gustaria duplicarla para que tenga el nombre "cochesCOPIA" para ello en el SMMS de SQL Server 2012 Express intento hacerlo mediante estos comandos

    DECLARE @fileName nvarchar(400); 
    DECLARE @DB_Name nvarchar(50);
    SET @DB_Name = 'coches' 
    SET @fileName = 'c:\Test\original.bak' 
    
    BACKUP database @DB_Name TO DISK = @fileName
    
    



    Y luego intentaria restaurarlo asin

    RESTORE database cochesCopia FROM DISK='c:\Test\original.bak'
    
    


    El error que me da es

    Mens. 3154, Nivel 16, Estado 4, Línea 8
    El conjunto de copia de seguridad contiene una copia de una base de datos distinta de la existente 'cochesCopia'.
    Mens. 3013, Nivel 16, Estado 1, Línea 8
    Fin anómalo de RESTORE DATABASE.
    

    Gracias,

    martes, 17 de enero de 2017 16:17

Respuestas

  • Saludos

    La base de datos  ya existe por lo cual el fallo, como no indicas con replace no la sobresescribe lo que quieres hacer es crear una nueva entonces usas with move

    RESTORE DATABASE NewDatabaseName
          FROM DISK='D:\YourBackupfilename.bak'
          WITH MOVE 'LogicalName of the SourceDatafile' TO 'D:\NewDatabase.mdf',
          MOVE 'Logicalname of sourcelogfile' TO'D:\NewDatabase_log.ldf'

    Gracias al final lo hice de esta forma

    USE master
    
    RESTORE DATABASE [coches]
    FROM DISK = N'c:\borra\copia.bak'
    WITH FILE = 1
    	,MOVE N'coches' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATAcoches.mdf'
    	,MOVE N'coches_log' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\coches_Log.ldf'
    	,NOUNLOAD
    	,REPLACE
    	,STATS = 5
    GO
    
    
    
    
    USE master
    
    RESTORE DATABASE [cochesRestaurada]
    FROM DISK = N'c:\borra\copia.bak'
    WITH FILE = 1
    	,MOVE N'coches' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\cochesRestaurada.mdf'
    	,MOVE N'coches_log' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\cochesRestaurada_Log.ldf'
    	,NOUNLOAD
    	,REPLACE
    	,STATS = 5
    GO
    
    

    Gracias a todos.

    miércoles, 18 de enero de 2017 16:19

Todas las respuestas

  • Saludos

    La base de datos  ya existe por lo cual el fallo, como no indicas con replace no la sobresescribe lo que quieres hacer es crear una nueva entonces usas with move

    RESTORE DATABASE NewDatabaseName
          FROM DISK='D:\YourBackupfilename.bak'
          WITH MOVE 'LogicalName of the SourceDatafile' TO 'D:\NewDatabase.mdf',
          MOVE 'Logicalname of sourcelogfile' TO'D:\NewDatabase_log.ldf'

    martes, 17 de enero de 2017 16:31
  • Otra opción, además de añadir el "with move", es usar el asistente para copiar bases de datos (clic-derecho en SSMS sobre la base de datos -> Tareas -> copiar base de datos).

    También puedes hacer un detach, copiar el fichero en el disco, y volver a hacer un attach (del original y de la copia).

    Otra opción más es Tasks -> Export Data Tier Application. Esto genera un fichero .bacpak que luego se puede importar con Tasks -> Import Data Tier Application.

    Y otra opción es Tasks -> Generate Scripts. Generas todo el script de la base de datos, con las opciones que quieras (incluir o no incluir los datos además del esquema). Después editas el script y le cambias el nombre a la base de datos, y ejecutas el script.

    martes, 17 de enero de 2017 19:32
  • Saludos

    La base de datos  ya existe por lo cual el fallo, como no indicas con replace no la sobresescribe lo que quieres hacer es crear una nueva entonces usas with move

    RESTORE DATABASE NewDatabaseName
          FROM DISK='D:\YourBackupfilename.bak'
          WITH MOVE 'LogicalName of the SourceDatafile' TO 'D:\NewDatabase.mdf',
          MOVE 'Logicalname of sourcelogfile' TO'D:\NewDatabase_log.ldf'

    Gracias al final lo hice de esta forma

    USE master
    
    RESTORE DATABASE [coches]
    FROM DISK = N'c:\borra\copia.bak'
    WITH FILE = 1
    	,MOVE N'coches' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATAcoches.mdf'
    	,MOVE N'coches_log' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\coches_Log.ldf'
    	,NOUNLOAD
    	,REPLACE
    	,STATS = 5
    GO
    
    
    
    
    USE master
    
    RESTORE DATABASE [cochesRestaurada]
    FROM DISK = N'c:\borra\copia.bak'
    WITH FILE = 1
    	,MOVE N'coches' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\cochesRestaurada.mdf'
    	,MOVE N'coches_log' TO N'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\cochesRestaurada_Log.ldf'
    	,NOUNLOAD
    	,REPLACE
    	,STATS = 5
    GO
    
    

    Gracias a todos.

    miércoles, 18 de enero de 2017 16:19