powershell - 使用 Azure 自动化复制数据库时 Get-AzureSqlDatabaseCopy 未返回预期值

标签 powershell azure azure-powershell azure-automation

我编写了一个 PowerShell 脚本来使用 Azure 自动化自动复制数据库。它已经工作了几个月,但出现了一些与 Get-AzureSqlDatabaseCopy 命令相关的奇怪行为。我使用 Get-AzureSqlDatabaseCopy 检查数据库复制是否已完成,然后再继续该过程的下一步。如果数据库复制没有及时完成,则会导致错误。

$SqlServer = 'servername.database.windows.net'
$DatabaseSource = 'Database1'
$DatabaseDestination = 'Database2'

Write-Output "Starting database copy - $DatabaseDestination"
Start-AzureSqlDatabaseCopy -ServerName $SqlServer -DatabaseName $DatabaseSource -PartnerServer $SqlServer -PartnerDatabase $DatabaseDestination    

$i = 0
$secs = 0
do
{
    $check = Get-AzureSqlDatabaseCopy -ServerName $SqlServer -DatabaseName $DatabaseDestination
    $i = $check.PercentComplete
    Write-Output "Database Copy ($DatabaseDestination) not complete in $secs seconds"

    $secs += 10
    Start-Sleep -s 10
}
while($i -ne $null -and $secs -lt 600)

此代码过去运行良好,数据库复制通常需要 30-40 秒才能完成。看起来有问题

$check = Get-AzureSqlDatabaseCopy -ServerName $SqlServer -DatabaseName $DatabaseDestination

$check 看起来没有被设置为任何内容,因此 $i 为 null 并且循环不起作用。这是上周才开始发生的事情。我查看了一些工作记录,直到周四为止一直运行良好。我今天运行了一些测试数据库副本,但 $check 始终未设置。

有人知道这种行为改变的原因吗?是否有更好的方法在 Azure 自动化中使用 PowerShell 监视数据库副本?

最佳答案

下面检查目标端是否存在副本:

$check = Get-AzureSqlDatabaseCopy -ServerName $SqlServer -DatabaseName $DatabaseDestination

不保证在 Start-AzureSqlDtaabaseCopy 返回之前创建目标端复制对象,因此 $check 过早变为 null,这意味着复制实际上并未完成。

要解决此问题,我们建议检查源端是否存在副本:

$check = Get-AzureSqlDatabaseCopy -ServerName $SqlServer -DatabaseName $DatabaseSource -PartnerDatabase $DatabaseDestination

关于powershell - 使用 Azure 自动化复制数据库时 Get-AzureSqlDatabaseCopy 未返回预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31940043/

相关文章:

Powershell、EWS、OAuth2 和自动化

reactjs - Azure AD B2C 未获取访问 token

c# - 连接到 Azure 中国的 KeyVault

Azure DevOps 管道 Active Directory 用户创建

Azure Log Analytics - 更新/添加 FunctioAlias 到 SavedSearch 查询

powershell - 合并多个 CSV 文件

Powershell由于内存常量而崩溃

powershell - 使用 powershell 在 MS-Access 中创建查询

Azure VHD 文件和页面 blob

azure - 如何检索 azure oms 工作区 ID 和 key ?