Tutorial DTS

Propaganda
Tutorial DTS
DICIONÁRIO DE DADOS ................................................................................................. 2
IMPORTAÇÃO ENTRE DOIS BANCOS DO DADOS ................................................... 4
DEFININDO ORIGEM E DESTINO ........................................................................................... 4
INICIALIZANDO VARIÁVEIS.................................................................................................. 6
CRIANDO UM PROCEDIMENTO CONDICIONAL A SER EXECUTADO – DATA DRIVEN QUERY
TASK ................................................................................................................................... 8
Guia Source .................................................................................................................... 8
Guia Bindings ............................................................................................................... 10
Guia Queries ................................................................................................................ 10
Guia Lookups................................................................................................................ 12
Guia Transformations .................................................................................................. 12
EXECUTANDO A IMPORTAÇÃO ........................................................................................... 15
REALIZANDO A IMPORTAÇÃO DE UM ARQUIVO TEXTO EM UM SERVIDOR
FTP....................................................................................................................................... 16
REALIZANDO O FTP .......................................................................................................... 16
DESTINO DINÂMICO ........................................................................................................... 16
ADICIONANDO A ORIGEM DE DADOS COMO ARQUIVO ........................................................ 19
ALTERANDO A LOCALIZAÇÃO DO ARQUIVO DE ORIGEM VIA SCRIPT .................................. 20
ATRIBUINDO O DESTINO DOS DADOS IMPORTADOS ............................................................ 21
TAREFA PARA COPIAR OS DADOS ....................................................................................... 22
DEFININDO A ORDEM DE EXECUÇÃO .................................................................................. 23
Dicionário de Dados
DTS – Data Transformation Services
Enterprise Manager – É um ambiente genérico de gerenciamento de serviços da
Microsoft®. Neste tutorial se refere ao gerenciador gráfico do SQL Server.
Packages – Pacotes do DTS a serem executados
CSV – Coma separated values
HTML – Hyper Text Markup Language
INTRODUÇÃO
O DTS permite importar/exportar dados entre diferentes fontes de dados.
As fontes/origens de dados podem ser bancos de dados ou arquivos (CSV, excel, HTML).
Este tutorial pretende mostrar alguns procedimentos para configuração de pacotes de
tarefas a serem executados periodicamente.
Este tutorial assume que o usuário já tenha familiaridade com o SQL Server e comandos
PL/SQL.
Para ter acesso ao Data Transformation Services, o usuário deve executar o Enterprise
Manager, e abrir a pasta Data Transformation Services.
Ao clicar sob Local Packages, serão listados todos os pacotes existentes.
Visualização do DTS
Importação entre dois bancos do dados
Será criado um pacote DTS para copiar os dados de uma instância do SQL Server para
outra.
Neste exemplo serão importados dados de um banco de dados de postos para um banco de
dados de Quotas.
Para criar um novo pacote DTS, clicar com o botão direito sob o item “Local Packages” e
selecionar “New Package”.
Será mostrado um editor gráfico de pacotes.
Modo design do DTS
Definindo Origem e Destino
Criar uma conexão para origem dos dados e uma para destino.
Para criar a conexões, acionar Connection->Microsoft OLE DB Provider for SQL Server.
Será aberta uma caixa de diálogo para configurar a conexão com o banco SQL Server.
Diálogo de configuração de conexão
Neste exemplo, “Postos – Ain” é a origem e “QuotasPrd” é o destino.
Inicializando Variáveis
É comum a necessidade de inicializar algumas variáveis globais.
Estas variáveis podem ser utilizadas em qualquer procedimento realizado no DTS.
É possível – por exemplo – utilizar uma variável global como parâmetro de uma stored
procedure.
Para inicializar as variáveis globais, deve-se criar um “ActiveX Script Task”.
Este componente permite criar procedimentos em linguagem de script interpretada (como
VBScript).
Para criar uma task execute: Task->ActiveX Task..
O exemplo abaixo inicializa o ano/mês de referência, que deve ser um mês anterior à
execução do pacote.
Observar que as variáveis locais ficam armazenadas em DTSTaskGlobalVariables.
A sintaxe é: DTSTaskGlobalVariables(<<NOME_VARIAVEL>>).value
Código fonte:
'**********************************************************************
' Visual Basic ActiveX Script
'************************************************************************
'/**
' * Inicializa variaveis globais
'*
' * lngAnoMesReferencia - ano/mes (yyyymm) referencia a data que o pacote for executado
' */
Function Main()
DTSGlobalVariables("lngAnoMesReferencia").Value = clng(getAnoMesRegerencia())
Main = DTSTaskExecResult_Success
End Function
'/**
' * Retorna o ano/mes (yyyymm) de referencia da data que este pacote for rodado.
' * Por exemplo:
' * Caso seja rodado no dia 2004-09-08 (yyyy-mm-dd), ira retornar 200408 (yyyymm)
'*
' * @return inteiro longo que representa ano/mes de referencia (yyyymm)
' */
Function getAnoMesRegerencia() 'As Long
Dim dteReferencia 'As Date
dteReferencia = DateAdd("m", -1, Now())
If Month(dteReferencia) < 9 Then
getAnoMesRegerencia = CLng(CStr(Year(dteReferencia)) & "0" & CStr(Month(dteReferencia)))
Else
getAnoMesRegerencia = CLng(CStr(Year(dteReferencia)) & CStr(Month(dteReferencia)))
End If
End Function
Tela de criação de uma task ActiveX Script
Criando um procedimento condicional a ser executado – Data
Driven Query Task
Para realizar a importação de dados, podem ser utilizados o “Execute SQL Task” ou o
“Transform Data Task”. Neste exemplo utilizo o “Data Driven Task” por ser mais flexível.
Ele permite criar consultas para inserir/atualizar/deletar/selecionar que serão executadas
conforme uma ou mais condições.
Por exemplo:
Se o dado a ser copiado já existe, deve ser realizado um UPDATE. Caso contrário deve ser
realizado um INSERT.
Sendo assim, são necessárias uma consulta para INSERT e outra para UPDATE. Será
verificado se o registro já existe para escolher qual das consultas deve ser executada para
cada linha importada.
Para criar um “Data Driven Query Task” vá em: Task->Data Driven Query Task.
Será mostrado a seguinte caixa de diálogo:
Data Driven Query Task Properties
Guia Source
Nesta guia é definida a fonte de dados. Pode-se selecionar uma tabela ou escrever uma
consulta SQL (executar uma stored procedure, por exemplo).
No caso de consultas parametrizadas, deve-se especificar os parâmetros com o caractere
“?”.
A ordem dos parâmetros respeita a ordem de ocorrência dos caracteres “?”;
Data Driven Query – Guia Source
Para mapear os parâmetros com variáveis globais ou constantes, clicar em “Parameters”.
É importante prestar atenção a ordem de ocorrência dos parâmetros.
Ex.: O primeiro ? é o Param1, o segundo é o Param2 e assim por diante...
Guia Bindings
Nesta guia define-se o destino. Deve-se selecionar a tabela que irá receber os dados.
Data Driven Query Task – Guia Bindinfs
Guia Queries
Aqui são definidas as consultas que podem ser executadas.
Podem ser definidas consultas de Insert/Update/Delete/Select.
Construa as consultas de Insert e delete de forma a receber os dados da origem.
Código Insert:
INSERT INTO
dbo.TbFiscaisPostos (CodEscala, RgFiscal, AnoMesRef)
VALUES (?, ?, ?)
Código Update (neste exemplo o update não faz muito sentido, pois todos os campos fazem
parte da chave primária, logo não será utilizado):
UPDATE dbo.TbFiscaisPostos SET
CodEscala = ?,
RgFiscal = ?,
AnoMesRef = ?
WHERE CodEscala = ?
AND (RgFiscal = ?)
AND (AnoMesRef = ?)
Data Driven Query – Queries
Os parâmetros das consultas devem ser mapeados corretamente na listagem de parâmetros.
Cada registro existente na origem de dados irá executar uma destas consultas, e os
parâmetros mapeados serão trocados pelos respectivos valores.
Guia Lookups
Aqui são criadas consultas a serem utilizadas dentro do ActiveX Sctript para esta Data
Driven Query.
Por exemplo:
Para saber se deve ser realizado um insert ou um update, é necessário consultar se o registro
que está sendo importado já existe.
Para criar a consulta, preencha a coluna “Name”, escolha a conexão e clique no botão “...”
da coluna query..
Data Driven Query – Lookups
A consulta utilizada é:
SELECT COUNT(1) AS Expr1
FROM dbo.TbFiscaisPostos
WHERE (CodEscala = ?) AND (RgFiscal = ?) AND (AnoMesRef = ?)
Guia Transformations
Nesta guia são mapeados a origem e o destino.
Data Driven Query Task – Transformations
Nas guias “Source Columns” e “Binding Columns” selecione os atributos a serem
utilizados.
Deletar os scripts existentes e clicar em “New” para criar um novo ActiveX Script.
Abrir-se-á uma nova janela, que permitirá criar um novo ActiveXScript (escolher esta
opção).
Ao clicar em properties e será apresentado um editor de script.
ActiveX Script
Será criado, automaticamente um código que mapeia as origens nos destinos.
Como o código abaixo:
'**********************************************************************
' Visual Basic Transformation Script
'************************************************************************
' Copy each source column to the destination column
Function Main()
DTSDestination("AnoMesRef") = DTSSource("anoMesRef")
DTSDestination("RgFiscal") = DTSSource("rgFiscal")
DTSDestination("CodEscala") = DTSSource("codEscala")
Main = DTSTransformstat_InsertQuery
End Function
Neste script deve ser realizado o teste para descobrir se o registro que esta sendo importado
já existe no destino.
A consulta (INSERT/UPDATE) a ser executada depende do retorno da função main.
Algumas constantes que podem ser retornadas pela função main:
DTSTransformStat_InsertQuery – indica que deve ser utilizada a consulta de insert
DTSTransformStat_UpdateQuery – indica que deve ser utilizada a consulta de update.
DTSTransformStat_DeleteQuery – indica que deve ser utilizada a consulta de delete
DTSTransformStat_SelectQuery - indica que deve ser utilizada a consulta de select
Quando o registro já existir, usaremos DTSTransformStat_SkipInsert.
Esta constante indica que nada deve ser feito.
Alterar o código para:
'**********************************************************************
' Visual Basic Transformation Script
'************************************************************************
' Copy each source column to the destination column
Function Main()
DTSDestination("AnoMesRef") = DTSSource("anoMesRef")
DTSDestination("RgFiscal") = DTSSource("rgFiscal")
DTSDestination("CodEscala") = DTSSource("codEscala")
if DTSLookups("exists").Execute(DTSSource("codEscala"), _
DTSSource("rgFiscal"), DTSSource("codEscala")) = 0 then
Main = DTSTransformstat_InsertQuery
else
Main = DTSTransformStat_SkipInsert
end if
End Function
Este trecho de código utiliza a consulta criada na guia Lookups para verificar se o registro
já existe.
Não existindo o registro é utilizada a query de insert. Caso contrário, nada será feito.
Executando a importação
É necessário configurar a ordem de execução do pacote.
Para isto clique na DataDriven Query criada com o botão direito do mouse->Workflow>Workflow Propertirs.
No diálogo apresentado selecione o modulo ActiveX Script criado anteriormente.
O modelo workflow ficará como este:
Modelo workflow
Realizando a importação de um arquivo texto em um
servidor FTP
Este exemplo visa atender a necessidade de importação de arquivos gerados por mainframe
no padrão CSV.
Realizando o FTP
Acionar Tasks->File Transfer Protocol Task.
Abrir-se-á uma nova caixa de diálogo solicitando os parâmetros de conexão FTP.
Na guia location deve-se preencher os dados de origem e destino.
Na guia files deve-se escolher os arquivos a serem baixados.
Destino dinâmico
No momento em que o destino é especificado, o diretório listado é o do computador do
usuário.
Porém, quando o pacote for executado em um servidor, o destino será procurado no
servidor.
Isto é um problema, pois se faz necessária a replicação do ambiente do usuário no servidor.
Ou seja: se for configurado para fazer o download do arquivo em d:\sistemas\sistema1, este
diretório deverá existir no servidor.
Além disso, este diretório deverá ter permissão para escrita.
Uma forma de resolver este problema é utilizar o TEMP do usuário.
Assim, quando o pacote for executado por um job do SQL Server, o arquivo ficará no temp
do usuário do SQL Server.
E quando for executado pelo desenvolvedor, ficará no TEMP do desenvolvedor.
Para isto, será utilizado o “Dynamic Properties Task”. (Tasks-> Dynamic Properties Task).
Diálogo Dynamic Properties Task
Clicar em Add para definir uma nova propriedade dinâmica.
Abrir a árvore Tasks e selecionar o DTSTask_DTSFTPTask_1 (que é uma referência ao
task de FTP criado anteriormente).
Serão listadas todas as propriedades do task FTP.
A propriedade a ser configurada é “DestSite”.
Alterando propriedades dinamicamente
Clicar em DestSite e depois em Set.
Será aberta uma caixa de diálogo solicitando a origem da propriedade.
Selecione “Environment Variable” em “Source” e “TEMP” em “Variable”.
Atribuindo a variável TEMP
Adicionando a origem de dados como arquivo
Acionar Connection->Text File (Source) para adicionar uma conexão com o arquivo de
texto.
Como a localização do arquivo será dinâmica, apenas aponte para um arquivo texto de
exemplo (não importando a sua localização).
Clique em properties para configurar como os dados devem ser enxergados no arquivo.
Arquivo de origem
Alterando a localização do arquivo de origem via Script
Acione “Task->ActiveX Script Task” para criar um novo módulo de script.
Neste módulo será alterada a localização da origem (arquivo de texto) de dados (a que será
copiada de um servidor FTP).
Veja o código abaixo:
'**********************************************************************
' Visual Basic ActiveX Script
'************************************************************************
Function Main()
dim oPacote 'as DTS.Package
dim o 'As Object
Set oPacote = DTSGlobalVariables.Parent
oPacote.Connections("Arquivo CSV").dataSource =
oPacote.Tasks("DTSTask_DTSFTPTask_1").customTask.destSite & "\teste.txt"
Main = DTSTaskExecResult_Success
End Function
Na linha:
oPacote.Connections("Arquivo CSV").dataSource =
oPacote.Tasks("DTSTask_DTSFTPTask_1").customTask.destSite & "\teste.txt"
Está sendo atribuído o arquivo copiado do servidor FTP.
“Arquivo CSV” é o nome do Text File e DTSTask_DTSFTPTask_1 é o nome do task FTP.
Script para alterar a origem do arquivo texto
Atribuindo o destino dos dados importados
Crie uma nova conexão para onde os dados serão copiados.
Neste exemplo será uma instância do SQL Server.
Connection->Microsoft OLE DB Provider for SQL Server
Será aberta uma caixa de diálogo para configurar a conexão com o banco SQL Server.
Conexão de destino
Tarefa para copiar os dados
Para copiar os dados, utilize Task->Transformation Data Task.
Selecione primeiro a origem, depois o destino.
Abra as propriedades desta task e edite o destino, escolhendo a tabela a ser populada.
Destino da importação
Definindo a ordem de execução
O pacote deve ser executado na seguinte ordem:
1 – Dynamic Properties
2 – FTP
3 – Módulo ActiveX
4 – Text File
Para definir a ordem, pressionar a tecla Ctrl selecionar dois itens (na ordem de execução).
Depois acionar Workflow->On success.
Ou seja:
Selecionar 1 e 2 e acionar Workflow->On success.
Selecionar 2 e 3 e acionar Workflow->On success.
Selecionar 3 e 4 e acionar Workflow->On success.
Download