una tabla significa servidores restaurar registros que otra insertar duplicar diferentes datos copiar compatibilidad sql-server sql-server-2008-express

tabla - ¿Cómo puedo clonar una base de datos de SQL Server en el mismo servidor en SQL Server 2008 Express?



que significa compatibilidad de base de datos (13)

Tengo un sistema MS SQL Server 2008 Express que contiene una base de datos que me gustaría ''copiar y renombrar'' (para propósitos de prueba) pero no conozco una forma sencilla de lograrlo.

Noté que en la versión R2 de SQL Server hay un asistente de copia de base de datos, pero lamentablemente no puedo actualizar.

La base de datos en cuestión es alrededor de un concierto. Intenté restaurar una copia de seguridad de la base de datos que quiero copiar en una nueva base de datos, pero sin suerte.


  1. Instale Microsoft SQL Management Studio, puede descargarlo gratis desde el sitio web de Microsoft:

    Versión 2008

    Microsoft SQL Management Studio 2008 es parte de SQL Server 2008 Express con servicios avanzados

    Versión 2012

    Haga clic en el botón de descarga y verifique ENU / x64 / SQLManagementStudio_x64_ENU.exe

    Versión 2014

    Haga clic en el botón de descarga y verifique MgmtStudio 64BIT / SQLManagementStudio_x64_ENU.exe

  2. Abra Microsoft SQL Management Studio

  3. Copia de seguridad de la base de datos original en el archivo (db -> Tarea -> Copia de seguridad).
  4. Crear base de datos vacía con nuevo nombre (clonar).
  5. Haga clic para clonar la base de datos y abrir el cuadro de diálogo de restauración (ver imagen)
  6. Seleccione Dispositivo y agregue el archivo bakcup del paso 1.
  7. Cambiar el destino para probar la base de datos
  8. Cambie la ubicación de los archivos de la base de datos, debe ser diferente del original. Puede escribir directamente en el cuadro de texto, simplemente agregue postfix. (NOTA: el orden es importante. Seleccione la casilla de verificación y luego cambie los nombres de los archivos).
  9. Verifique CON REEMPLAZAR Y CON MANTENER REEMPLAZO

En SQL Server 2008 R2, haga una copia de seguridad de la base de datos como un archivo en una carpeta. Luego, elija la opción de restauración que aparece en la carpeta "Base de datos". En el asistente, ingrese el nuevo nombre que desea en la base de datos de destino. Y elija restaurar archivo desde y use el archivo que acaba de crear. Lo logré y fue muy rápido (mi base de datos era pequeña, pero aún así) Pablo.


Este es el script que uso. Un poco complicado pero funciona. Probado en SQL Server 2012.

DECLARE @backupPath nvarchar(400); DECLARE @sourceDb nvarchar(50); DECLARE @sourceDb_log nvarchar(50); DECLARE @destDb nvarchar(50); DECLARE @destMdf nvarchar(100); DECLARE @destLdf nvarchar(100); DECLARE @sqlServerDbFolder nvarchar(100); SET @sourceDb = ''db1'' SET @sourceDb_log = @sourceDb + ''_log'' SET @backupPath = ''E:/tmp/' + sourceDb + ''.bak'' --ATTENTION: file must already exist and SQL Server must have access to it SET @sqlServerDbFolder = ''E:/DB SQL/MSSQL11.MSSQLSERVER/MSSQL/DATA/' SET @destDb = ''db2'' SET @destMdf = @sqlServerDbFolder + @destDb + ''.mdf'' SET @destLdf = @sqlServerDbFolder + @destDb + ''_log'' + ''.ldf'' BACKUP DATABASE @sourceDb TO DISK = @backupPath RESTORE DATABASE @destDb FROM DISK = @backupPath WITH REPLACE, MOVE @sourceDb TO @destMdf, MOVE @sourceDb_log TO @destLdf


La solución, basada en este comentario: https://.com/a/22409447/2399045 . Solo configure los ajustes: nombre de DB, carpeta temporal, carpeta de archivos db. Y después de ejecutar, tendrá la copia de la base de datos con nombre en el formato "sourceDBName_yyyy-mm-dd".

