INF: Desenvolvimento, implantação e desempenho de pacote DTS

Traduções deste artigo Traduções deste artigo
ID do artigo: 242391 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

O objetivo deste artigo é fornecer algumas informações detalhadas para ajudar no desenvolvimento e na implantação de pacotes DTS do SQL Server 7.0. Também são fornecidas dicas para melhorar o desempenho do pacote.

Para obter informações sobre esse assunto no SQL Server 2000, consulte os Books Online do SQL Server.

Mais Informações

Tornando as conexões de dados flexíveis

Um pacote DTS é uma unidade completamente auto-suficiente. Todas as informações de conexão são lidas no conjunto de propriedades da conexão durante o tempo de design, mesmo as informações de conexão em UDLs e em ODBC DSNs. Se você alterar o ODBC DSN ou o OLEDB UDL após a criação do pacote, a alteração não terá efeito no pacote. É importante lembrar-se disso ao tentar migrar pacotes de um ambiente de desenvolvimento para produção.

Ao usar conexões de dados do SQL Server, use (Local) no nome de servidor para facilitar a transferência do pacote de servidor para servidor, visto que o nome de servidor é decidido no período da execução do pacote. A única desvantagem dessa abordagem é que ela exige que o pacote seja executado e editado no próprio computador com SQL Server.

Também é possível usar uma tarefa de script ActiveX ou um programa de invólucro para modificar as propriedades do pacote durante o tempo de execução. Para modificar o pacote nele mesmo, crie uma tarefa de script ActiveX que precede as tarefas de bomba de dados e modifique o pacote durante a sua execução. Para obter um identificador para a referência de pacote DTSGlobalVariables.Parent. A partir disso, é possível alterar qualquer uma das propriedades do pacote, embora seja necessário um pouco de habilidade em programação.

O exemplo a seguir do tópico "Tarefas de script ActiveX" dos Books Online do SQL trata sobre como alterar a propriedade de conexão DataSource com um script ActiveX:
   Function main()
   dim oPackage
   dim oConn

     'Get package object
     set oPackage = DTSGlobalVariables.parent
     'Get a handle to the desired connection.
     set oConn = oPackage.connections(1)
     'Modify the datasource.
     oConn.datasource = "newServerName"

     'Release object handles.
     set oPackage = nothing
     set oConn = nothing

    Main = DTSTaskExecResult_Success
End function
				
Se você deseja ter mais controle e não se importa com mais codificação, considere modificar o pacote com um programa externo antes de ser executado ou crie o pacote do zero.

Para criar um programa para carregar e modificar um pacote, crie o pacote de modelo usando o DTS Wizard ou o DTS Designer e salve-o. Escreva um programa no Visual Basic que carregue o pacote e modifique as propriedades desejadas e chame o método Execute no objeto do pacote para executar o pacote.

Para criar um programa para gerar um pacote do zero, crie um pacote protótipo usando o DTS Wizard ou o DTS Designer e salve-o no SQL Server local. Use o utilitário ScriptPkg do seguinte artigo da Base de Dados de Conhecimento Microsoft para criar um modelo para o código do pacote:
239454 INF: A ferramenta ScriptPkg gera um código de modelo do objeto DTS para ajudar a usar o DTS programaticamente
Usando esse modelo como referência, escreva seu próprio código para gerar um pacote com base na entrada do usuário.

Observe que para ambas as situações de procedimento, o projeto do Visual Basic precisa ter uma referência à biblioteca de objetos Microsoft DTSPackage.

IMPORTANTE: Ao executar um pacote de um programa escrito no Visual Basic e monitorar o pacote ou os eventos de tarefa, todas as etapas no pacote devem estar configuradas para serem executadas no thread principal. Isso se deve a uma limitação no Visual Basic que o impede de manusear adequadamente várias chamadas simultâneas aos seus eventos.

Controlando pacotes com variáveis globais

As variáveis globais estão acessíveis somente a partir das tarefas de script ActiveX, scripts de fluxo de trabalho e transformações ActiveX. Elas não podem ser usadas diretamente em instruções SQL ou propriedades de conexão. Entretanto, uma tarefa de script ActiveX pode ser usada para modificar uma instrução SQL ou propriedades de conexão com base em uma variável global. Abaixo segue um exemplo de uma tarefa de script ActiveX que pode ser usada para alterar a instrução SQL para uma tarefa de bomba de dados com base na variável global chamada 'booktype':
Function Main()
   dim oPackage
   dim oPump

        'Get a handle to the Package object.
	set oPackage = DTSGlobalVariables.Parent
	'Get a handle to the desired Datapump Task.
	set oPump = oPackage.Tasks("DTSTask_DTSDataPumpTask_1").CustomTask   
	'Alter the datapump SQL statement.
	oPump.SourceSQLStatement = "select * from pubs..titles WHERE type _
  = ''" + DTSGlobalVariables("booktype") + "''"
	Main = DTSTaskExecResult_Success
