Posso exportar um plano de manutenção sem usar o Integration Services?

12

Estou tentando exportar um plano de manutenção simples de uma instância do SQL Server.

Desejo verificar a exportação no controle de origem e aplicar o plano de manutenção exportado a instâncias funcionalmente idênticas.

O StackOverflow e o SQL Server Newbie recomendam o uso do Integration Services para exportar o plano de manutenção.

Quando tento conectar-me ao Integration Services no destino de exportação, recebo o seguinte erro:

A conexão ao serviço do Integration Services no computador "WEBSERVER" falhou com o seguinte erro: O serviço especificado não existe como um serviço instalado.

Optamos por desabilitar os Serviços de Integração no WEBSERVER porque usamos essa caixa apenas para fornecer dados a aplicativos de consumo. Todos os dados no WEBSERVER são replicados de uma instância de back-end. O Integration Services é usado fortemente para processar dados na instância de back-end.

Existe uma maneira documentada de exportar um plano de manutenção sem usar o Integration Services? A Microsoft suporta isso?

Iain Samuel McLean Elder
fonte

Respostas:

10

Os planos de manutenção são armazenados em msdb.dbo.sysssispackages como qualquer outro pacote SSIS armazenado no SQL Server. Eu tenho um post útil sobre o SSIS Package Extract do MSDB que deve curar o que o aflige.

billinkc
fonte
Isso funciona apenas se você tiver o SSIS totalmente instalado, porque dtutil- o que é construído em volta - é basicamente desativado caso contrário, mesmo que esteja presente. Algumas versões do SQL Server (como a Web Edition) não permitem a instalação completa do SSIS, mesmo que os Planos de manutenção usem essencialmente quase toda a funcionalidade do SSIS. (No entanto, existe um hack para contornar isso, supondo que você tem duas versões do SQL Server, um dos quais não é prejudicadas -. Ver minha resposta abaixo)
MikeBeaton
3

Existe uma maneira de fazer isso.

Suponha que, como o OP, você tenha duas instâncias do SQL Server, uma das quais com o SSIS instalado e a outra não (provavelmente não pode, por exemplo, se for o SQL Server Web Edition).

Escreva um procedimento armazenado que copie as linhas do plano de manutenção do usuário do servidor com hobbled para o sem hobbled. As linhas relevantes são:

SELECT name 
FROM msdb.dbo.sysssispackages 
WHERE packagetype = 6

Você precisaria escrever este SP para excluir todas as linhas com as correspondências idprimeiro e depois inserir as versões mais recentes (ou uma abordagem semelhante, por exemplo, UPDATEcorrespondendo ids, depois INSERTfaltando ids). E você precisará configurar um servidor vinculado de um ou outro lado, para poder escrever SQL que endereça os dois servidores.

É isso mesmo, na verdade, você pode chamar isso regularmente ... de um plano de manutenção, por exemplo ... e fazer backup de todos os planos de manutenção do lado não prejudicado.

É um hack maciço, é claro, mas na verdade funciona. (Imagino que seja muito importante que o número da versão do SQL Server seja o mesmo nos dois lados, para que os dados msdb.dbo.sysssispackagessejam tão compatíveis entre as diferentes instâncias do servidor quanto realmente parecem).

Você sempre pode fazer o backup direto das linhas relevantes da tabela de banco de dados do SSIS, é claro. Isso funcionaria de qualquer maneira - como uma resposta completa para a pergunta original. Como afirmado, isso não tem nada a ver com pressupor o SSIS - apenas pressupõe planos de manutenção!

Portanto, esse é um método leve e suportado, que funciona sem o SSIS em qualquer lugar do sistema. A vantagem do método mais complexo e invasivo acima é que ele fornece planos exportados em um formato padrão, não apenas como linhas de dados simples; então acho que é muito mais provável que seja importável para uma versão diferente do SQL Server, posteriormente.

MikeBeaton
fonte
1

Eu tenho lutado com o mesmo problema exato. Aqui está o principal take-away:

Não são necessários serviços de integração no seu WEBSERVER. Uma maneira documentada é usar o DTUTIL. Basta usar QUALQUER SQL Server (mesmo a edição gratuita para desenvolvedores com todos os recursos da empresa) que possui o Integration Services instalado para copiar os Pacotes de Manutenção do SQL Server de uma origem para um destino - mesmo que não seja a origem ou o destino do pacote, conforme mostrado em Exemplo A.

Exemplo A: Execute o DTUTIL no SQL Server MySSISServerA para copiar um Pacote de Manutenção SQL do MySourceServerB para o MyDestServerC .

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q
Picada
fonte
Com a ressalva de que ANY= mesma versão, caso contrário, dtutil irá atualizar o plano para vCurrent
billinkc
Ótimo ponto! Mas as atualizações podem ser úteis - pelo que fazemos de qualquer maneira. O que eu gostaria de fazer é criar planos em SQL 2008 e copiar / atualizar os planos para o SQL 2008, 2008 R2, 2012,2014, 2016
Sting
0

Dê uma olhada em:

Como transferir (copiar) planos de manutenção de um servidor para outro? por Sreekanth Bandarla

Parafraseando e resumindo:

  1. No SSMS, em vez de se conectar ao "Mecanismo de Banco de Dados ...", conecte-se ao "Integration Services ...", com o mesmo nome de servidor.

  2. Navegue para 'Pacotes armazenados / MSDB / Planos de manutenção'.

  3. Existem todos os seus planos de manutenção. Clique com o botão direito do mouse neles para exportá-los.

RicardoBalda
fonte