AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 244167
Accepted
CB_Ron
CB_Ron
Asked: 2019-07-31 15:22:10 +0800 CST2019-07-31 15:22:10 +0800 CST 2019-07-31 15:22:10 +0800 CST

Faça backup de um banco de dados da Instância Gerenciada de SQL do Azure e restaure para o SQL Server local

  • 772

Tenho três bancos de dados que estou migrando para a Instância Gerenciada de SQL do Azure. Um é um banco de dados de utilitários, apenas uma pequena coleção de funções e procedimentos genéricos. Um deles é o banco de dados OLTP para um aplicativo da web. O terceiro é um arquivo somente leitura do banco de dados OLTP contendo dados históricos para análise e relatórios, bem como tabelas de auditoria. Eu preciso ser capaz de restaurar esses bancos de dados para servidores de teste e desenvolvimento no local. Até agora, não tive sucesso.

Minha primeira tentativa foi usar o backup para o Armazenamento de Blobs do Azure. Mas não importa qual versão do SQL Server eu uso localmente, sempre recebo um erro de que o backup somente cópia é de uma versão mais recente e a restauração não é suportada.

Em seguida, tentei o aplicativo de camada de dados de exportação do SSMS v.18.1. Infelizmente, nunca passa da exportação. Recebo dezenas de erros que lêem External references are not supported when creating a package from this platform. Um dos maiores pontos fortes da instância gerenciada sobre o banco de dados SQL do Azure é a capacidade de fazer consultas entre bancos de dados. Eu tenho várias visualizações e procedimentos que vinculam tabelas nos dois bancos de dados. Além disso, alguns procedimentos no banco de dados OLTP chamam as funções no banco de dados Utility. Como o MI não é o banco de dados SQL do Azure, você pensaria que isso não seria um problema!

Pesquisando no Google, encontrei esta pergunta no Stack Overflow. Então eu tentei a abordagem do Visual Studio proposta como resposta. Embora pareça funcionar, o que significa que cria um arquivo de vários gigabytes na minha máquina local, tentar importar esse arquivo usando o SSMS me dá um erro que diz No data is present in this file.Então tentei a segunda solução possível usando sqlpackage.exe. Mas essa solução também não funciona para mim, pois apenas faz referência à exportação do esquema. E se eu tentar exportar todo o banco de dados /Action:Export, recebo a mesma mensagem de erro que o SSMS fornece.

Eu também examinei esta pergunta dos administradores de banco de dados. Nenhuma ajuda - isso é o que eu tentei originalmente. Se alguém tiver alguma outra opinião, eu agradeceria muito ouvi-la!

restore sql-server-2017
  • 3 3 respostas
  • 7207 Views

