Azure数据库副本,等待就绪状态

时间:2014-01-20 20:53:41

标签: sql azure

我正在使用模板数据库和azure copy database t-sql脚本,不时地进行新的Azure数据库,而不需要任何人工交互。

在阅读了一些警告后,我想知道等待复制的数据库准备就绪的最佳方法是什么。

我已经发布了自己的答案,但如果数据库副本失败,它可能会以无限循环结束。

确保复制完成的最佳方法是什么。这非常重要,因为您一次只允许一个副本数据库命令。我正在使用一个带有c#队列的Azure worker,它将数据库创建为nessesary。

1 个答案:

答案 0 :(得分:2)

这就是我现在正在做的事情。这应该有效,但复制时很少出现错误。

    declare 
        @sName varchar(max),
        @sState varchar(max),
        @iState int,
        @sDbName varchar(50)

    set @sDbName = 'myDbName'
    set @iState = 7 --copying
    while @iState = 7
    begin
        WAITFOR DELAY '00:00:05'
        SELECT @sName = name, @iState = state, @sState = state_desc FROM sys.databases WHERE name = @sDbName
    end
    SELECT name, state,state_desc FROM sys.databases WHERE name = @sDbName

此代码实际上是从c#

中的Azure worker运行的

编辑:

如果您想要更精细的approch,请使用sys.dm_database_copies

但是请记住,这个sql将状态作为整数返回,并且只有当状态== 0才能成功返回该副本失败。 州是:

0 = ONLINE
1 = RESTORING
2 = RECOVERING
3 = RECOVERY_PENDING
4 = SUSPECT
5 = EMERGENCY
6 = OFFLINE
7 = COPYING (Applies to Windows Azure SQL Database)
Windows Azure SQL Database returns the states 0, 1, 4, and 7.