/*
      Olá Senhores, Senhoras e Senhoritas
DBAs!!!!
      Recentemente tive a necessidade de migrar
mais de duzendos pacotes de Integration entre um servidor e o outro. A
experiencia que no inicio parecia bem dolorosa
(dado que os pacotes estavam em solutions diferentes), se mostrou bem
interessante quando resolvi utilizar o dtutil! 
      Um aplicativo tipo prompt que serve
justamente para gerenciar esse tipo de situação.
      Depois de brigar um pouco com a Syntaxe,
cheguei a uma solução que gostaria muito de compartilhar com vocês.
      Espero que te Ajude!! E vamos por a mão na
massa!
      Essa solução está dividida em x partes
      1 - Definir os comandos necessários do
dtutil.
      2 - Criar consultas para gerar os comandos
no estado do servidor atual.
      3 - Colocar tudo em um bom e velho .BAT e
executar.
--Parte 1 - O comando
      Particularmente achei a syntaxe do dtutil
bem chatinha (como voce pode ver no link do books online abaixo). E após uma
certa briga chegamos as
      seguintes syntaxes
      a) Comando para recriar a estrutura de
pastas e subpastas no servidor destino 
      dtutil /FC
SQL;"/PastaPai/";"SubPasta" /SourceS ServidorDestino
      b) Comando para copiar os pacotes do
servidor origem para o servidor destino
      dtutil /SQL
"PastaPai/SubPasta/Pacote" /SourceS ServidorOrigem /COPY
SQL;"PastaPai/SubPasta/Pacote" /DestS ServidorDestino
BOOKS ONLINE: ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10is_5techref/html/6c7975ff-acec-4e6e-82e5-a641e3a98afe.htm
--Parte 2 - Consultas para gerar os comandos
      a) A primeira consulta é uma query
recursiva que usa as tabelas do MSDB para criar na ordem as pastas e subpastas.
      ATENÇÃO: As tabelas Data Collector e
Maintenance Plans são padrão em todas as instalações. Por isso remova-as da
lista gerada.
      Obs: Para entender maiores informações
sobre consultas recursivas, leia esse post aqui.
*/    
      use msdb 
      DECLARE @ServidorDestino varchar(100) = 'Coloque aqui a instancia Destino'
      ;WITH
CTE_Recursiva (parentfolder,foldername,folderid,Level)
      as
      (
      SELECT 
            CAST('/' as sysname) parentfolder,
            foldername folder,
            folderid ,
            0 Level
      FROM 
            sysssispackagefolders
      WHERE
            parentfolderid = '00000000-0000-0000-0000-000000000000'
      UNION ALL
      SELECT 
            CAST(C.parentfolder + C.foldername +'/'  as sysname)   parentfolder,
            f.foldername folder,
            f.folderid ,
            C.Level + 1 Level
      FROM 
            sysssispackagefolders f
      INNER JOIN
CTE_Recursiva C on C.folderid
= f.parentfolderid
     
      )
      SELECT 
            'dtutil /FC SQL;"' + parentfolder + '";"' +
foldername + '"
/SourceS ' + @ServidorDestino  Comando
      FROM 
            CTE_Recursiva 
      ORDER BY
            Level,
            parentfolder            
/*
            b) A segunda consulta (tambem
recursiva) gera os comandos que copiam os pacotes entre um servidor e outro.
            ATENÇÃO: Da mesma maneira que a
consulta anterior, tome cuidado para remover os pacotes da Data Collector e
Maintenance Plans (nesse ultimo só se voce quiser)
*/
GO
use msdb 
DECLARE
@ServidorOrigem varchar(21) = 'Coloque aqui a instancia de Origem'
DECLARE
@ServidorDestino varchar(21) =
'Coloque aqui a instancia Destino'
;WITH
CTE_Recursiva (Package,FolderID)
AS
(
SELECT 
      CAST(name
as sysname) Package, 
      folderid 
FROM 
      sysssispackages
UNION ALL
SELECT 
      CAST(f.foldername + '/' + C.Package as sysname) Package ,
      f.parentfolderid folderid
FROM 
      sysssispackagefolders f
INNER JOIN CTE_Recursiva C on
C.folderid = f.folderid            
)
SELECT 
      'dtutil /SQL "' + 
      RIGHT(Package,LEN(Package) - 1) 
      + '"
/SourceS ' + @ServidorOrigem + ' /COPY SQL;"' 
      + RIGHT(Package,LEN(Package) - 1)  
      + '"
/DestS ' + @ServidorDestino Comando
FROM
CTE_Recursiva 
WHERE FolderID IS NULL
ORDER BY
      Comando
/*
--Parte 3 - Gerar o BAT.
      E pronto caro leitor, mude a saida dos
comandos para Texto e copie esses comandos em um arquivo .BAT. 
      E é só executar!
      Espero que tenha te ajudado, porque isso
me economizou algumas horas de import/export mecanico e como diria Super Sam: -
Time is money!!
      Se tiver uma critica, duvida ou sugestão
por favor me escreva no fjantunes@gmail.com, twite no felipe_jose@store.com.br
ou me mande perguntas
      no http://www.formspring.me/agoradba
      Abraços!!!
      Felipe Antunes
      Keen on SQL Server!!!!
*/    
 
 
 
Nenhum comentário:
Postar um comentário