Adicionar condições à sequência do plano de manutenção no SQL Server

1

Gostaria de adicionar uma condição a uma sequência no meu Plano de Manutenção do SQL Server 2008. Essa condição é baseada na variável definida por uma tarefa de instrução T-SQL:

declare @primary bit = 0
select @primary=1
from sys.database_mirroring
where mirroring_role = 1

Como posso executar essa tarefa através do editor de restrição de precedência?

    
por Idriss 28.07.2009 / 19:44

4 respostas

2

Concordo com o SQLChicken. Você não poderá verificar as variáveis por meio de um plano de manutenção simples criado no SQL Management Studio. Você precisará fazer um script e colocá-lo em um trabalho SQL ou criar um pacote SSIS completo. O SSIS fornecerá a você todas as tarefas do plano de manutenção que estão disponíveis via SSMS, bem como todos os outros benefícios do SSIS, incluindo variáveis de pacote que você pode usar em suas restrições de precedência.

    
por 28.07.2009 / 20:26
2

Honestamente, se você quiser entrar em ajustes avançados, é melhor criar scripts para uma solução e agendá-la via Agent. Maint Plans, embora seja bom para tarefas realmente simples, realmente tem suas limitações.

    
por 28.07.2009 / 19:57
1

Eu tenho uma solução para isso, no entanto, não é elegante. Isso funciona, mas é um golpe e nunca seria considerado uma "melhor prática".

A solução envolve o uso de erros gerados artificialmente para controlar o fluxo e ajustar as propriedades do pacote para que a condição geral de erro do job de chamada relate sucesso ou falha da maneira que desejaríamos.

Primeiro, crie uma tarefa Executar Instrução T-SQL com sua verificação condicional. Do exemplo na pergunta original, seria assim:

if not exists (select * from sys.database_mirroring where mirroring_role = 1)
   begin
   raiserror('not primary', 16, 1)
   end

Este código gera um erro se este não for o primário do espelhamento e nenhum erro se for o primário. Em seguida, crie a segunda tarefa Execute T-SQL Statement e vincule-a à primeira com uma condição Success. Se este não for o espelho primário, não iremos para esta segunda tarefa, e a sequência terminará. Se este for o principal, prosseguiremos para esta segunda tarefa. A segunda tarefa gera um erro fictício usando código como este:

raiserror('dummy error', 16, 1)

Agora, crie sua terceira tarefa e vincule-a à segunda com uma condição de falha. Nesta terceira tarefa, faça o que você deseja fazer se a condição na primeira tarefa for verdadeira. Isso pode ser outra declaração Execute T-SQL, uma tarefa de backup, uma tarefa de atualização de estatísticas ou o que for. Se a condição for falsa, deixaremos a sequência após a primeira tarefa. Se a condição fosse verdadeira, passaríamos pelo erro fictício e seguiríamos para essa terceira tarefa que realmente faz o trabalho que queremos fazer.

A razão para o erro fictício na tarefa 2 é tornar o estado de erro final do relatório de trabalho chamador o que queremos, e há algumas outras propriedades do pacote que também precisamos ajustar para que isso funcione. Vá para a janela de propriedades (se ela não estiver aberta, abra-a no menu do botão direito em qualquer uma das tarefas) e clique na lista suspensa na parte superior. Isso lista todos os elementos do plano de manutenção para os quais você pode alterar as propriedades. Clique em Subplan_1 Sequence, em que Subplan_1 é o nome do subplano em que você está trabalhando. Altere FailParentOnFailure para False. Isso evitará que o trabalho de chamada relate um erro quando gerarmos o erro condicional na tarefa 1 ou o erro simulado na tarefa 2. Em seguida, vá para as propriedades do Pacote MyPackage, em que MyPackage é o nome do pacote em que você está trabalhando. MaximumErrorCount para 2. Isso fará com que o trabalho de chamada relate o sucesso quando houver apenas um erro gerado pelo erro simulado na tarefa 2, mas relatará falha se a terceira tarefa também gerar um erro. Ele também relatará sucesso se o único erro gerado for pela verificação condicional na tarefa 1.

É isso, espero que alguém ache isso útil.

    
por 25.03.2015 / 15:46
0

Para mim, a maneira mais fácil para os planos de manutenção condicional sem instalar o Information Services na sua instância do SQL é usar as ferramentas de dados do SQL Server ( SSDT ):

  1. Baixe a instalação do SSDT daqui (é grátis): link
  2. Crie um novo projeto do SSIS. Um dos arquivos que o novo projeto tem é o Package.dtsx . É um arquivo XML.
  3. Selecione em seu banco de dados o XML para seu plano de manutenção com a seguinte consulta:
SELECT    id, name, description, CAST(CAST(packagedata AS varbinary(MAX)) AS varchar(MAX)) xml_str
FROM  msdb.dbo.sysssispackages with(nolock)
WHERE name='your maintenance plan name';
  1. Copie e cole o valor da coluna xml_str no arquivo Package.dtsx do Projeto SSIS que você criou.
  2. Adicione variáveis e adicione o nó Executar tarefa SQL . A "Tarefa Executar SQL" permite recuperar dados com seleções nas variáveis, ao contrário da "Tarefa Executar Instrução T-SQL" que o plano de manutenção do SQL Server possui. Depois de inserido no plano de manutenção do SQL, a "Tarefa de execução do SQL" tem a GUI a ser editada diretamente no SSMS sem o SSDT. Mas as variáveis só podem ser adicionadas e editadas com o SSDT ou com o SQL que altera diretamente o XML do plano de manutenção. Não se esqueça de salvar.
  3. Copie como texto para a área de transferência o XML do arquivo Package.dtsx e atualize com o comando SQL o campo pacote_de_packagedata do plano de manutenção do msdb.dbo. tabela sysssispackages . Agora, se você abrir o plano de manutenção com o SSMS, descobrirá que "Tarefa SQL de execução" adicionada tem uma GUI e é perfeitamente configurável até mesmo a partir do SSMS.
  4. Após a "Tarefa Executar SQL", que reunirá as informações necessárias nas variáveis, crie restrições / links com a expressão. As restrições / links devem conectar os nós que devem ser executados condicionalmente. As expressões instruirão o fluxo em que restrição / link deve ser seguido e quais não. As expressões estão utilizando os dados das variáveis para as condições. Isso pode ser feito através da interface gráfica do SSMS sem ferramentas adicionais.

É claro que tudo isso é viável, sem SSDT, apenas com comandos SQL puros de atualização se você sabe exatamente qual XML deve ser alterado para variáveis e para o 'Execute SQL Task' no XML de dados do pacote do plano de manutenção de destino . Depois de inserido em um plano de manutenção, o nó "Executar tarefa SQL" pode ser copiado e colado em outros planos de manutenção por meio da GUI do SSMS sem ferramentas adicionais. Infelizmente, esse não é o caso das variáveis.

    
por 28.09.2017 / 09:45

Tags