-- Settings -- -- New DB name will have name = sourceDB_yyyy-mm-dd declare @sourceDbName nvarchar(50) = ''MyDbName''; declare @tmpFolder nvarchar(50) = ''C:/Temp/' declare @sqlServerDbFolder nvarchar(100) = ''C:/Databases/' -- Execution -- declare @sourceDbFile nvarchar(50); declare @sourceDbFileLog nvarchar(50); declare @destinationDbName nvarchar(50) = @sourceDbName + ''_'' + (select convert(varchar(10),getdate(), 121)) declare @backupPath nvarchar(400) = @tmpFolder + @destinationDbName + ''.bak'' declare @destMdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + ''.mdf'' declare @destLdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + ''_log'' + ''.ldf'' SET @sourceDbFile = (SELECT top 1 files.name FROM sys.databases dbs INNER JOIN sys.master_files files ON dbs.database_id = files.database_id WHERE dbs.name = @sourceDbName AND files.[type] = 0) SET @sourceDbFileLog = (SELECT top 1 files.name FROM sys.databases dbs INNER JOIN sys.master_files files ON dbs.database_id = files.database_id WHERE dbs.name = @sourceDbName AND files.[type] = 1) BACKUP DATABASE @sourceDbName TO DISK = @backupPath RESTORE DATABASE @destinationDbName FROM DISK = @backupPath WITH REPLACE, MOVE @sourceDbFile TO @destMdf, MOVE @sourceDbFileLog TO @destLdf


Ninguna de las soluciones aquí mencionadas funcionó para mí, estoy usando SQL Server Management Studio 2014.

En su lugar, tuve que desmarcar la casilla de verificación "Realizar copia de seguridad del registro de cola antes de restaurar" en la pantalla "Opciones": en mi versión está marcada de forma predeterminada e impide que se complete la operación de restauración. Después de desmarcarlo, la operación de restauración se realizó sin problemas.


Otra forma de hacer el truco con el asistente de importación / exportación , elegir el origen es su servidor con la base de datos de origen, y luego, en el destino, elija el mismo servidor con la base de datos de destino (primero debe crear la base de datos vacía) y luego presione finalizar.

Creará todas las tablas y transferirá todos los datos a la nueva base de datos,


Puede crear una nueva base de datos y luego ir a tareas, importar datos e importar todos los datos de la base de datos que desea duplicar a la base de datos que acaba de crear.


Puede intentar separar la base de datos, copiar los archivos a nuevos nombres en un símbolo del sistema y luego adjuntar ambas bases de datos.

En SQL:

USE master; GO EXEC sp_detach_db @dbname = N''OriginalDB''; GO

En el símbolo del sistema (he simplificado las rutas de archivo para este ejemplo):

copy c:/OriginalDB.mdf c:/NewDB.mdf copy c:/OriginalDB.ldf c:/NewDB.ldf

En SQL otra vez:

USE master; GO CREATE DATABASE OriginalDB ON (FILENAME = ''C:/OriginalDB.mdf''), (FILENAME = ''C:/OriginalDB.ldf'') FOR ATTACH; GO CREATE DATABASE NewDB ON (FILENAME = ''C:/NewDB.mdf''), (FILENAME = ''C:/NewDB.ldf'') FOR ATTACH; GO


Resulta que había intentado restaurar de una copia de seguridad incorrectamente.

Inicialmente, creé una nueva base de datos y luego intenté restaurar la copia de seguridad aquí. Lo que debería haber hecho, y lo que funcionó al final, fue abrir el cuadro de diálogo de restauración y escribir el nombre de la nueva base de datos en el campo de destino.

Entonces, en resumen, restaurar desde una copia de seguridad hizo el truco.

Gracias por todos los comentarios y sugerencias chicos.


Script basado en la respuesta de Joe ( separar, copiar archivos, adjuntar ambos ).

  1. Ejecute Managment Studio como cuenta de administrador.

No es necesario, pero tal vez el error de acceso denegado en la ejecución.

  1. Configurar el servidor SQL para ejecutar xp_cmdshel

EXEC sp_configure ''show advanced options'', 1 GO RECONFIGURE GO EXEC sp_configure ''xp_cmdshell'', 1 GO RECONFIGURE GO

  1. Ejecute el script, pero escriba sus nombres de @dbName @copyDBName variables @dbName y @copyDBName antes.

