将一个范围 (TSQL) 中的一组数据库(20 个以上)备份到同一文件位置时,我遇到了奇怪的延迟。
是否有可能同时运行多个备份操作?我没有在BACKUP子句中找到任何“WAIT”操作,但是这个选项存在于Backup类的 SMO 命令( Wait)中。
这是我的部分代码(完整代码运行良好,所以我想如下所示进行描述):
WHILE 1 = 1
BEGIN
SET @currentDbName = ...
SET @sql = 'BACKUP DATABASE ' + @currentDbName + '...'
EXEC(@sql)
-- maybe it is a good place to wait?
-- WAITFOR
END
如果您按照发布的示例代码运行备份,它们将不会重叠。
一条
EXEC()
语句将在下一条语句执行之前完成,您可以很容易地演示这一点:BACKUP
与所有 TSQL 命令一样,同步执行。SQL批处理中的每个语句都将依次完成,然后再执行下一个语句,无论是独立执行还是通过EXEC()
您的示例执行。BACKUP
使用 SMO 的备份与 TSQL命令不同且无关。使用 SMO,您可以选择使用 Backup.SqlBackup 执行同步备份或使用 Backup.SqlBackupAsync 执行异步备份。我假设这里基于示例代码使用 Microsoft SQL Server。无需在过程中间包含 WAITFOR 语句。您也不需要使用动态 SQL。BACKUP DATABASE 语句接受数据库名称的变量。
当您看到延迟时,运行备份的 spid 的等待类型是什么?