Restauración local de Azure SQL Database Bacpac

130

He creado una copia de seguridad BACPAC de mi base de datos SQL Azure usando la opción "Exportar" dentro de la Consola de administración de Azure.

Después de descargar esto en mi máquina, estoy un poco atascado en cómo puedo restaurar esto en una instancia local de SQL Server. Encontré la herramienta DacImportExportCli pero no pude encontrar un ejemplo de restauración local.

Además, si alguien ha escrito un guión que haga esto (por lo que se puede programar) sería genial.

Ben Foster
fuente
8
Esto puede ser una cuestión de SQL Server 2012, pero en SQL Server Management Studio si hago clic con el botón derecho en la carpeta de la base de datos de mi servidor local y elijo Importar aplicación de nivel de datos que inicia un asistente que lee el archivo BACPAC para producir la copia de mi 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.
dumbledad
alguna vez te lo imaginate?
Nate
3
@dumbledad Creo que es una cuestión de SQL 2012 SSMS importar la aplicación de nivel de datos, 2008R2 solo parece tener la capacidad de exportar DACPAC, no puedo ver una opción de importación.
jamiebarrow

Respuestas:

179

Esto se puede hacer simplemente a través de SQL Server Management Studio 2012

  1. Haga clic derecho en el nodo Conexión> Bases de datos y seleccione " Importar aplicación de nivel de datos ... "
  2. Seleccione " Siguiente " en el paso de introducción.
  3. ingrese la descripción de la imagen aquí
  4. Explore o conéctese a una cuenta de almacenamiento donde se guardan las copias de seguridad.
Josiah Ruddell
fuente
2
Esto es perfecto. La herramienta RedGate puede ser escamosa. Me alegra ver una opción compatible con MS.
gilly3
2
¿Funciona con SQL Express 2012? Porque tengo el siguiente mensaje de error: El recuento no carga el modelo de esquema del paquete. (Microsoft.SqlServer.Dac) ------------------------------ INFORMACIÓN ADICIONAL: Error interno. El tipo de plataforma de destino interno SqlAzureDatabaseSchemaProvider no admite la versión de archivo de esquema '2.5'. (Archivo: C: \ Users \ xxxxx \ Downloads \ dbname-2013-10-10-20-2.bacpac) (Microsoft.Data.Tools.Schema.Sql)
Antoine Meltzheim
@ElTone Acabo de restaurar un bacpac directamente desde Azure Storage a mi base de datos local de SQL Server Express 2012 usando Management Studio. No vi ningún error y los datos parecen estar allí. Alguien menciona que la instalación de una versión más nueva de SQL Server Data Tools los ayudó (pero no se refieren a Management Studio) social.msdn.microsoft.com/Forums/windowsazure/en-US/…
Juha Palomäki
@Juha Palomäki Correcto: la instalación de la última versión de SSDT resolvió el problema. Todo está mejor ahora.
Antoine Meltzheim
44
Parece que hay alguna limitación sobre el tamaño de los archivos bacpac que puede importar con Management Studio. Si encuentra la excepción OutOfMemory, verifique la respuesta de Flea sobre cómo usar la herramienta de línea de comandos SqlPackage.exe
Juha Palomäki
52

