INF: DTS pacote desenvolvimento, implementação e desempenho

Traduções de Artigos Traduções de Artigos
Artigo: 242391 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

O objectivo deste artigo é fornecer algumas informações detalhadas para ajudar no desenvolvimento e implementação de pacotes do SQL Server 7.0 Data Transformation Services (DTS). Também são fornecidas sugestões para melhorar o desempenho do pacote.

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

Mais Informação

Efectuar ligações de dados flexível

Um pacote DTS é uma unidade completamente automático contido. Todas as informações de ligação é de leitura para a colecção de propriedades de ligação durante a concepção, informações de ligação, mesmo no UDLs e DSNs de ODBC. Se alterar o DSN de ODBC ou UDL OLEDB depois de criar o pacote, essa alteração não terá efeito no pacote. Isto é importante lembrar-se ao tentar migrar pacotes de um ambiente de desenvolvimento para produção.

Quando utiliza ligações de dados do SQL Server, utilize (local) para o nome de servidor para facilitar a mover o pacote a partir do servidor uma vez que o nome do servidor é resolvido em tempo de execução do pacote. Um truque para esta abordagem é que requer que o pacote ser executado e editado no SQL Server computador.

Pode também utilizar uma tarefa de script ActiveX ou um programa de mensagens publicitárias para modificar propriedades do pacote em tempo de execução. Para modificar o pacote a partir de dentro da mesma, criar uma tarefa de Script ActiveX que precede as tarefas de bomba de dados e modificar o pacote enquanto é executado. Para obter um identificador para a referência de pacote DTSGlobalVariables.Parent. A partir daí pode alterar as propriedades de pacote, embora requer alguma dificuldade de programação.

Segue-se um exemplo do SQL Books Online tópico, "Tarefas de Script ActiveX," sobre como alterar a propriedade de ligação à origem de dados 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 pretender maior controlo e não atenção codificação ainda mais, considere modificar o pacote com um programa externo que está a ser executado ou criar o pacote a partir do zero.

Para criar um programa para carregar e modificar um pacote, crie o pacote modelo utilizando o Assistente de DTS ou Designer DTS e guardá-lo. Escreva um programa do Visual Basic que carrega o pacote e modifica as propriedades pretendidas, em seguida, chamar o método Execute do objecto do pacote para executar o pacote.

Para criar um programa para gerar um pacote a partir do zero, criar um pacote de protótipo utilizando o Assistente de DTS ou Designer DTS e guardá-lo ao SQL Server local. Utilize o utilitário ScriptPkg no seguinte artigo da base de dados de conhecimento da Microsoft para criar um modelo para o código de pacote:
239454INF: ScriptPkg ferramenta gera código do modelo de objecto DTS para utilizar ajuda DTS através de programação
Utilizar este modelo como uma referência, escreva o seu próprio código para gerar um pacote com base na intervenção do utilizador.

Tenha em atenção que para ambas as situações anteriores, projecto do Visual Basic tem de ter uma referência para o Microsoft DTSPackage Object Library.

importante : quando executar um pacote de um programa escrito em Visual Basic e monitorização pacote ou eventos de tarefa, todos os passos no pacote devem ser configurados para executar num thread principal. Isto se a uma limitação no Visual Basic que impede o processar correctamente várias chamadas simultâneas para os eventos.

Controlar pacotes com variáveis globais

As variáveis globais só são acessíveis a partir do ActiveX transformações, tarefas de script ActiveX e scripts de fluxo de trabalho. Não podem ser utilizadas directamente nas propriedades de ligação ou instruções SQL. No entanto, uma tarefa de script ActiveX pode ser utilizada para modificar uma instrução de SQL ou propriedades de ligação com base numa variável global. Eis um exemplo da tarefa de script ActiveX que pode ser utilizado para alterar a instrução SQL para uma tarefa de bomba de dados com base à variável global denominada '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
				
