Restauração local do Bacpac do banco de dados SQL do Azure


130

Criei um backup do BACPAC do meu Banco de Dados SQL do Azure usando a opção "Exportar" no Console de Gerenciamento do Azure.

Depois de fazer o download para a minha máquina, estou um pouco confuso sobre como restaurar isso para uma instância local do SQL Server. Me deparei com a ferramenta DacImportExportCli, mas não consegui encontrar um exemplo de restauração local.

Além disso, se alguém tiver escrito um script que faça isso (para que possa ser agendado), isso seria incrível.


8
Isso pode ser uma coisa do SQL Server 2012, mas no SQL Server Management Studio, se eu clicar com o botão direito do mouse na pasta do banco de dados do servidor local e escolher Importar Aplicativo de Camada de Dados que inicia um assistente que lê o arquivo BACPAC para produzir a cópia do meu banco de dados do Azure . O assistente também pode se conectar diretamente ao armazenamento de blob para obter o arquivo BACPAC, se você preferir não copiá-lo localmente primeiro.
dumbledad

Alguma vez percebeste isto?
Nate

3
@dumbledad Eu acredito que é uma coisa do SQL 2012 SSMS importar o aplicativo da camada de dados, o 2008R2 parece ter capacidade de exportar DACPACs, não pode ver uma opção de importação.
jamiebarrow

Respostas:


179

Isso pode ser feito simplesmente através do SQL Server Management Studio 2012

  1. Clique com o botão direito do mouse no nó Conexão> Bancos de dados e selecione " Importar aplicativo da camada de dados ... "
  2. Selecione " Avançar " na etapa de introdução.
  3. insira a descrição da imagem aqui
  4. Procure ou conecte-se a uma conta de armazenamento onde os backups são mantidos.

2
Isto é perfeito. A ferramenta RedGate pode ser flakey. Fico feliz em ver uma opção suportada pela MS.
gilly3

2
Funciona com o sql express 2012? Porque eu tenho a seguinte mensagem de erro: Contar não carregar modelo de esquema do pacote. (Microsoft.SqlServer.Dac) ------------------------------ INFORMAÇÕES ADICIONAIS: Erro interno. O tipo de plataforma de destino interno SqlAzureDatabaseSchemaProvider não suporta a versão do arquivo de esquema '2.5'. (Arquivo: C: \ Users \ xxxxx \ Downloads \ dbname-2013-10-10-20-2.bacpac) (Microsoft.Data.Tools.Schema.Sql)
Antoine Meltzheim

@ElTone Acabei de restaurar um bacpac diretamente do Armazenamento do Azure no meu banco de dados local do SQL Server Express 2012 usando o Management Studio. Não encontrou nenhum erro e os dados parecem estar lá. Alguém menciona que a versão a instalação mais recente do SQL Server Data Tools ajudou (mas eles não estão se referindo Management Studio) social.msdn.microsoft.com/Forums/windowsazure/en-US/...
Juha Palomäki

@Juha Palomäki Correto: A instalação da versão mais recente do SSDT resolveu o problema. Tudo está melhor agora.
Antoine Meltzheim

4
Parece haver alguma limitação no tamanho dos arquivos bacpac que você pode importar com o Management Studio. Se você acertar exceção OutOfMemory, verifique a resposta de Flea sobre como usar o SqlPackage.exe ferramenta de linha de comando
Juha Palomäki

52

