我正在探索 VSTS 发布管理,并且希望在应用任何迁移脚本之前备份 Azure SQL DB 上托管的生产数据库。我找不到任何特定任务或首选方式来等待 Azure SQL DB 完全备份,以便只有在数据库正确备份后才能继续部署。 我已经研究过使用 PowerShell 任务或 Azure SQL CMD 任务,但我不确定如何使其余任务等待备份完成。 如果有人能指出我正确的方向,我将不胜感激。谢谢。
最佳答案
您可以备份Azure SQL数据库并循环检查状态。
$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
-DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
-AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password
$importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($importStatus.Status -eq "InProgress")
{
$importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
[Console]::Write(".")
Start-Sleep -s 10
}
[Console]::WriteLine("")
$importStatus
更多信息,您可以引用Export an Azure SQL database to a BACPAC file .
另一种方法是通过 PowerShell 调用 Microsoft.SqlServer.Dac.DacServices.ExportBacpac 方法来备份 Azure SQL 数据库。
param([string]$ConnectionString, [string]$DatabaseName,[string]$OutputFile,[string]$s)
Add-Type -Path "$s\AzureDatabaseSolution\SQLDatabase\lib\Microsoft.SqlServer.Dac.dll"
$now = $(Get-Date).ToString("HH:mm:ss")
$Services = new-object Microsoft.SqlServer.Dac.DacServices $ConnectionString
Write-Host "Starting at $now"
$Watch = New-Object System.Diagnostics.StopWatch
$Watch.Start()
$Services.ExportBacpac($OutputFile, $DatabaseName)
$Watch.Stop()
Write-Host "Backup completed in" $Watch.Elapsed.ToString()
注意:使用此包中的程序集:Microsoft.SqlServer.Dac 1.0.3 (我将其添加到源代码管理并映射到构建代理)
另一方面,要添加防火墙规则,您可以引用这个帖子:Deploy Dacpac packages via power shell script to Azure SQL Server .
顺便说一句,您可以使用这些 PowerShell 脚本构建自定义构建/发布步骤/任务。 Add a build task
关于azure-sql-database - 在 VSTS 发布期间备份 Azure SQL DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449783/