Tive atrasos estranhos ao fazer backup de um grupo de bancos de dados (mais 20) em um escopo (TSQL) para o mesmo local de arquivo.
É possível que várias operações de backup estejam em execução ao mesmo tempo? Não encontrei nenhuma operação "WAIT" em uma cláusula BACKUP , mas esta opção está presente no comando SMO ( Wait ) da classe Backup .
Aqui está meu código parcial (o código completo funciona bem, então quero descrevê-lo conforme mostrado abaixo):
WHILE 1 = 1
BEGIN
SET @currentDbName = ...
SET @sql = 'BACKUP DATABASE ' + @currentDbName + '...'
EXEC(@sql)
-- maybe it is a good place to wait?
-- WAITFOR
END
Se você estiver executando seus backups de acordo com o código de exemplo postado, eles não se sobreporão.
Uma
EXEC()
instrução será concluída antes que a próxima instrução seja executada, o que você pode demonstrar facilmente:BACKUP
, como acontece com todos os comandos TSQL, é executado de forma síncrona. Cada instrução em um lote SQL será concluída por vez antes de executar a próxima, seja executada de forma autônoma ou por meioEXEC()
de seu exemplo.BACKUP
O backup usando SMO é diferente e não está relacionado ao comando TSQL . Com o SMO você tem a opção de executar um backup síncrono com Backup.SqlBackup ou um backup assíncrono com Backup.SqlBackupAsync .Estou assumindo o Microsoft SQL Server aqui com base no código de exemplo. Não há necessidade de incluir uma instrução WAITFOR no meio do processo. Além disso, você não precisa usar SQL dinâmico. A instrução BACKUP DATABASE aceita variáveis para o nome do banco de dados.
Quando você está vendo os atrasos, qual é o tipo de espera do spid executando o backup?