¿Cómo copio la base de datos SQL Azure a mi servidor de desarrollo local?

164

¿Alguien sabe cómo puedo copiar una base de datos SQL Azure en mi máquina de desarrollo? Me gustaría dejar de pagar para tener una base de datos de desarrollo en la nube, pero es la mejor manera de obtener datos de producción. Copio mi base de datos de producción a una nueva base de datos de desarrollo, pero me gustaría tener esa misma base de datos local.

¿Alguna sugerencia?

BZink
fuente
2
¡Yo uso ese casi siempre! Es pequeño, gratuito, se actualiza constantemente, no instala ningún archivo innecesario, funciona de maravilla, no crea ningún objeto no deseado en la base de datos y hace exactamente lo que su nombre dice.
astaykov
44
Esto se ha vuelto dramáticamente más fácil. Consulte la respuesta de Atom a continuación (febrero de 2018) que explica cómo usar Tareas => Implementar base de datos ... en SSMS.
Jon Crowell el

Respuestas:

129

Hay varias formas de hacer esto:

  1. Usando SSIS (SQL Server Integration Services) . Solo importa dataen tu mesa. Las propiedades de columna, restricciones, claves, índices, procedimientos almacenados, disparadores, configuraciones de seguridad, usuarios, inicios de sesión, etc. no se transfieren. Sin embargo, es un proceso muy simple y se puede hacer simplemente yendo a través del asistente en SQL Server Management Studio.
  2. Uso de la combinación de scripts de creación de SSIS y DB . Esto le proporcionará datos y todos los metadatos que faltan y que SSIS no transfiere. Esto también es muy simple. Primero transfiera datos utilizando SSIS (consulte las instrucciones a continuación), luego cree el script DB Create desde la base de datos SQL Azure y vuelva a reproducirlo en su base de datos local.
  3. Finalmente, puede usar el servicio Importar / Exportar en SQL Azure . Esto transfiere datos (con objetos de esquema) a Azure Blob Storage como BACPAC. Necesitará una cuenta de Azure Storage y lo hará en el portal web de Azure. Es tan simple como presionar un botón "Exportar" en el portal web de Azure cuando selecciona la base de datos que desea exportar. La desventaja es que es solo un procedimiento manual, no conozco una forma de automatizar esto a través de herramientas o scripts, al menos la primera parte que requiere un clic en la página web.

El procedimiento manual para el método # 1 (usando SSIS) es el siguiente:

  • En Sql Server Management Studio (SSMS) cree una nueva base de datos vacía en su instancia local de SQL.
  • Elija Importar datos del menú contextual (haga clic con el botón derecho en la base de datos -> Tareas -> Importar datos ...)
  • Escriba los parámetros de conexión para el origen (SQL Azure). Seleccione ".Net Framework Data Provider for SqlServer" como proveedor.
  • Elija la base de datos local vacía existente como destino.
  • Siga el asistente: podrá seleccionar los datos de las tablas que desea copiar. Puede optar por omitir cualquiera de las tablas que no necesita. Por ejemplo, si mantiene registros de aplicaciones en la base de datos, probablemente no los necesite en su copia de seguridad.

Puede automatizarlo creando un paquete SSIS y volviéndolo a ejecutar cada vez que desee volver a importar los datos. Tenga en cuenta que solo puede importar utilizando SSIS a una base de datos limpia, no puede realizar actualizaciones incrementales en su base de datos local una vez que ya lo haya hecho una vez.

El método # 2 (datos SSID más objetos de esquema) es muy simple. Primero siga los pasos descritos anteriormente, luego cree el script de Creación de DB (haga clic derecho en la base de datos en SSMS, elija Generar Scripts -> Crear Base de Datos). Luego, vuelva a reproducir este script en su base de datos local.

El método # 3 se describe en el Blog aquí: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . Hay un videoclip con el proceso de transferir contenido de DB al almacenamiento de Azure Blob como BACPAC. Después de eso, puede copiar el archivo localmente e importarlo a su instancia de SQL. El proceso de importación de BACPAC a la aplicación de nivel de datos se describe aquí: http://msdn.microsoft.com/en-us/library/hh710052.aspx .