Nota : A descrição de uma tarefa é apresentada no estruturador de DTS, mas não pode ser utilizado para referenciar directamente uma tarefa num script ActiveX. O nome da tarefa deve ser utilizado para fazer referência a tarefa a partir de um script do ActiveX. Para obter o nome da tarefa observar as propriedades de fluxo de trabalho para o nome passo. O nome da tarefa é igual o passo, excepto a palavra 'Passo' é substituído pelo 'Tarefas'. Por exemplo, DTSStep_DTSDataPumpTask_1 torna-se DTSTask_DTSDataPumpTask_1.

Parâmetros de passagem para um pacote DTS

O programa DTSRun não aceita quaisquer parâmetros de linha de comandos que podem ser passados para o pacote ao tempo de execução. Para passar informações a um pacote em tempo de execução, os parâmetros tem de ser lidos num ficheiro ou consultados programaticamente a partir de uma tabela de base de dados.

Nota : Se o SQL Server 2000 ferramentas ou uma instância nomeada do SQL Server 2000 estiver instalada num servidor com o SQL Server 7.0 instalado como instância predefinida, o programa DTSRun pode aceitar o parâmetro linha de comandos /A para passar valores de linha de comandos para variáveis globais definidas num pacote de DTS do SQL Server 7.0.

Aqui está um exemplo de uma tarefa de Script ActiveX indicando uma linha a partir de um ficheiro de texto para definir uma variável global. Esta variável global, em seguida, poderá utilizar para modificar o comportamento de pacote tal como apresentado na secção de "Controlar pacotes com global variáveis" 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 exemplo seguinte mostra como utilizar uma tarefa de Script ActiveX ler parâmetros a partir de uma tabela do SQL Server. O código lê o valor da coluna paramvalue o my_param_table e utiliza-o para definir uma variável global. Este exemplo utiliza SQL Distributed Management objectos (DMO) para interagir com o SQL Server, mas pode efectuar o mesmo utilizando o ActiveX Data Objects (ADO) 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
				

Escrever personalizada DTS tarefas no Visual Basic

É possível escrever tarefas DTS personalizadas no Visual Basic. Um exemplo de uma tarefa personalizada no Visual Basic sem uma interface de utilizador está disponível no directório de \Devtools\Samples\DTS no CD-ROM do SQL Server. Seguem-se vários problemas comuns encontrados ao lidar com tarefas de Visual Basic personalizadas em DTS:
  1. Tarefas personalizadas escritas no Visual Basic que implementam uma interface como DTS.CustomTaskUI tem implementar cada evento na interface ou irão provocar uma violação de acesso.
  2. Se estiver a desenvolver uma tarefa personalizada do Visual Basic com uma interface de utilizador, recomenda-se que aplique o SQL Server Service Pack 1 (SP1). SP1 incorpora vários melhoramentos para facilitar o desenvolvimento de interface de utilizador.
  3. Tarefas do Visual Basic são apartment threaded enquanto DTS tem thread livre. Para executar uma tarefa escrita no Visual Basic, deve ser executado no thread principal ou irá provocar uma violação de acesso. DTS define o sinalizador adequado, por predefinição. O utilizador não deve alterar este sinalizador.

Obter informações sobre como código DTS pacotes

No SQL 7.0, existem vários exemplos de CD-ROM na pasta \Devtools\Damples\DTS. Estes incluem um exemplo de tarefas personalizado (Visual Basic) e um personalizada de transformação (C++). Alguns pacotes de exemplo também são automático DTSDemo.exe executável de extracção.

O exemplo mais versátil é ScriptPkg, que faz parte do Dtsdemo.exe. ScriptPkg contém o código de origem do Visual Basic que converte um pacote guardado no servidor local no código do Visual Basic. Neste exemplo é recomendado para:
  1. Produzir exemplos de Visual Basic por um pacote DTS existente de scripts.
  2. Aparecer como código o controlador de flatfile DTS, que não está documentada em SQL Books Online.
  3. Converter um pacote em texto para que possam ser adicionado à e registada SourceSafe.
