如何等待SQL Server数据库副本

时间:2016-11-28 10:10:11

标签: sql-server powershell azure automated-tests azure-sql-database

我的powershell部署脚本创建了一个参考Azure数据库的副本,以对以下内容运行一些集成测试:

create database MyTest1 as copy of MyRefDb

问题是新的数据库不能立即可用:

  

服务器'abc'上的数据库'MyTest1'当前不是   可用。请稍后重试连接。

当我尝试使用MyTest1命令删除drop database时,存在类似的问题,与本地(内部部署)SQL Server实例不同,它不会立即发生。

在更改状态时,如何可靠地等待脚本中的Azure测试数据库可用性?

2 个答案:

答案 0 :(得分:2)

要检查复制操作的状态,您可以在新数据库上查询sys.databasessys.dm_database_copies个视图。

当复制操作正在进行时,state_descsys.databases视图的值将为COPYING

如果复制操作成功,则值为ONLINE

如果失败,则值为SUSPECT

有关详细信息,请参阅此处:https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy-transact-sql

答案 1 :(得分:1)

使用powershell

实际上很容易
Write-Output "Start database copy"
$dbCopy = Start-AzureSqlDatabaseCopy -ServerName $ServerName -DatabaseName $SourceDbName -PartnerDatabase $targetDbName

try
{ 
    WHILE ($dbCopy)
    {               
        Sleep 10
        Write-Output "Check if it's done"
        $dbCopy = Get-AzureSqlDatabaseCopy -ServerName $ServerName -DatabaseCopy $dbCopy -ErrorAction SilentlyContinue
        Write-Output "$dbCopy"
        # Sleep 10 seconds
    }
    $Copy_DB = Get-AzureSqlDatabase -ServerName $ServerName -DatabaseName $targetDbName
    Write-Output "COPY Completed"
}
catch{ Throw "FAILED: Cannot Get-AzureSqlDatabaseCopy" }