Eu tenho um SQL Server Agent Job criando um instantâneo do meu banco de dados principal a cada minuto:
-- delete snapshot if it exists
if exists (select * from sys.databases where name = 'mydb_snapshot' )
begin
drop database [mydb_snapshot]
end;
-- create new snapshot (whether or not we just deleted an old one)
create database [mydb_snapshot] on ( NAME = 'MYDBYEAH', FILENAME = 'D:\mydb_snapshot.ss' ) as snapshot of [mydb];
O instantâneo é usado tanto para relatórios quanto para uma consulta posterior na mesma etapa do trabalho.
(Sou novo em trabalhos e instantâneos do Sql Server Agent, portanto, sinta-se à vontade para apontar quaisquer WTFs até agora.)
Meu problema é que o Sql Server Agent se recusa a executar o trabalho, citando que [mydb_snapshot] não existe:
O banco de dados 'mydb_snapshot' não existe. Certifique-se de que o nome foi digitado corretamente. [SQLSTATE 08004] (Erro 911). A etapa falhou.
(Esse erro não tem um número de linha associado a ele. Em vez disso, parece que o SS Agent está verificando todo o script antes de começar a executá-lo e é inteligente o suficiente para ver que faço referência a um instantâneo inexistente, mas não inteligente o suficiente para ver Eu sempre crio esse instantâneo na linha anterior. Com instruções de depuração, posso ver que ele nem executa a primeira linha do TSQL na minha etapa do trabalho).
Alguma ideia do que posso fazer para enganar o SQL Server Agent para executar este trabalho?
Ou talvez uma abordagem completamente diferente?
(Uma coisa que eu tentei: funciona se eu executar a instrução create database [mydb_snapshot] acima manualmente, primeiro. A partir de então, o trabalho é executado a cada minuto, sem problemas. Mas isso significa que se esse instantâneo for excluído - o que aconteceu em pelo menos uma vez, não sei por que - meu trabalho falha sem motivo).
Substitua 'drop database [myDb_snapshot]' por:
A instrução SQL inteira é avaliada quanto à correção antes de executá-la. Como o instantâneo não existe, ele não será executado. O SQL dinâmico remove essa limitação.