Eu tenho um procedimento armazenado que executa backups de banco de dados. Como estou analisando os Grupos de Disponibilidade no SQL Server 2012, desejo utilizar a função *sys.fn_hadr_backup_is_preferred_replica* nesse script para testar se o script deve produzir o backup.
Se o script for executado manualmente em vez de como parte de um trabalho agendado do SQL Agent, ou se o trabalho do SQL Agent for executado manualmente em vez de por meio de um agendamento, desejo que o trabalho falhe com uma mensagem de erro para permitir que o usuário veja que o backup não foi bem-sucedido por não estar na réplica preferencial. Se o trabalho for executado de acordo com um cronograma, obviamente não quero que ele falhe, pois produziria erros e enviaria alertas o dia todo no servidor que não é a réplica preferida.
A única coisa que não sei fazer é verificar se o job está sendo executado por agendamento ou manualmente. Isso é possível?
Caso contrário, existe alguma outra maneira de alertar um usuário de que o script não produziu um backup, sem causar falha na tarefa agendada e produzir um alerta?
Usando o código de Kenneth e alguns outros pedaços que juntei, criei o seguinte código que acho que deve fazer o trabalho. Se alguém vir algum problema em potencial com isso, eu estaria interessado em saber!
Aqui está um começo para você.
Isso deve fornecer uma lista de todos os trabalhos em execução no momento, juntamente com a origem que iniciou o trabalho.
Não vejo necessidade de complicar demais.
Apenas teste se é uma réplica preferida ou não e faça o backup.