0

Azure Automation を使用してデータベースのコピーを自動化する PowerShell スクリプトを作成しました。数か月間は正常に機能していましたが、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 Automation で PowerShell を使用してデータベース コピーを監視するより良い方法はありますか?

4

1 に答える 1

2

以下のコピーの存在チェックは、ターゲット側で行われます。

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

ターゲット側のコピー オブジェクトは、Start-AzureSqlDtaabaseCopy が返される前に作成されるとは限りません。そのため、$check が途中で null になり、コピーが実際には完了していないことを意味します。

これを修正するには、ソース側でコピーの存在を確認することをお勧めします。

$check = Get-AzureSqlDatabaseCopy -ServerName $SqlServer -DatabaseName $DatabaseSource -PartnerDatabase $DatabaseDestination
于 2015-08-14T00:20:42.890 に答える