由于在Azure SQL受管实例中运行备份,因此ALTER DATABASE ADD FILE失败

时间:2018-10-16 07:50:22

标签: azure-sql-managed-instance

我们正在运行每月脚本来更新分区。在脚本中,我们还运行ALTER DATABASE ADD FILE和ALTER DATABASE REMOVE FILE。该脚本应运行约20分钟。 运行脚本时,我们会收到错误消息:

备份,文件操作操作(例如ALTER DATABASE ADD FILE)和数据库上的加密更改必须序列化。当前备份或文件操作完成后,重新发出该语句。

出现此错误是因为同时有一个正在进行的备份。备份由sql azure受管实例自动完成。

由于我们不知道备份时间,因此我们需要一个解决方案以便能够运行脚本而不会出现此错误

1 个答案:

答案 0 :(得分:0)

受管实例每5分钟运行一次日志备份(除非在运行完全备份时运行脚本),并且在此期间不允许进行文件/加密修改语句。 您可以实施一些重试逻辑或显式检查是否有任何正在进行的备份操作:

SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete) 
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time], 
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min], 
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min], 
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours], 
Stmt = CONVERT(VARCHAR(1000), (SELECT SUBSTRING(text,r.statement_start_offset/2, 
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END) 
FROM sys.dm_exec_sql_text(sql_handle))) 
FROM sys.dm_exec_requests r WHERE command LIKE '%BACKUP%'