我正在使用模板数据库和azure copy database t-sql脚本,不时地进行新的Azure数据库,而不需要任何人工交互。
在阅读了一些警告后,我想知道等待复制的数据库准备就绪的最佳方法是什么。
我已经发布了自己的答案,但如果数据库副本失败,它可能会以无限循环结束。
确保复制完成的最佳方法是什么。这非常重要,因为您一次只允许一个副本数据库命令。我正在使用一个带有c#队列的Azure worker,它将数据库创建为nessesary。
答案 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.