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 / 174715
Accepted
Randy Minder
Randy Minder
Asked: 2017-05-27 13:39:37 +0800 CST2017-05-27 13:39:37 +0800 CST 2017-05-27 13:39:37 +0800 CST

Como importar um arquivo BACPAC para o SQL do Azure e substituir o banco de dados existente?

  • 772

Digamos que eu tenha um banco de dados local chamado MyDatabase. Quero movê-lo para o SQL do Azure e substituir um banco de dados existente atualmente lá chamado MyDatabase. Eu sei como criar um arquivo BACPAC localmente. Eu sei como importar o BACPAC para minha conta de armazenamento do Azure. No entanto, uma vez que o BACPAC está no armazenamento do Azure, não conheço a maneira preferida de substituir o banco de dados MyDatabase existente pela cópia no armazenamento. Eu poderia importar o arquivo BACPAC e criar um segundo banco de dados, excluir o primeiro e renomear o banco de dados recém importado. No entanto, é a melhor ou preferida maneira de fazer isso?

sql-server azure-sql-database
  • 2 2 respostas
  • 20294 Views

2 respostas

  • Voted
  1. Best Answer
    SqlWorldWide
    2017-05-27T20:41:30+08:002017-05-27T20:41:30+08:00

    Você está certo. No Azure, você não pode restaurar em um banco de dados existente, apenas "um novo ou vazio" .

    • Você tem que restaurar com um nome diferente.
    • Excluir banco de dados antigo
    • Renomeie o novo para o nome do banco de dados antigo.

    Você tem algumas maneiras de restaurar do arquivo .BACPAC.

    1. Você pode fazer isso diretamente de seu local .BACPAC local usando .\sqlpackage.exea ferramenta de linha de comando.

      .\sqlpackage.exe /a:Import /sf:C:\filename.bacpac /tsn:ServerName.database.windows.net /tdn:destinationDBName ` /tu:adminaccountName@serverName /tp:$credentialPW

    2. Você também pode usar a cópia que carregou em sua conta de armazenamento.

      $ResourceGroupName = "RGName" $ServerName = 'ServerName' $DatabaseName = "DestinationDBName"

      $StorageName = "StorageAccountName" $StorageKeyType = "StorageAccessKey" $StorageUri = "http://$StorageName.blob.core.windows.net/swwstoragecontainer/BackpacFileName.bacpac" $StorageKey = "************ **************************"

      $credential = Get-Credential

      $importRequest = New-AzureRmSqlDatabaseImport -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -StorageKeytype $StorageKeyType -StorageKey $StorageKey -StorageUri $StorageUri -AdministratorLogin $credential.UserName -AdministratorLoginPassword $credential.Password ` -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 50000

      Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink

    3. No portal você pode importar diretamente o .BACPACarquivo para o seu servidor como um banco de dados.

    • 13
  2. Tumnin
    2019-12-12T16:38:13+08:002019-12-12T16:38:13+08:00

    No Azure, você não pode restaurar em um banco de dados existente. (c)

    Aparentemente, não realmente. Você PODE restaurar um arquivo .bacpac em um banco de dados SQL do Azure existente, por exemplo, em um caso em que você realmente precise manter a mesma instância do banco de dados SQL do Azure, pois está incorporada ao ambiente do Azure. Uma condição necessária para isso é: o banco de dados de destino deve estar vazio, ou seja, como recém-criado como novo. Mas se você já possui um banco de dados de destino, que não está vazio (claro!), você pode "limpar" o banco de dados, executando o seguinte script em seu contexto, estando logado como superusuário:

    DECLARE @sql NVARCHAR(2000)
    
    WHILE EXISTS(SELECT TOP(1) * FROM SYS.TRIGGERS WHERE is_ms_shipped = 0)
    BEGIN
        SELECT TOP(1) @sql = 'DROP TRIGGER IF EXISTS [' + [name] + '] ON ' + parent_class_desc COLLATE database_default --SQL_Latin1_General_CP1_CI_AS
        FROM SYS.TRIGGERS
        WHERE is_ms_shipped = 0
        PRINT @sql
        EXEC (@sql)
    END
    
    WHILE EXISTS(SELECT TOP(1) * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE')
    BEGIN
        SELECT TOP(1) @sql = 'DROP PROCEDURE IF EXISTS [' + ROUTINE_SCHEMA + '].[' + ROUTINE_NAME + ']'
        FROM INFORMATION_SCHEMA.ROUTINES
        WHERE ROUTINE_TYPE = 'PROCEDURE'
        PRINT @sql
        EXEC (@sql)
    END
    
    WHILE EXISTS(SELECT TOP(1) * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION')
    BEGIN
        SELECT TOP(1) @sql = 'DROP FUNCTION IF EXISTS [' + ROUTINE_SCHEMA + '].[' + ROUTINE_NAME + ']'
        FROM INFORMATION_SCHEMA.ROUTINES
        WHERE ROUTINE_TYPE = 'FUNCTION'
        PRINT @sql
        EXEC (@sql)
    END
    
    WHILE EXISTS(SELECT TOP(1) * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY')
    BEGIN
        SELECT TOP(1) @sql = 'ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']'
        FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
        WHERE CONSTRAINT_TYPE='FOREIGN KEY'
        PRINT @sql
        EXEC (@sql)
    END
    
    WHILE EXISTS(SELECT TOP(1) * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA != 'sys')
    BEGIN
        SELECT TOP(1) @sql = 'DROP VIEW [' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA != 'sys'
        PRINT @sql
        EXEC (@sql)
    END
    
    WHILE EXISTS(SELECT TOP(1) * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME != '__MigrationHistory')
    BEGIN
        SELECT TOP(1) @sql = 'DROP TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']'
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME != '__MigrationHistory'
        PRINT @sql
        EXEC (@sql)
    END
    
    --SELECT * FROM SYS.TYPES WHERE is_user_defined = 1
    --SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME != '__MigrationHistory'
    --SELECT * FROM SYS.TRIGGERS WHERE is_ms_shipped = 0
    --DROP TRIGGER IF EXISTS [backup_objects] ON DATABASE
    

    As últimas 4 declarações são opcionais. Os três primeiros são para verificação/visualização de alguns parâmetros, e o último é usado para descartar um gatilho específico no nível do banco de dados, se existir.

    Depois disso, você pode restaurar o arquivo .bacpac que você possui para o banco de dados de destino usando o utilitário sqlpackage.exe padrão, executando-o na janela de linha de comando administrativa elevada, assim:

    “C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\sqlpackage.exe” /a:Import /sf:"C:\Users\[username1]\Documents\SQL Server Management Studio\DAC Packages\[SourceDBName.bacpac]" /tsn:[azureSQLServerName].database.windows.net /tdn:[TargetAzureSQLDBName] /tu:[DBAdminLogin] /tp:[DBAdminPassword]
    

    Basta substituir [braced_values] por reais, e deve funcionar. Ao ser executado, o utilitário pode apresentar uma mensagem de aviso, exibida na cor amarela, assim:

    Inicializando a implantação O objeto [data_0] existe no destino, mas não será descartado mesmo que você tenha selecionado a caixa de seleção 'Gerar instruções de descarte para objetos que estão no banco de dados de destino, mas que não estão na origem'. O objeto [log] existe no destino, mas não será descartado mesmo que você tenha selecionado a caixa de seleção 'Gerar instruções de descarte para objetos que estão no banco de dados de destino, mas que não estão na origem'.

    Você pode simplesmente desconsiderar. Dependendo do tamanho e complexidade do banco de dados, o processo de restauração pode demorar, portanto, espere até que ele termine, exibindo a mensagem: Banco de dados importado com sucesso.

    Espero que ajude.

    • 8

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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