Eu tenho um loop while que está em execução há dias (bydesign) consulte relacionado Existe um limite para quantos backups podem ser anexados a um único arquivo?
Tenho uma variável local que exibe a contagem de loops, quando executo em uma janela de consulta posso exibir a contagem comprint @counter
Agora estou executando o loop while em um trabalho e quero exibir o @counter
valor. Depois de algumas pesquisas tentei RAISERROR (Transact-SQL) que deve ser exibido no log de erros do SQL, mas não está funcionando. Eu li Using RAISERROR acho que tenho o código correto, mas não tenho certeza se pode ser usado em loop While, com uma variável local.
Crie o banco de dados e prepare-o
USE [master]
GO
Create database T_test
USE [master]
GO
ALTER DATABASE [T_test] SET RECOVERY FULL WITH NO_WAIT
GO
BACKUP DATABASE T_test to disk= N'K:\Test\T_test.bak' with noinit --Create first full
GO
Tente executar em uma janela de consulta para testar
DECLARE @counter int
SET @counter = 0
WHILE 1=1
BEGIN
BACKUP DATABASE [T_test] TO
DISK = N'K:\Test\T_Test.diff' WITH DIFFERENTIAL , NOFORMAT, NOINIT,
NAME = N'T_Test-Diff Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION
SET @counter = @counter + 1;
RAISERROR(N'Count equals :%d', 16, 1, @counter );
print @counter
END
Pare após alguns loops e verifique os logs SQL e a mensagem de consulta
O erro não está nos logs SQL, mas é exibido na mensagem de consulta.
Eu não acho que você possa usar GO 5000000
com uma variável local, pelo menos nas minhas tentativas, ela é redefinida toda vez que é declarada novamente.
Como posso exibir a variável local em um loop while, em tempo real?
Existem duas extensões do RAISERROR que podem ajudar:
Para gravá-lo no log de erros:
Para exibi-lo na aba de mensagens em "tempo real":
Você pode escrever o valor em uma tabela. Algo como
Você pode consultar esta tabela quando precisar ver o progresso.
Se você não quiser poluir um banco de dados de produção com isso, ele pode ser criado no TempDB. Note que não quero dizer criar uma
#temp
tabela. Isso seria visível apenas para o trabalho de backup. Quero dizer uma tabela "real", mas em tempdb. Ele seria descartado na reinicialização da instância, portanto , rotinas de gerenciamento apropriadas devem ser implementadas.