script restaurar restauracion respaldo query por para hacer datos copia codigo sql-server-2008 backup restore

sql server 2008 - restauracion - ¿Cómo restaurar a una base de datos diferente en el servidor sql?



script para hacer backup sql server (9)

Tengo una copia de seguridad de Database1 de hace una semana. La copia de seguridad se realiza semanalmente en el programador y obtengo un archivo .bak . Ahora quiero jugar con algunos datos, así que necesito restaurarlos en una base de datos diferente: Database2 .

He visto esta pregunta: Restaurar la base de datos de SQL Server en la misma PC con un nombre diferente y el paso recomendado es cambiar el nombre de la base de datos original, pero estoy fuera de esa opción ya que estoy en el servidor de producción y realmente no puedo hacerlo.

¿Hay alguna otra forma de restaurarlo en Database2 , o al menos, cómo navego por los datos de ese archivo .bak?

Gracias.

ps: la segunda respuesta del enlace de arriba parecía prometedora pero sigue terminando con error:

Restore Filelist está terminando anormalmente


Aquí se explica cómo restaurar una copia de seguridad como un archivo db adicional con un nombre de base de datos único.

Para SQL 2005 esto funciona muy rápido. Estoy seguro de que las versiones más nuevas funcionarán de la misma manera.

Primero, no es necesario que desconecte su db original. Pero por seguridad, me gusta. En mi ejemplo, voy a montar un clon de mi base de datos de "facturación" y se llamará "billingclone".

1) Haga una buena copia de seguridad de la base de datos de facturación

2) Por seguridad, tomé el original fuera de línea de la siguiente manera:

3) Abra una nueva ventana de consulta

**¡IMPORTANTE! Mantenga esta ventana de consulta abierta hasta que haya terminado! ¡Necesitas restaurar el db desde esta ventana!

Ahora ingrese el siguiente código:

-- 1) free up all USER databases USE master; GO -- 2) kick all other users out: ALTER DATABASE billing SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO -- 3) prevent sessions from re-establishing connection: ALTER DATABASE billing SET OFFLINE;

3) A continuación, en Management Studio, haga clic en Bases de datos en el Explorador de objetos, seleccione "Restaurar base de datos".

4) ingrese un nuevo nombre en el campo "A la base de datos". IE billingclone

5) En Source for Restore, haga clic en "From Device" y haga clic en el botón ... navigate

6) Haga clic en Agregar y navegue hasta su copia de seguridad

7) Ponga una marca de verificación al lado de Restaurar (Seleccione los conjuntos de copia de seguridad para restaurar)

8) luego seleccione la página OPCIONES en la esquina superior izquierda

9) Ahora edite los nombres de los archivos de la base de datos en RESTAURAR COMO. Haga esto tanto para el db como para el registro. IE billingclone.mdf y billingclone_log.ldf

10) ahora presiona OK y espera a que la tarea se complete.

11) Presione refresh en su Object Explorer y verá su nuevo db

12) Ahora puede volver a poner su db de facturación en línea. Use la misma ventana de consulta que usó para desconectar la facturación. Use este comando:

-- 1) free up all USER databases USE master; GO -- 2) restore access to all users: ALTER DATABASE billing SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO -- 3) put the db back online: ALTER DATABASE billing SET ONLINE;

¡hecho!


En realidad es un poco más simple que restaurar en el mismo servidor. Básicamente, simplemente recorre las opciones de "Restaurar base de datos". Aquí hay un tutorial para ti:

http://www.techrepublic.com/blog/window-on-windows/how-do-i-restore-a-sql-server-database-to-a-new-server/454

Especialmente dado que se trata de una restauración sin producción, puede sentirse cómodo simplemente intentándolo sin preocuparse demasiado por los detalles. Simplemente coloque sus archivos SQL donde los quiere en su nuevo servidor y asígnele el nombre que desee y estará listo.


En realidad, no hay necesidad de restaurar la base de datos en términos nativos de SQL Server, ya que "quieres manipular algunos datos" y "navegar a través de los datos de ese archivo .bak".

Puede utilizar ApexSQL Restore , una herramienta de SQL Server que conecta copias de seguridad de bases de datos SQL nativas y comprimidas y copias de seguridad de registros de transacciones como bases de datos en vivo , accesibles a través de SQL Server Management Studio, Visual Studio o cualquier otra herramienta de terceros. Permite adjuntar copias de seguridad completas, diferenciales y de registro de transacciones individuales o múltiples

