在 VSTS 发布期间备份 Azure SQL 数据库

Backup Azure SQL DB during VSTS Release

我正在探索 VSTS 发布管理,我想在应用任何迁移脚本之前备份托管在 Azure SQL 数据库上的生产数据库。我找不到任何特定的任务或等待 Azure SQL 数据库完全备份的首选方法,以便我只能在正确备份数据库后才能继续部署。 我看过使用 PowerShell 任务或 Azure SQL CMD 任务,但我不确定如何让其余任务等待备份完成。 如果有人能指出我正确的方向,我将不胜感激。谢谢。

Azure SQL 数据库会持续自动备份。如果您尝试创建数据库的副本或将数据库存档到 BACPAC 文件,您可以执行任一操作。

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automated-backups https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy https://docs.microsoft.com/en-us/azure/sql-database/sql-database-export

您可以备份 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(我将其添加到源代码管理并映射到构建代理)

另一方面,要添加防火墙规则,可以参考这个帖子:.

顺便说一句,您可以使用这些 PowerShell 脚本构建自定义 build/release step/task。 Add a build task