seva titov
fuente
2
Esto funciona, solo una corrección. En el asistente de importación / exportación del servidor, la fuente de datos es '.Net Framework Data Provider for SqlServer'
BZink
¡Excelente! Gracias por la corrección. Recuerdo que uno de los proveedores trabajó y otros no funcionaron para mí, pero no recordaron exactamente cuál.
seva titov
Me falla: 'Error al insertar en la columna de solo lectura "id"'
dumbledad
3
El truco para mí fue comenzar a replicar PK / FK / restricciones en una base de datos vacía, luego deshabilitar temporalmente las restricciones al importar datos. Más precisamente: 1-Cree una base de datos de destino vacía manualmente. 2-Haga clic con el botón derecho en el origen DB> Tareas> Generar secuencias de comandos. Archivo de secuencia de comandos de 3 ejecuciones en la base de datos de destino vacía (ahora la base de datos tiene PK / FK / restricciones correctas, pero no tiene datos). 4-Desactiva todas las restricciones ( stackoverflow.com/a/161410 ). 5-Importar datos (haga clic con el botón derecho en DB de destino> Tareas> Importar datos). 6-Vuelva a habilitar las restricciones. ¡Espero que esto ayude!
Mathieu Frenette
1
@JoSmo, los métodos 1 y 2 no requieren una cuenta de almacenamiento. Sin embargo, recomendaría tener una cuenta de almacenamiento en el mismo centro de datos que su base de datos SQL Azure. La razón es que puede usarlo para copias de seguridad y restauración de bases de datos. Si no tiene permisos administrativos para su suscripción de Azure, busque a alguien en su organización que tenga suficientes derechos para crear nuevas cuentas de almacenamiento y darle claves de acceso. Como ya tiene acceso a la base de datos, no hay razón para denegar el acceso a la cuenta de almacenamiento.
seva titov
66

Copie los datos de la base de datos de Azure en la base de datos local: ahora puede usar SQL Server Management Studio para hacer esto de la siguiente manera:

  • Conéctese a la base de datos SQL Azure.
  • Haga clic derecho en la base de datos en Object Explorer.
  • Elija la opción "Tareas" / "Implementar base de datos en SQL Azure".
  • En el paso denominado "Configuración de implementación", conecte SQL Server local y cree una nueva base de datos.

ingrese la descripción de la imagen aquí

"Siguiente" / "Siguiente" / "Finalizar"

Átomo
fuente
9
Awesome👏🏻 esto no está tan claro en SSMS desde la "base de datos SQL Azure a implementar" es algo engañoso ...
EeKay
12
Con mucho, la solución más fácil mezclada con el nombre de menú más engañoso. Gracias por publicar esto.
Kevin Giszewski el
Esto es más simple, pero el inconveniente es que no puede elegir qué tablas desea respaldar y cuáles no. En mi empresa, tenemos una tabla de archivos adjuntos que contiene gigabytes de archivos adjuntos (imágenes, etc.). Normalmente no queremos esto, ya que será una copia para siempre. No podemos excluir esta tabla usando este método.
Rosdi Kasim
33

Solo quería agregar una versión simplificada de la respuesta de dumbledad , ya que es la correcta.

  1. Exporte la Base de datos SQL de Azure a un archivo BACPAC en el almacenamiento de blobs.
  2. Desde dentro del estudio SQL Management, haga clic con el botón derecho en su base de datos, haga clic en "importar aplicación de nivel de datos".
  3. Se le pedirá que ingrese la información para acceder al archivo BACPAC en su almacenamiento de blobs de Azure.
  4. Presiona el siguiente par de veces y ... ¡Listo!
Josh Mouch
fuente
44
¿Recibo un error que dice que target no puede ser sql azure v12?
Zapnologica
2
Asegúrese de tener una versión de SSMS que importará ese BACPAC: msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant el
Incluso con esta versión de SSMS, sigo recibiendo un error debido al destino Azure sql db 12.
Preza8
28

En SQL Server 2016 Management Studio, el proceso para obtener una base de datos azul en su máquina local se ha simplificado.

Haga clic derecho en la base de datos que desea importar, haga clic en Tareas> Exportar aplicación de nivel de datos y exporte su base de datos a un archivo .dacpac local.

En su instancia local de servidor SQL de destino, puede hacer clic con el botón derecho en Bases de datos> Importar aplicación de nivel de datos , y una vez que sea local, puede hacer cosas como hacer una copia de seguridad y restaurar la base de datos.

Adam Skinner
fuente
55
Eso es todo. NÓTESE BIEN. "Exportar nivel de datos" incluye datos, "Extraer nivel de datos" solo le da definiciones
Colin
20

Creo que ahora es mucho más fácil.

  1. Inicie SQL Management Studio
  2. Haga clic derecho en "Bases de datos" y seleccione "Importar aplicación de nivel de datos ..."
  3. El asistente lo guiará por el proceso de conectarse a su cuenta de Azure, crear un archivo BACPAC y crear su base de datos.

Además, uso Sql Backup y FTP ( https://sqlbackupandftp.com/ ) para hacer copias de seguridad diarias en un servidor FTP seguro. Simplemente extraigo un archivo BACPAC reciente de allí y lo importo en el mismo cuadro de diálogo, que es más rápido y fácil de crear una base de datos local.

Este chico
fuente
9

También puede consultar SQL Azure Data Sync en el Portal de administración de Windows Azure. Le permite recuperar y restaurar una base de datos completa, incluidos el esquema y los datos entre SQL Azure y SQL Server.

Voclare
fuente
1
La sincronización de datos SQL no debe usarse como parte de su estrategia de copia de seguridad, ya que existen varias limitaciones. No versiona, solo hace una copia de seguridad de los datos y no de otros objetos. Para obtener más información, consulte el tema Preguntas frecuentes sobre la sincronización de datos SQL. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Shaun Luttin el
1
Data Sync es bastante horrible: incluso hoy (varios años después de esta publicación) hay un montón de errores y realmente puede arruinar tu base de datos; también tiene muchas limitaciones.
William
5

Es muy facil. Esto funcionó para mí ... en términos de obtener una base de datos Azure SQL en su máquina local ...:

  1. Abra su SQL Management Studio y conéctese a su Azure SQL Server.
  2. Seleccione la base de datos que le gustaría acceder a su máquina local y haga clic derecho ... seleccione "Generar secuencias de comandos". Sigue las indicaciones ...

PERO, tenga cuidado de que si TAMBIÉN desea los DATOS, así como los scripts, asegúrese de verificar las Opciones avanzadas antes de comenzar a generar ... desplácese hacia abajo hasta "Tipos de datos para el script", y asegúrese de tener " Esquema y datos "... o lo que sea apropiado para usted.

Le dará un buen archivo de secuencia de comandos SQL que luego se puede ejecutar en su máquina local y creará la base de datos y la completará con todos los datos.

Tenga en cuenta que en mi caso, no tengo FK u otras restricciones ... además, no era mucha información.

No recomiendo esto como mecanismo de respaldo en general ...

Barry Theunissen
fuente
2
Tengo que decir que esto funcionó notablemente bien sin problemas; claves foráneas recreadas a la perfección. La secuencia de comandos SQL resultante era demasiado grande para abrir en SSMS, o de hecho en muchos editores de texto, pero yo era capaz de utilizar la línea de comandossqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking
5

Utilizando msdeploy.exe

Advertencia: msdeploy.exeno puede crear la base de datos de destino por sí sola, por lo que primero debe crearla manualmente.

  1. Copie la cadena de conexión en la página de propiedades de la base de datos. Ajústelo para que contenga una contraseña correcta. página de propiedades de la base de datos
  2. Obtenga la cadena de conexión para la base de datos de destino.
  3. Corre msdeploy.exeasí:

    "c:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -dest:dbDacFx="destination_DB_connection_string",dropDestinationDatabase=true -source:dbDacFx="azure_DB_connection_string",includeData=true -verbose

Utilizando SqlPackage.exe

  1. Exporte el DB azul a un paquete bacpac.

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Export /ssn:"azure_db_server" /sdn:"azure_db_name" /su:"user_name" /sp:"password" /tf:"file.bacpac"
  2. Importe el paquete a una base de datos local.

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Import /SourceFile:"file.bacpac" /TargetServerName:".\SQLEXPRESS" /TargetDatabaseName:CopyOfAzureDb
Gebb
fuente
3

En SQL Server Management Studio

Haga clic derecho en la base de datos que desea importar, haga clic en Tareas> Exportar aplicación de nivel de datos y exporte su base de datos a un archivo .dacpac local.

En su instancia local de servidor SQL de destino, puede hacer clic con el botón derecho en Bases de datos> Importar aplicación de nivel de datos, y una vez que sea local, puede hacer cosas como hacer una copia de seguridad y restaurar la base de datos.

Ali Sufyan
fuente
2

No pude hacer que la importación / exportación de SSIS funcionara porque recibí el error 'Error al insertar en la columna de solo lectura "id". Tampoco pude conseguir que http://sqlazuremw.codeplex.com/ funcionara, y los enlaces anteriores a SQL Azure Data Sync no funcionaron para mí.

Pero encontré una excelente publicación de blog sobre archivos BACPAC: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

En el video de la publicación, el autor de la publicación del blog recorre seis pasos:

  1. Cree o vaya a una cuenta de almacenamiento en el Portal de administración de Azure. Necesitará la URL de blob y la clave de acceso principal de la cuenta de almacenamiento.

  2. La publicación del blog aconseja crear un nuevo contenedor para el archivo bacpac y sugiere usar el Explorador de almacenamiento de Azure para eso. (Nota: necesitará la URL de blob y la clave de acceso principal de la cuenta de almacenamiento para agregarla al Explorador de almacenamiento de Azure).

  3. En el Portal de administración de Azure, seleccione la base de datos que desea exportar y haga clic en 'Exportar' en la sección Importar y exportar de la cinta.

  4. El diálogo resultante requiere su nombre de usuario y contraseña para la base de datos, la URL del blob y la clave de acceso. No olvide incluir el contenedor en la URL del blob e incluir un nombre de archivo (por ejemplo, https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. Después de hacer clic en Finalizar, la base de datos se exportará al archivo BACPAC. Esto puede tomar un tiempo. Es posible que vea un archivo de cero bytes que se muestra inmediatamente si se registra en el Explorador de almacenamiento de Azure. Este es el servicio de importación / exportación que comprueba que tiene acceso de escritura al blob-store.

  6. Una vez hecho esto, puede usar el Explorador de almacenamiento de Azure para descargar el archivo BACPAC y luego, en el SQL Server Management Studio, haga clic con el botón derecho en la carpeta de la base de datos del servidor local y elija Importar aplicación de nivel de datos que iniciará el asistente que lee el archivo BACPAC para producir la copia de su base de datos de Azure. El asistente también puede conectarse directamente al blob-store para obtener el archivo BACPAC si prefiere no copiarlo localmente primero.

El último paso solo puede estar disponible en la edición SQL Server 2012 de SQL Server Management Studio (esa es la versión que estoy ejecutando). No tengo las anteriores en esta máquina para verificar. En la publicación del blog, el autor utiliza la herramienta de línea de comandos DacImportExportCli.exe para la importación, que creo que está disponible en http://sqldacexamples.codeplex.com/releases

dumbledad
fuente
Si bien no seguí esto exactamente, me llevó en la dirección correcta. Puede omitir la descarga del archivo bacpac y apuntar al almacenamiento de blobs de Azure directamente desde SQL Server Management Studio.
Josh Mouch
2

Con respecto a "No pude hacer que la importación / exportación de SSIS funcionara, recibí el error 'Error al insertar en la columna de solo lectura" id "'. Esto se puede solucionar especificando en la pantalla de mapeo que desea permitir que se inserten elementos de identidad.

Después de eso, todo funcionó bien con el asistente de importación / exportación de SQL para copiar desde Azure a la base de datos local.

Solo tenía el Asistente de importación / exportación de SQL que viene con SQL Server 2008 R2 (funcionó bien) y Visual Studio 2012 Express para crear una base de datos local.

rsh
fuente
2

Puede probar con la herramienta "Asistente de migración de base de datos SQL". Esta herramienta proporciona la opción de importar y exportar datos desde azure sql.

Por favor, consulte más detalles aquí.

https://sqlazuremw.codeplex.com/

Krishna_K_Systematix
fuente
1

Puede usar los nuevos Servicios móviles de Azure para realizar una exportación de copia de seguridad nocturna de SQL Azure a un archivo .bacpac alojado en Azure Storage. Esta solución es 100% en la nube, no requiere una herramienta de terceros y no requiere una instancia local de SQL Server alojada para descargar / copiar / hacer copias de seguridad de nada.

Hay alrededor de 8 pasos diferentes, pero todos son fáciles: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx

Ben Barreth
fuente
¡Esto parece realmente prometedor! ¿Alguna idea de si esto funcionará con las Federaciones de Azure?
Tim Lentine
@Tim lo siento, no lo sé. Para empezar, hacer esto a través de Mobile Services es una solución, por lo que no me sorprendería si no fuera así.
Ben Barreth
1

Siempre uso la función Importar / Exportar, que parece ser la más fácil de todas.

Paso 1:

Obtenga la copia de seguridad de la instancia azul de la siguiente manera, Seleccione la base de datos → Haga clic derecho → Tareas → Exportar aplicación de nivel de datos.

Paso 2: proporcione un nombre específico para el archivo de copia de seguridad y guárdelo en la ubicación deseada

Paso 3: Eso es todo, ha realizado una copia de seguridad de la base de datos desde la instancia de SQL a su local. Vamos a restaurarlo a lo local. Copie la base de datos respaldada en su unidad C. Ahora abra PowerShell con derechos de administrador y navegue hasta la unidad C

Paso 4: descarguemos el script de PowerShell para eliminar la clave maestraRemoveMasterKey.ps1 tener el script en la misma unidad en este caso su C.

Paso 5: Ejecute el script de la siguiente manera,. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

Eso es todo, ahora puede restaurarlo en MSSQL 2017 en su entorno local.

Paso 6: conéctese a su servidor local y haga clic en Bases de datos → Importar aplicación de nivel de datos

Paso 7 : asigne un nombre a su base de datos para restaurar.

¡Ahora verás todo en verde!

Lee mi blog con diagramas.

Sajeetharan
fuente
0

El truco para mí fue comenzar a replicar PK / FK / restricciones en una base de datos vacía, luego deshabilitar temporalmente las restricciones al importar datos (consulte https://stackoverflow.com/a/161410 ).

Más precisamente:

  1. Cree una base de datos de destino vacía manualmente;
  2. Haga clic con el botón derecho en el origen DB> Tareas> Generar secuencias de comandos;
  3. Ejecute el archivo de script en la base de datos de destino vacía (ahora la base de datos tiene PK / FK / restricciones correctas, pero no tiene datos);
  4. Deshabilitar todas las restricciones;
  5. Importar datos (haga clic con el botón derecho en DB de destino> Tareas> Importar datos);
  6. Vuelva a habilitar las restricciones.

¡Espero que esto ayude!

Mathieu Frenette
fuente
0

Ahora puede usar SQL Server Management Studio para hacer esto.

  • Conéctese a la base de datos SQL Azure.
  • Haga clic derecho en la base de datos en Object Explorer.
  • Elija la opción "Tareas" / "Implementar base de datos en SQL Azure".
  • En el paso denominado "Configuración de implementación", seleccione su conexión de base de datos local.
  • "Siguiente" / "Siguiente" / "Finalizar" ...
ferhrosa
fuente
No pude hacer esto porque el botón "Siguiente" está atenuado hasta que selecciono otra base de datos de Azure como la conexión de destino
Colin
0

Si alguien tiene un problema para importar un Bacpac de una base de datos que usa Azure SQL Sync , Sandrino Di Mattia desarrolló una gran aplicación simple para resolver esto.

  1. Exporte un Bacpac de su DB
  2. Descargue el binario de Di Mattia
  3. Con esta aplicación de consola, repare el Bacpac descargado
  4. Lauch SSMS
  5. Haga clic derecho en "Bases de datos" y seleccione "Importar aplicación de nivel de datos"
  6. Seleccione el Bacpac reparado.
Géza
fuente
0

Si alguien quiere una opción gratuita y efectiva (y no le importa hacerlo manualmente) para hacer una copia de seguridad de la base de datos en Local, use la funcionalidad de comparación de datos y esquemas integrada en la última versión de Microsoft Visual Studio 2015 Community Edition (Gratis) o Professional / Premium / Ultimate edición. ¡Funciona a las mil maravillas!

Tengo una cuenta de BizPark con Azure y no hay forma de hacer una copia de seguridad de la base de datos directamente sin pagar. Encontré esta opción en VS Works.

La respuesta se toma de https://stackoverflow.com/a/685073/6796187

Crennotech
fuente
0

Hola, estoy usando la herramienta SQLAzureMW para la migración y administración de SQLAzure DB. Muy útil Se descargó de codeplex, pero actualmente no está disponible, el codeplex se cerrará, la misma herramienta de aplicación ahora está disponible en GttHub. El siguiente enlace explica cómo usar esta herramienta y también está disponible la aplicación para descargar.

https://github.com/twright-msft/azure-content/blob/master/articles/sql-database/sql-database-migration-wizard.md

Raja Subbiah
fuente