Además, creo que puedes hacer el trabajo mientras la herramienta está en modo de prueba completamente funcional (14 días)

Descargo de responsabilidad: trabajo como ingeniero de soporte de productos en ApexSQL


Esto es lo que he improvisado de varias publicaciones para copiar una base de datos usando copia de seguridad y restauración con movimiento para arreglar la ubicación física y SQL adicional para corregir el nombre lógico.

/** * Creates (or resets) a Database to a copy of the template database using backup and restore. * * Usage: Update the @NewDatabase value to the database name to create or reset. */ DECLARE @NewDatabase SYSNAME = ''new_db''; -- Set up USE tempdb; DECLARE @TemplateBackups SYSNAME = ''TemplateBackups''; DECLARE @TemplateDatabase SYSNAME = ''template_db''; DECLARE @TemplateDatabaseLog SYSNAME = @TemplateDatabase + ''_log''; -- Create a backup of the template database BACKUP DATABASE @TemplateDatabase TO DISK = @TemplateBackups WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 100; -- Get the backup file list as a table variable DECLARE @BackupFiles TABLE(LogicalName nvarchar(128),PhysicalName nvarchar(260),Type char(1),FileGroupName nvarchar(128),Size numeric(20,0),MaxSize numeric(20,0),FileId tinyint,CreateLSN numeric(25,0),DropLSN numeric(25, 0),UniqueID uniqueidentifier,ReadOnlyLSN numeric(25,0),ReadWriteLSN numeric(25,0),BackupSizeInBytes bigint,SourceBlockSize int,FileGroupId int,LogGroupGUID uniqueidentifier,DifferentialBaseLSN numeric(25,0),DifferentialBaseGUID uniqueidentifier,IsReadOnly bit,IsPresent bit,TDEThumbprint varbinary(32)); INSERT @BackupFiles EXEC(''RESTORE FILELISTONLY FROM DISK = '''''' + @TemplateBackups + ''''''''); -- Create the backup file list as a table variable DECLARE @NewDatabaseData VARCHAR(MAX); DECLARE @NewDatabaseLog VARCHAR(MAX); SELECT @NewDatabaseData = PhysicalName FROM @BackupFiles WHERE Type = ''D''; SELECT @NewDatabaseLog = PhysicalName FROM @BackupFiles WHERE Type = ''L''; SET @NewDatabaseData = REPLACE(@NewDatabaseData, @TemplateDatabase, @NewDatabase); SET @NewDatabaseLog = REPLACE(@NewDatabaseLog, @TemplateDatabase, @NewDatabase); RESTORE DATABASE @NewDatabase FROM DISK = @TemplateBackups WITH CHECKSUM, RECOVERY, REPLACE, STATS = 100, MOVE @TemplateDatabase TO @NewDatabaseData, MOVE @TemplateDatabaseLog TO @NewDatabaseLog; -- Change Logical File Name DECLARE @SQL_SCRIPT VARCHAR(MAX)='' ALTER DATABASE [{NewDatabase}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''''{TemplateDatabase}'''', NEWNAME=N''''{NewDatabase}''''); ALTER DATABASE [{NewDatabase}] MODIFY FILE (NAME=N''''{TemplateDatabase}_log'''', NEWNAME=N''''{NewDatabase}_log''''); ALTER DATABASE [{NewDatabase}] SET MULTI_USER WITH ROLLBACK IMMEDIATE; SELECT name AS logical_name, physical_name FROM SYS.MASTER_FILES WHERE database_id = DB_ID(N''''{NewDatabase}''''); ''; SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, ''{TemplateDatabase}'', @TemplateDatabase); SET @SQL_SCRIPT = REPLACE(@SQL_SCRIPT, ''{NewDatabase}'', @NewDatabase); EXECUTE (@SQL_SCRIPT);


Para SQL Server 2012, con Sql Server Management Studio, encontré estos pasos de la página de Microsoft útiles para restaurar a un archivo y nombre de base de datos diferentes: (ref: http://technet.microsoft.com/en-us/library/ms175510.aspx )

Tenga en cuenta los pasos 4 y 7 que es importante establecer para no sobreescribir la base de datos existente.

Para restaurar una base de datos a una nueva ubicación y, opcionalmente, cambiar el nombre de la base de datos

  1. Conéctese a la instancia apropiada del Motor de base de datos de SQL Server y luego, en el Explorador de objetos, haga clic en el nombre del servidor para expandir el árbol del servidor.
  2. Haga clic con el botón derecho en Bases de datos y luego haga clic en Restaurar base de datos . Se abre el cuadro de diálogo Restaurar base de datos .
  3. En la página General , use la sección Fuente para especificar el origen y la ubicación de los conjuntos de respaldo para restaurar. Selecciona una de las siguientes opciones:

    • Base de datos

      • Seleccione la base de datos para restaurar desde la lista desplegable. La lista contiene solo bases de datos que se han respaldado según el historial de copias de seguridad de msdb .

        Nota Si la copia de seguridad se toma de un servidor diferente, el servidor de destino no tendrá la información del historial de la copia de seguridad para la base de datos especificada. En este caso, seleccione Dispositivo para especificar manualmente el archivo o dispositivo para restaurar.

    • Dispositivo

      • Haga clic en el botón Examinar (...) para abrir el cuadro de diálogo Seleccionar dispositivos de copia de seguridad . En el cuadro Tipo de medio de copia de seguridad , seleccione uno de los tipos de dispositivos enumerados. Para seleccionar uno o más dispositivos para el cuadro de medios de copia de seguridad , haga clic en Agregar . Después de agregar los dispositivos que desea al cuadro de lista Medios de respaldo , haga clic en Aceptar para regresar a la página General . En el cuadro de lista Fuente: Dispositivo: Base de datos , seleccione el nombre de la base de datos que debe restaurarse.

        Nota Esta lista solo está disponible cuando se selecciona Dispositivo. Solo las bases de datos que tienen copias de seguridad en el dispositivo seleccionado estarán disponibles.

  4. En la sección Destino , el cuadro Base de datos se rellena automáticamente con el nombre de la base de datos que se restaurará. Para cambiar el nombre de la base de datos, ingrese el nuevo nombre en el cuadro Base de datos .
  5. En el cuadro Restaurar en , deje la configuración predeterminada como Hasta la última copia de seguridad tomada o haga clic en Línea de tiempo para acceder al cuadro de diálogo Línea de tiempo de copia de seguridad para seleccionar manualmente un punto en el tiempo para detener la acción de recuperación.
  6. En los conjuntos de Copia de seguridad para restaurar la cuadrícula, seleccione las copias de seguridad para restaurar. Esta cuadrícula muestra las copias de seguridad disponibles para la ubicación especificada. Por defecto, se sugiere un plan de recuperación. Para anular el plan de recuperación sugerido, puede cambiar las selecciones en la grilla. Las copias de seguridad que dependen de la restauración de una copia de seguridad anterior se anulan automáticamente cuando se deselecciona la copia de seguridad anterior.
  7. Para especificar la nueva ubicación de los archivos de la base de datos, seleccione la página Archivos y luego haga clic en Reubicar todos los archivos en la carpeta . Proporcione una nueva ubicación para la carpeta de archivos de datos y la carpeta de archivos de registro . Alternativamente, puede mantener las mismas carpetas y simplemente cambiar el nombre de la base de datos y los nombres de archivo de registro.

Puede crear un nuevo db luego usar el "Asistente de restauración" habilitando la opción Sobrescribir o;

Ver el contenido;

RESTORE FILELISTONLY FROM DISK=''c:/your.bak''

observe los nombres lógicos de .mdf y .ldf a partir de los resultados, luego;

RESTORE DATABASE MyTempCopy FROM DISK=''c:/your.bak'' WITH MOVE ''LogicalNameForTheMDF'' TO ''c:/MyTempCopy.mdf'', MOVE ''LogicalNameForTheLDF'' TO ''c:/MyTempCopy_log.ldf''

Para crear la base de datos MyTempCopy con los contenidos de your.bak .

Ejemplo (restaura una copia de seguridad de una base de datos llamada ''línea de crédito'' a ''MyTempCopy'';

RESTORE FILELISTONLY FROM DISK=''e:/mssql/backup/creditline.bak'' >LogicalName >-------------- >CreditLine >CreditLine_log RESTORE DATABASE MyTempCopy FROM DISK=''e:/mssql/backup/creditline.bak'' WITH MOVE ''CreditLine'' TO ''e:/mssql/MyTempCopy.mdf'', MOVE ''CreditLine_log'' TO ''e:/mssql/MyTempCopy_log.ldf'' >RESTORE DATABASE successfully processed 186 pages in 0.010 seconds (144.970 MB/sec).


SQL Server 2008 R2:

Para una base de datos existente que desea "restaurar": a partir de una copia de seguridad de una base de datos diferente, siga estos pasos:

  1. Desde la barra de herramientas, haga clic en el botón Monitor de actividad.
  2. Haga clic en procesos. Filtra por la base de datos que deseas restaurar. Elimina todos los procesos en ejecución haciendo clic derecho en cada proceso y seleccionando "matar proceso".
  3. Haga clic con el botón derecho en la base de datos que desea restaurar y seleccione Tareas -> Restaurar -> De la base de datos.
  4. Seleccione el botón de opción "Desde dispositivo:".
  5. Seleccione ... y elija el archivo de copia de seguridad de la otra base de datos desde la que desea restaurar.
  6. Seleccione el conjunto de respaldo del que desea restaurar seleccionando la casilla de verificación a la izquierda del conjunto de respaldo.
  7. Seleccione opciones".
  8. Seleccione Sobrescribir la base de datos existente (CON REEMPLAZAR) Importante:
  9. Cambie el nombre del archivo de datos de filas "Restaurar como" al nombre de archivo de la base de datos existente que desea sobrescribir o simplemente dele un nuevo nombre.
  10. Haga lo mismo con el nombre del archivo de registro.
  11. Verifique en la pantalla del Monitor de actividad que no se generaron nuevos procesos. Si lo fueran, mátenlos.
  12. Haga clic en Aceptar.

Si no existe una base de datos, uso el siguiente código:

ALTER PROCEDURE [dbo].[RestoreBackupToNewDB] @pathToBackup varchar(500),--where to take backup from @pathToRestoreFolder varchar(500), -- where to put the restored db files @newDBName varchar(100) AS BEGIN SET NOCOUNT ON DECLARE @fileListTable TABLE ( [LogicalName] NVARCHAR(128), [PhysicalName] NVARCHAR(260), [Type] CHAR(1), [FileGroupName] NVARCHAR(128), [Size] NUMERIC(20,0), [MaxSize] NUMERIC(20,0), [FileID] BIGINT, [CreateLSN] NUMERIC(25,0), [DropLSN] NUMERIC(25,0), [UniqueID] UNIQUEIDENTIFIER, [ReadOnlyLSN] NUMERIC(25,0), [ReadWriteLSN] NUMERIC(25,0), [BackupSizeInBytes] BIGINT, [SourceBlockSize] INT, [FileGroupID] INT, [LogGroupGUID] UNIQUEIDENTIFIER, [DifferentialBaseLSN] NUMERIC(25,0), [DifferentialBaseGUID] UNIQUEIDENTIFIER, [IsReadOnly] BIT, [IsPresent] BIT, [TDEThumbprint] VARBINARY(32) -- remove this column if using SQL 2005 ) INSERT INTO @fileListTable EXEC(''RESTORE FILELISTONLY FROM DISK =''''''+ @pathToBackup+'''''''') DECLARE @restoreDatabaseFilePath NVARCHAR(500) DECLARE @restoreLogFilePath NVARCHAR(500) DECLARE @databaseLogicName NVARCHAR(500) DECLARE @logLogicName NVARCHAR(500) DECLARE @pathSalt uniqueidentifier = NEWID() SET @databaseLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]=''D'') SET @logLogicName = (SELECT LogicalName FROM @fileListTable WHERE [Type]=''L'') SET @restoreDatabaseFilePath= @pathToRestoreFolder + @databaseLogicName + convert(nvarchar(50), @pathSalt) + ''.mdf'' SET @restoreLogFilePath= @pathToRestoreFolder + @logLogicName + convert(nvarchar(50), @pathSalt) + ''.ldf'' RESTORE DATABASE @newDBName FROM DISK=@pathToBackup WITH MOVE @databaseLogicName TO @restoreDatabaseFilePath, MOVE @logLogicName TO @restoreLogFilePath SET NOCOUNT OFF END


  • Tengo un error similar a este tema cuando restauro una nueva base de datos por una base de datos vieja. (El uso de .bak obtiene el mismo error)

  • Cambié este nombre de base de datos anterior por el nombre de la nueva base de datos (esta misma imagen). Funcionó.

    https://i.stack.imgur.com/Gm30q.jpg