End Function
				
OBSERVAÇÃO: A descrição de uma tarefa é exibida no DTS designer, mas não pode ser usada para fazer referência diretamente a uma tarefa no script ActiveX. O nome da tarefa deve ser usado para fazer referência à tarefa a partir de um script ActiveX. Para obter o nome da tarefa, consulte as propriedades do fluxo de trabalho para o nome da etapa. O nome da tarefa é o mesmo que o da etapa, porém a palavra 'Step' é substituída pela palavra 'Task'. Por exemplo, DTSStep_DTSDataPumpTask_1 torna-se DTSTask_DTSDataPumpTask_1.

Transferindo parâmetros para um pacote DTS

O programa DTSRun não aceita parâmetros de linha de comando que possam ser passados para o pacote durante o tempo de execução. Para passar informações para um pacote durante o tempo de execução, os parâmetros devem ser lidos a partir de um arquivo ou alinhados a partir de uma tabela de banco de dados programaticamente.

OBSERVAÇÃO: Se as ferramentas do SQL Server 2000 ou uma instância nomeada do SQL Server 2000 for instalada em um servidor que possui o SQL Server 7.0 instalado como a instância padrão, o programa DTSRun poderá aceitar o parâmetro de linha de comando /A para passar valores de uma linha de comando para variáveis globais definidas em um pacote DTS do SQL Server 7.0.

Este é um exemplo de uma tarefa de script ActiveX que lê uma linha de um arquivo de texto para definir uma variável global. Essa variável global pode ser usada para modificar o comportamento do pacote conforme exibido na seção "Controlando pacotes com variáveis globais" deste artigo.
Function main()
  Dim fso	'This will serve as a handle to a file system object.
  Dim ofile	'Handle for accessing a file.

    'Get a file system object for manipulation files.
    Set fso = CreateObject("Scripting.FileSystemObject")

    'Open the text file.
    Set ofile = fso.OpenTextFile("c:\test.txt")

    'Read line from the file into the global variable.
    DTSGlobalVariables("myGlobalVar").Value = ofile.ReadLine

    'Close the "parameter" file.
    ofile.Close

    Main = DTSTaskExecResult_Success
End function
				
O seguinte exemplo mostra como usar uma tarefa de script ActiveX para ler parâmetros de uma tabela do SQL Server. O código lê o valor da coluna paramvalue em my_param_table e utiliza-o para definir uma variável global. Esse exemplo usa os Objetos de gerenciamento distribuído SQL (SQL-DMO) para interagir com o SQL Server, mas é possível alcançar o mesmo objetivo usando o ADO (ActiveX Data Objects) ou outro método de acesso a dados.
Function main()
Dim oServer 		'DMO Server object.
Dim oResult		'Result set.
Dim sParamValue

	'Create a SQLDMO server object.
	Set oServer =  CreateObject("SQLDMO.SQLServer")

	' Make a connection to the local server.
	oServer.Connect ".", "sa"

	'Select the desired row from the table.
	set oResult = oServer.Databases("pubs").ExecuteWithResults_
("select  paramvalue from  my_param_table")

	'Retrieve the first row, first column from the results.
	sParamValue = oResult.GetColumnString (1,1)

	'Set the global variable.
	DTSGlobalVariables("MyGlobalVar").Value = sParamValue

	Main = DTSTaskExecResult_Success
End function
				

Escrevendo tarefas DTS personalizadas no Visual Basic

É possível escrever tarefas DTS personalizadas no Visual Basic. Um exemplo de uma tarefa personalizada no Visual Basic sem interface com o usuário está disponível no diretório \Devtools\Samples\DTS no CD-ROM do SQL Server. Abaixo são exibidos vários problemas comuns encontrados ao lidar com tarefas personalizadas do Visual Basic no DTS:
  1. As tarefas personalizadas escritas no Visual Basic que implementam uma interface como DTS.CustomTaskUI DEVEM implementar cada evento na interface, caso contrário elas irão causar uma violação de acesso.
  2. Se você estiver desenvolvendo uma tarefa personalizada do Visual Basic com uma UI, será recomendável a aplicação do SQL Server Service Pack 1 (SP1). O SP1 incorpora vários aprimoramentos para facilitar o desenvolvimento da UI.
  3. As tarefas do Visual Basic são apartment threaded, enquanto o DTS é free threaded Para executar uma tarefa escrita no Visual Basic, ela deve ser executada no thread principal, caso contrário causará uma violação de acesso. O DTS define o sinalizador adequado por padrão. O usuário não deve alterar este sinalizador.

Obtendo informações sobre como codificar pacotes DST