Seguem-se vários problemas conhecidos com o exemplo ScriptPkg:
  1. Pesquisas de bomba de dados que não são correctamente script.
  2. Se o pacote é demasiado grande, em seguida, texto gerado não pode ser tratado como uma função no Visual Basic devido a uma limitação do número de linhas de uma função. Terá de dividir o ficheiro de script em várias funções no seu para obter o Visual Basic para compilar o código.

Melhorar o desempenho de pacotes DTS

Utilizar carrega paralela

DTS é capaz de executar várias tarefas em paralelo. No entanto, cada ligação num pacote DTS só pode processar um módulo ao mesmo tempo. Isto significa que o Bombas de dados seguinte num pacote são todas serializadas:

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

Se utilizar os ícones do mesmos ou diferentes para a ligação faz qualquer diferença.

A única forma de obter execução paralela de tarefas é criar múltiplas ligações para a mesma base de dados com nomes diferentes. Por exemplo A-> B e C-> D são executados em paralelo mesmo B e D ligações diferentes para o mesmo servidor e base de dados.

Restrições de precedência podem ser utilizadas para impor a ordem de execução de tarefas e evitar parallelism para tarefas seleccionadas como necessário.

Inserir consolidar tamanho

O parâmetro mais importante da tarefa de bomba de dados é o Tamanho para inserir a consolidação . Esta propriedade só é relevante quando o destino é do SQL Server. Controla o número de linhas é inserida antes da transacção é consolidada em massa. Por predefinição, esta é 0; todas as linhas fazem parte de uma única transacção. Esta é a definição mais segura porque qualquer erro do SQL Server recupera todas as alterações. No entanto, pode necessitar de um registo de transacções muito grande, conduzir a tempo de resposta muito longo quando um pacote é cancelado e ser contador produtivo quando uma única linha no fim de uma grande carga faz com que a carga completa a falha. Uma pausa perceptível é apresentada no final de cada intervalo de consolidação enquanto as linhas são consolidadas. Um tamanho de consolidação igual a 0 é mais rápido, mas outros valores correctos são 10.000, 1 e 1000 ordem de diminuir a velocidade. 1 é útil porque apenas 1 linha é revertida em qualquer falha.

Note que definir a contagem de erro para qualquer número 1 > não tem efeito se o tamanho de consolidação de inserção é 0. A contagem de erros indica o número de transacções com erros, não o número de linhas.

No SQL Server 7.0, é possível definir o valor de Tamanho para inserir a consolidação na secção de Movimento de dados no separador Avançadas das propriedades para a tarefa de transformação de dados.

DTS e transacções distribuídas

Pacotes DTS fornecem suporte para transacções distribuídas para os fornecedores que suportam o DTC. O serviço DTC tem de ter para transacções de pacote e passo trabalhar. Além disso, cada fornecedor na transacção tem de suportar DTC.

As propriedades de transacção do pacote são controladas no separador Avançadas das propriedades do pacote.

Por predefinição, cada passo num pacote gere transacções própria e não coordenará de transacções através do DTC. Para inscrever uma tarefa de uma transacção DTC tem de definir a caixa de verificação "aderir a transacção se existirem" nas propriedades de fluxo de trabalho da tarefa. Outras opções de transacção DTC para uma tarefa são "Transacção de consolidação for concluído com êxito deste passo" e "Anular transacção em caso de falha".

Tenha em atenção que os pacotes não suportam Microsoft Transaction Server (MTS).

Mensagem de erro

Quando utiliza o local para o servidor da base de dados para uma ligação de um pacote e, em seguida, é editado o pacote de outro servidor e pretende observar as transformações, a seguinte mensagem de erro ocorre:
Origem do erro: Fornecedor Microsoft OLE DB para SQL Server descrição de erro: não é possível abrir base de dados pedido no início de sessão 'xxxxxxx'. Falha de início de sessão."

Propriedades

Artigo: 242391 - Última revisão: 25 de novembro de 2002 - Revisão: 1.2
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbmt kbinfo KB242391 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 242391

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