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.

Ben Foster
fonte
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.
Josiah Ruddell
fonte
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.

Pulga
fonte
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

abc
fonte
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

Ben Foster
fonte
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.

Adam Anderson
fonte
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] }
Jeffrey Rosselle
fonte