Necesitaba exportar una base de datos SQL Azure y luego importarla a un servidor local SQL 2008 R2 (Nota: también estoy usando Visual Studio 2010). Microsoft ciertamente hizo todo lo posible para que esto fuera una tarea dolorosa, sin embargo, pude hacerlo haciendo lo siguiente:

  1. Vaya a este enlace http://msdn.microsoft.com/en-us/jj650014 e instale las herramientas de datos de SQL Server para Visual Studio 2010

  2. Esto se instalará en su disco local. En mi caso, aquí es donde lo puso: C: \ Archivos de programa (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin

  3. Busque esto a través de la línea de comando o powershell

  4. Vas a querer ejecutar el SqlPackage.exe

  5. Abra este enlace para ver una lista de todas las opciones de parámetros para SqlPackage.exe ( http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx )

  6. Aquí está mi línea de comando que necesitaba ejecutar para importar un archivo .bacpac a mi servidor SQL 2008 R2 local:

    . \ SqlPackage.exe / a: Importar /sf:C:\mydatabasefile.bacpac / tdn: NorthWind / tsn: BINGBONG

/tdn es el nombre de la base de datos a la que desea restaurar su archivo bacpac. /tsnes el nombre de su servidor SQL.

Puede ver todas estas descripciones de parámetros en el enlace del n. ° 5.

Pulga
fuente
Esto se puede lograr aún más fácilmente si tiene instalado SSMS 2012. Simplemente puede usar el asistente como se describe en @Josiah arriba, incluso con un servidor 2008 R2.
DanO
2
Pasé tanto tiempo buscando esta solución que, mientras tanto, pude descargar todo el estudio de gestión 2014.
Santhos
SqlPackage me colgaba en el paso de 'actualizar la base de datos' hasta que solté la base de datos de destino por completo
michael_hook
10

Puede restaurar el BACPAC utilizando las herramientas del lado del cliente. Los videos están aquí:

http://dacguy.wordpress.com/2011/09/09/importexport-services/

Las herramientas están disponibles aquí:

http://sqldacexamples.codeplex.com/documentation

a B C
fuente
Se supone que la herramienta admite la importación de bacpac en la base de datos local. Por ejemplo, importar un bacpac a una base de datos usando Windows Auth se vería así: "DacCli -S myserver -E -D nw_restored -F northwind.bacpac -I". Sin embargo, la lista de codeplex de ensamblajes necesarios está desactualizada: ninguno de los enlaces funcionaría, por lo que la herramienta no se ejecutará (tiene un requisito previo en algunos componentes CTP de SQL 2012).
David Airapetyan
He instalado todos los componentes en mi máquina, así que intenté importar un bacpac con DacCli; funcionó (vea la línea de comandos en mi comentario anterior). Tomó unos 20 minutos para 100 MB de bacpac.
David Airapetyan
7

Parece que mis oraciones fueron respondidas. Redgate lanzó hoy su herramienta de copia de seguridad SQL Azure GRATIS: http://www.red-gate.com/products/dba/sql-azure-backup/download

Ben Foster
fuente
Varios problemas: 1. El desarrollo activo de SQL Azure Backup se detiene por ahora (esta nota se muestra cuando ejecuta la última versión de la herramienta) 2. Al realizar una copia de seguridad directamente de Azure a SQL local, no parece pasar por alto bacpac pero en su lugar implementa algún tipo de esquema / copia de datos de cosecha propia. En mi experiencia, ha sido muy lento. 3. Para construir sobre el punto anterior, el mecanismo tiene errores: he tenido varias tablas que no se pueden transferir porque la herramienta no pudo detectar una clave única
David Airapetyan
2
Esta respuesta debe actualizarse o dejar de ser la respuesta aceptada. Desde entonces, la herramienta vinculada se ha convertido en una solución "en la nube" y no admite copias de seguridad locales.
Timothy Strimple
2
La herramienta de respaldo todavía está disponible en red-gate.com/products/dba/sql-azure-backup/Discontinued
Ben Foster,
5

Si está utilizando SSMS 2012, es tan fácil como hacer clic derecho en la carpeta Bases de datos debajo de un servidor en el Explorador de objetos y elegir "Importar aplicación de nivel de datos ...".

Hay un obstáculo en el camino a tener en cuenta: a partir del 26 de marzo de 2013 (cuando necesitaba averiguar cómo hacerlo yo mismo), cuando exporta un .bacpac de Azure, se descargará como un archivo .zip, no es un archivo .bacpac, y el diálogo de archivo que se abre con el botón Examinar en el asistente de importación solo mostrará * .bacpac o . en los filtros de archivo, lo que implica que .zip no es compatible. Sin embargo, si cambia el filtro a . , seleccione su .zip descargado y haga clic en Siguiente, el asistente continuará normalmente.

Adam Anderson
fuente
2
Esta es la respuesta correcta. Ahora puede instalar la versión independiente gratuita de SSMS 2016 y ofrece todas estas características
Aaron,
3

Aquí hay un script para restaurar un montón de archivos bacpac a la vez: Restauración masiva de archivos bacpac locales

cd [FOLDERPATH]
$goodlist = dir
cd 'C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin'
foreach($i in $goodlist){ $name = $i.Name; $namer = $i.Name.Substring(0, $i.Name.length - 7); .\SqlPackage.exe /a:Import /sf:[FOLDERPATH]\$name /tdn:$namer /tsn:[SERVERNAME] }
Jeffrey Rosselle
fuente