3 respostas

  • Voted
  1. KevH
    2019-08-01T03:48:31+08:002019-08-01T03:48:31+08:00

    Consegui exportar dados de uma instância gerenciada do Azure (MI) para um sistema SQL Server 2012 com êxito sem a necessidade do Visual Studio.

    1. Usando o SQL Server Management Studio (SSMS), clique com o botão direito do mouse no banco de dados que deseja copiar, escolha Tasks > Export Data-tier Application. Escolha onde salvar o arquivo .bacpac criado.

      • Um arquivo .bacpac é um arquivo zip contendo XML que define suas tabelas e relacionamentos junto com arquivos BCP que armazenam os dados de cada tabela.
    2. Se você tiver 7zip, extraia o arquivo bacpac para ver o conteúdo. Caso contrário, você pode renomear as extensões de arquivo de .bacpac para .zip e extraí-lo usando o Explorador de Arquivos (clique com o botão direito do mouse > Extrair tudo...)

    3. Abra o arquivo model.xml em seu editor de texto favorito e procure o atributo chamado CompatibilityMode. Isso terá sido definido para o nível de compatibilidade do MI (atualmente 150). Altere-o para o nível de compatibilidade para o qual você está importando. Eu estava importando para o SQL 2012, então mudei para 110.

    4. Remova quaisquer outros recursos incompatíveis comentando a linha relevante em model.xml.

      • Por exemplo, o SQL 2012 não pode fazer tabelas na memória, então tive que comentar esta seção do arquivo model.xml:
        <!--<Element Type="SqlFilegroup" Name="[XTP]">
                <Property Name="ContainsMemoryOptimizedData" Value="True" />
        </Element>-->
    
    • Definir o Valuecomo false também pode funcionar.

      1. Colocando-o de volta juntos. A Microsoft adicionou uma validação simples para saber se o arquivo bacpac está corrompido ou foi adulterado. Se você tiver feito alguma alteração no arquivo model.xml, será necessário calcular um novo valor de checksum para ele. O valor é armazenado no arquivo Origin.xml no bacpac.
    • Você pode gerar um novo valor de soma de verificação usando o PowerShell:
    Get-FileHash -Path C:\Path\To\Extracted\bacpac\model.xml | Format-Table -Property Hash
    

    Você deve obter uma saída como esta:

    Hash
    ----
    ED8754D205946850F3CED0B033342BF3D88A43E146E57D861191AACC1AC1659A
    
    

    Abra o arquivo Origin.xml dos arquivos bacpac extraídos e procure uma linha como esta no final e substitua o valor de hash existente pelo novo:

    <Checksums>
      <Checksum Uri="/model.xml">ED8754D205946850F3CED0B033342BF3D88A43E146E57D861191AACC1AC1659A</Checksum>
    </Checksums>
    

    Certifique-se de não adicionar espaços ou caracteres estranhos.

    Agora feche os arquivos de volta, certificando-se de que o nível superior do arquivo seja os arquivos e não a pasta que você extraiu tudo também. Se você abrir o novo arquivo, deverá ver os arquivos xml e não um único nome de pasta.

    Agora você deve poder importar o bacpac para seu banco de dados SQL não Azure.

    Algumas notas sobre backups bacpac:

    • Eles podem não ser transacionalmente consistentes. Para que uma exportação seja transacionalmente consistente, você deve garantir que nenhuma atividade de gravação esteja ocorrendo durante a exportação ou que você esteja exportando de uma cópia transacionalmente consistente do banco de dados SQL do Azure.

    • Se você estiver exportando para o armazenamento de blobs, o tamanho máximo de um arquivo BACPAC é 200 GB. Para arquivar um arquivo BACPAC maior, exporte para armazenamento local.

    • 3
  2. Best Answer
    Ramakant Dadhichi
    2019-08-01T02:24:09+08:002019-08-01T02:24:09+08:00

    Bacup-restore de um MI não é suportado. A extração do backpac falha quando encontra poucas dependências ou recursos não suportados. Isso ocorre porque o SSMS verifica sua extração. Tente usar o SSDT (Visual STudio) e você pode pular a extração de verificação (esta é, por padrão, desmarcada):

    1. Abra o Pesquisador de Objetos do SQL Server

    insira a descrição da imagem aqui

    1. Conecte-se ao seu MI. Clique com o botão direito do mouse no banco de dados e clique em: Extrair aplicativo da camada de dados.

    Selecione Extrair esquema e dados.

    Isso terá sucesso.

    insira a descrição da imagem aqui

    insira a descrição da imagem aqui

    1. Use o arquivo dacpac criado acima para implantar o banco de dados. Clique com o botão direito do mouse em bancos de dados --> Implantar aplicativo de camada de dados.

    Dados e esquema:

    insira a descrição da imagem aqui

    • 2
  3. Saeb Amini
    2020-12-09T17:40:54+08:002020-12-09T17:40:54+08:00

    Curiosamente, a Extractação também recebe um ExtractAllTableDataparâmetro que permite incluir os dados.

    Basta adicionar /p:ExtractAllTableData=Trueao comando.

    • 0

relate perguntas

  • O banco de dados após o processo de restauração ainda exibe Restaurando

  • Erro ao restaurar arquivos de banco de dados diferenciais SQL

  • É possível criar/restaurar rapidamente instantâneos de banco de dados com o PostgreSQL?

  • Postgresql - Recuperação usando recovery.conf

  • Como restaurar o banco de dados usando backup completo antigo e arquivo de log atual

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve