0

我们正在运行每月一次的分区更新脚本。在脚本中,我们还运行 ALTER DATABASE ADD FILE 和 ALTER DATABASE REMOVE FILE。该脚本应该运行大约 20 分钟。运行脚本时出现错误:

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

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

由于我们不知道备份的时间,我们需要一个解决方案才能在没有此错误的情况下运行我们的脚本

4

1 回答 1

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%'
于 2018-10-29T10:01:34.777 回答