USE master; GO DECLARE @dbName NVARCHAR(255) = ''Products'' DECLARE @copyDBName NVARCHAR(255) = ''Products_branch'' -- get DB files CREATE TABLE ##DBFileNames([FileName] NVARCHAR(255)) EXEC('' INSERT INTO ##DBFileNames([FileName]) SELECT [filename] FROM '' + @dbName + ''.sys.sysfiles'') -- drop connections EXEC(''ALTER DATABASE '' + @dbName + '' SET OFFLINE WITH ROLLBACK IMMEDIATE'') EXEC(''ALTER DATABASE '' + @dbName + '' SET SINGLE_USER'') -- detach EXEC(''EXEC sp_detach_db @dbname = '''''' + @dbName + '''''''') -- copy files DECLARE @filename NVARCHAR(255), @path NVARCHAR(255), @ext NVARCHAR(255), @copyFileName NVARCHAR(255), @command NVARCHAR(MAX) = '''' DECLARE @oldAttachCommand NVARCHAR(MAX) = ''CREATE DATABASE '' + @dbName + '' ON '', @newAttachCommand NVARCHAR(MAX) = ''CREATE DATABASE '' + @copyDBName + '' ON '' DECLARE curs CURSOR FOR SELECT [filename] FROM ##DBFileNames OPEN curs FETCH NEXT FROM curs INTO @filename WHILE @@FETCH_STATUS = 0 BEGIN SET @path = REVERSE(RIGHT(REVERSE(@filename),(LEN(@filename)-CHARINDEX(''/', REVERSE(@filename),1))+1)) SET @ext = RIGHT(@filename,4) SET @copyFileName = @path + @copyDBName + @ext SET @command = ''EXEC master..xp_cmdshell ''''COPY "'' + @filename + ''" "'' + @copyFileName + ''"'''''' PRINT @command EXEC(@command); SET @oldAttachCommand = @oldAttachCommand + ''(FILENAME = "'' + @filename + ''"),'' SET @newAttachCommand = @newAttachCommand + ''(FILENAME = "'' + @copyFileName + ''"),'' FETCH NEXT FROM curs INTO @filename END CLOSE curs DEALLOCATE curs -- attach SET @oldAttachCommand = LEFT(@oldAttachCommand, LEN(@oldAttachCommand) - 1) + '' FOR ATTACH'' SET @newAttachCommand = LEFT(@newAttachCommand, LEN(@newAttachCommand) - 1) + '' FOR ATTACH'' -- attach old db PRINT @oldAttachCommand EXEC(@oldAttachCommand) -- attach copy db PRINT @newAttachCommand EXEC(@newAttachCommand) DROP TABLE ##DBFileNames


Si la base de datos no es muy grande, puede consultar los comandos ''Base de datos de script'' en SQL Server Management Studio Express, que se encuentran en un menú contextual fuera del elemento de la base de datos en el explorador.

Puedes elegir lo que todo a script; quieres los objetos y los datos, por supuesto. Luego guardará el script completo en un solo archivo. Luego puedes usar ese archivo para volver a crear la base de datos; solo asegúrese de que el comando USE en la parte superior esté configurado en la base de datos adecuada.


Usando MS SQL Server 2012, necesita realizar 3 pasos básicos:

  1. Primero, genere el archivo .sql que contiene solo la estructura de la base de datos de origen

    • haga clic derecho en la base de datos de origen y luego en Tareas y luego genere secuencias de comandos
    • siga el asistente y guarde el archivo .sql localmente
  2. Segundo, reemplace la base de datos de origen con la de destino en el archivo .sql

    • Haga clic con el botón derecho en el archivo de destino, seleccione Nueva consulta y Ctrl-H o ( Editar - Buscar y reemplazar - Reemplazo rápido )
  3. Finalmente, rellenar con datos.

    • Haga clic derecho en la base de datos de destino, luego seleccione Tareas e Importar datos
    • El menú desplegable de la fuente de datos está establecido en " .net framework proveedor de datos para el servidor SQL " + establece el campo de texto de la cadena de conexión en DATOS ej: Data Source=Mehdi/SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
    • haz lo mismo con el destino
    • marque la tabla que desea transferir o marque la casilla junto a "fuente: ..." para marcarlos todos

Estás listo.


Haga clic derecho en la base de datos para clonar, haga clic en Tasks , haga clic en Copy Database... Sigue al mago y listo.