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?
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
Você está certo. No Azure, você não pode restaurar em um banco de dados existente, apenas "um novo ou vazio" .
Você tem algumas maneiras de restaurar do arquivo .BACPAC.
Você pode fazer isso diretamente de seu local .BACPAC local usando
.\sqlpackage.exe
a 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
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 50000Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
No portal você pode importar diretamente o
.BACPAC
arquivo para o seu servidor como um banco de dados.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:
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:
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:
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.