Eu precisava exportar um banco de dados do SQL Azure e depois importá-lo para um servidor local do SQL 2008 R2 (observe que também estou usando o Visual Studio 2010). A Microsoft certamente fez o possível para tornar essa tarefa penosa, no entanto, eu pude fazer isso fazendo o seguinte:

  1. Vá para este link http://msdn.microsoft.com/en-us/jj650014 e instale o SQL Server Data Tools para Visual Studio 2010

  2. Isso será instalado na sua unidade local. No meu caso, aqui é onde está: C: \ Arquivos de Programas (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin

  3. Navegue para isso através da linha de comando ou do PowerShell

  4. Você deseja executar o SqlPackage.exe

  5. Abra este link para ver uma lista de todas as opções de parâmetro para SqlPackage.exe ( http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx )

  6. Aqui está minha linha de comando que eu precisava executar para importar um arquivo .bacpac para o meu servidor SQL 2008 R2 local:

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

/tdné o nome do banco de dados no qual você deseja restaurar o arquivo bacpac. /tsné o nome do seu servidor SQL.

Você pode ver todas essas descrições de parâmetros no link do item 5.


Isso pode ser realizado ainda mais facilmente se você tiver o SSMS 2012 instalado. Você pode simplesmente usar o assistente conforme descrito por @Josiah acima, mesmo com um servidor 2008 R2.
Dano

2
Passei tanto tempo procurando essa solução que consegui fazer o download de todo o estúdio de gerenciamento de 2014 enquanto isso.
Santhos 15/05

SqlPackage estava pendurado para mim no degrau 'atualização do banco de dados' até que eu deixei cair o banco de dados destino completamente
michael_hook

10

Você pode restaurar o BACPAC usando as ferramentas do lado do cliente. Os vídeos estão aqui:

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

As ferramentas estão disponíveis aqui:

http://sqldacexamples.codeplex.com/documentation


A ferramenta deve suportar a importação do bacpac no banco de dados local. Por exemplo, importar um bacpac para um banco de dados usando o Windows Auth ficaria assim: "DacCli -S myserver -E -D nw_restored -F northwind.bacpac -I". No entanto, a lista do codeplex de montagens necessárias está desatualizada - nenhum dos links funcionaria, portanto a ferramenta não será executada (ela tem um pré-requisito em alguns componentes CTP do SQL 2012).
David Airapetyan 13/03/12

Como todos os componentes foram instalados na minha máquina, tentei importar um bacpac com o DacCli - funcionou (consulte a linha de comando no meu comentário anterior). Demorou cerca de 20 minutos para 100 MB de bacpac.
David Airapetyan 13/03/12

7

Parece que minhas orações foram atendidas. A Redgate lançou sua ferramenta de backup do SQL Azure GRATUITAMENTE hoje - http://www.red-gate.com/products/dba/sql-azure-backup/download


Vários problemas: 1. O desenvolvimento ativo do Backup do SQL Azure está parado por enquanto (esta observação é exibida quando você executa a versão mais recente da ferramenta) 2. Ao fazer o backup diretamente do Azure para o SQL local, ele não passa pelo bacpac, mas implementa algum tipo de cópia de esquema / dados criada em casa. Na minha experiência, tem sido muito lento. 3. Para construir sobre o ponto anterior, o mecanismo é buggy - Eu tive várias tabelas não conseguir transferir porque a ferramenta não conseguiu detectar uma chave única
David Airapetyan

2
Esta resposta deve ser atualizada ou não é mais a resposta aceita. A ferramenta vinculada tornou-se uma solução em "nuvem" e não suporta backups locais.
Timothy Strimple

2
A ferramenta de backup ainda está disponível em red-gate.com/products/dba/sql-azure-backup/Discontinued
Ben Foster

5

Se você estiver usando o SSMS 2012, é tão fácil quanto clicar com o botão direito do mouse na pasta Bancos de Dados em um servidor no Pesquisador de Objetos e escolher "Importar Aplicativo da Camada de Dados ...".

Há um obstáculo no caminho a ser observado: a partir de 26 de março de 2013 (quando eu precisava descobrir como fazer isso sozinho), quando você exportar um .bacpac do Azure, ele será baixado como um arquivo .zip, não é um arquivo .bacpac, e a caixa de diálogo de arquivo que é aberta pelo botão Procurar no assistente de importação mostrará apenas * .bacpac ou . nos filtros de arquivo, implicando que .zip não é suportado. No entanto, se você alterar o filtro para . , selecione o .zip baixado e clique em Avançar, o assistente continuará normalmente.


2
Essa é a resposta correta. Agora você pode instalar a versão autônoma gratuita do SSMS 2016 e ele oferece todos esses recursos
Aaron

3

Aqui está um script para restaurar vários arquivos bacpac de uma vez: Restauração em massa de arquivos bacpac locais

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] }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.