No SQL 7.0, existem vários exemplos no CD-ROM na pasta \Devtools\Samples\DTS. Eles incluem uma tarefa personalizada de exemplo (Visual Basic) e uma transformação personalizada (C++). Alguns pacotes de exemplo também estão no arquivo executável DTSDemo.exe de extração automática.

O exemplo mais versátil é o ScriptPkg, que é parte do Dtsdemo.exe. O ScriptPkg contém o código de origem do Visual Basic que converte um pacote salvo no servidor local em um código do Visual Basic. Este exemplo é melhor usado para:
  1. Produzir exemplos do Visual Basic ao escrever scripts para um pacote DTS existente.
  2. Mostrar como codificar o driver do arquivo simples DTS, que não é documentado nos Books Online do SQL.
  3. Converter um pacote em texto para que possa ser adicionado ao SourceSafe e rastreado.
A seguir estão vários problemas conhecidos do exemplo do ScriptPkg:
  1. As buscas por uma bomba de dados não estão inseridas corretamente.
  2. Se o pacote for muito grande, o texto gerado não poderá ser tratado como uma função no Visual Basic devido a uma limitação no número de linhas em uma função. Será necessário separar o arquivo de script em várias funções, conforme desejado, para que o Visual Basic compile o código.

Aprimorando o desempenho do pacote DTS

Usando carregamentos paralelos

O DTS é capaz de executar várias tarefas paralelamente. Entretanto, cada conexão em um pacote DTS pode manusear somente um thread por vez. Ou seja, as seguintes bombas de dados em um pacote são todas serializadas:

A -> B e A -> B
A -> B e A -> C
A -> B e C -> B

Não fará nenhuma diferença se você usar ou não os mesmos ou diferentes ícones.

O único modo de obter uma execução paralela de tarefas é criar várias conexões para o mesmo banco de dados com diferentes nomes. Por exemplo, A -> B e C -> D serão executados paralelamente mesmo se B e D forem conexões diferentes para o mesmo servidor e banco de dados.

As restrições de precedência podem ser usadas para reforçar a ordem de execução da tarefa e evitar o paralelismo em tarefas selecionadas, conforme necessário.

Insert Commit Size

O parâmetro mais importante na tarefa de bomba de dados é o Insert Commit Size. Essa propriedade é relevante apenas quando o destino é o SQL Server. Ela controla quantas linhas são inseridas em massa antes da confirmação da transação. Por padrão, ela é igual a 0; todas as linhas são parte de uma transação única. Esta é a configuração mais segura, pois a qualquer erro o SQL Server reverte todas as alterações. Entretanto, ela pode gerar um log de transações muito grande, ocasionar um tempo de resposta muito longo quando um pacote é cancelado e não ser produtiva quando uma única linha no final de um grande carregamento fizer com que o carregamento todo falhe. Uma pausa considerável é exibida no final de cada intervalo de confirmação enquanto as linhas são confirmadas. Um tamanho de confirmação igual a 0 é mais rápido, porém outros bons valores são 10.000, 1000 e 1 em ordem decrescente. 1 é útil porque somente uma linha é revertida em qualquer falha.

Observe que definir a contagem de erro como qualquer número > 1 não terá efeito se o tamanho de confirmação for 0. A contagem de erro calcula o número de transações com erros, não o número de linhas.

No SQL Server 7.0, é possível definir o valor Insert Commit Size na seção Data Movement na guia Advanced das propriedades na tarefa de dados de transformação.

DTS e Transações distribuídas

O pacote DTS fornece suporte às transações distribuídas para aqueles provedores que suportam DTC. O serviço DTC deve estar sendo executado nas transações de pacote e de etapa para funcionar. Além disso, cada provedor na transação deve oferecer suporte ao DTC.

As propriedades da transação de pacote são controladas na guia Advanced das propriedades do pacote.

Por padrão, cada etapa em um pacote lida com suas próprias transações e não coordena suas transações através do DTC. Para inscrever uma tarefa em uma transação DTC é necessário definir a caixa de seleção "join transaction if present" nas propriedades de fluxo de trabalho da tarefa. As outras opções de transação DTC são para "Commit transaction on successful completion of this step" e "Rollback transaction on failure".

Observe que os pacotes não oferecem suporte ao MTS.

Mensagem de erro

Ao usar Local para o servidor do banco de dados em uma conexão de um pacote, o pacote é então editado a partir de outro servidor e se aquela pessoa desejar verificar as transformações, a seguinte mensagem de erro é exibida:
Origem do erro: Descrição de erro para o Microsoft OLE DB Provider for SQL Server: Não é possível abrir o banco de dados solicitado no login 'xxxxxxx'. Falha de login."

Propriedades

ID do artigo: 242391 - Última revisão: quinta-feira, 17 de janeiro de 2008 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbinfo KB242391

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com