INF: Sviluppo del pacchetto DTS, distribuzione e prestazioni

Traduzione articoli Traduzione articoli
Identificativo articolo: 242391 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Lo scopo di questo articolo è di fornire alcune informazioni dettagliate per facilitare lo sviluppo e distribuzione dei pacchetti SQL Server 7.0 Data Transformation Services (DTS). Vengono inoltre forniti suggerimenti per migliorare le prestazioni del pacchetto.

Per informazioni su questo argomento in SQL Server 2000, vedere la documentazione in linea di SQL Server.

Informazioni

Rendere le connessioni di dati più flessibili

Un pacchetto DTS è un'unità di self contenuti completamente. Al momento della creazione del pacchetto tutte le informazioni di connessione vengono infatti inserite nella raccolta delle proprietà di connessione, comprese le informazioni di connessione negli UDL e nei DSN ODBC. Se una volta creato il pacchetto, si modifica il DSN ODBC oppure l'UDL OLEDB, questa modifica non avrà alcun effetto sul pacchetto. È importante ricordare questo aspetto quando si tenta di migrare i pacchetti dall'ambiente di sviluppo a quello di utilizzo.

Quando si utilizzano connessioni di dati di SQL Server, utilizzare (Local) come nome di server, in modo da facilitare lo spostamento del pacchetto da server a server, dato che il nome del server viene risolto al momento dell'esecuzione del pacchetto. L'unico svantaggio di questo approccio è dato dal fatto che è necessario che il pacchetto venga eseguito e modificato nel computer che esegue SQL Server.

È anche possibile utilizzare uno script ActiveX o un programma wrapper per modificare le proprietà del pacchetto a runtime. Per modificare il pacchetto dal proprio interno, creare un'attività di script ActiveX che preceda le attività di data pump e modifichi il pacchetto nel corso della sua esecuzione. Per ottenere un handle per il riferimento di pacchetto DTSGlobalVariables.Parent. Da qui è possibile modificare le proprietà del pacchetto, sebbene sia necessaria un po' competenze di programmazione.

Riportato di seguito è un esempio dell'argomento documentazione in linea di SQL, "Attività Script ActiveX", su come modificare la proprietà di connessione DataSource con uno 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 si desidera esercitare un maggiore controllo e non presente codifica ulteriormente, provare a modificare il pacchetto con un programma esterno prima che viene eseguito o creazione del pacchetto da zero.

Per creare un programma per il caricamento e la modifica di un pacchetto, creare il pacchetto modello utilizzando Creazione guidata DTS oppure Progettazione DTS e salvarlo. Scrivere un programma di Visual Basic che carichi il pacchetto e ne modifichi le proprietà desiderate, quindi richiamare il metodo Execute per l'oggetto pacchetto affinché esegua il pacchetto.

Per creare un programma che generi un pacchetto da zero, creare un pacchetto prototipo utilizzando Creazione guidata DTS o Progettazione DTS e salvarlo nel computer locale che esegue SQL Server. Utilizzare l'utilità ScriptPkg documentata nell'articolo della Microsoft Knowledge Base riportato di seguito per creare un modello per il codice del pacchetto:
239454INF: Utilità ScriptPkg genera codice di modello di oggetto DTS da Guida in linea utilizzare DTS a livello di codice
Utilizzando questo modello come riferimento, scrivere del codice che generi un pacchetto in base ai dati forniti dall'utente.

In entrambe le situazioni descritte, il progetto di Visual Basic deve disporre di un riferimento alla libreria oggetti DTSPackage Microsoft.

importante : durante l'esecuzione di un pacchetto da un programma scritto in Visual Basic e pacchetto di monitoraggio o gli eventi di attività, è necessario che tutti i passaggi del pacchetto sia configurati per eseguire sul thread principale. Ciò è imposto da un limite di Visual Basic che impedisce al programma di gestire correttamente più chiamate simultanee ai propri eventi.

Controllo dei pacchetti tramite variabili globali

È possibile accedere alle variabili globali solo da attività di script ActiveX, da script di flusso di lavoro e da trasformazioni ActiveX. Non è possibile utilizzare direttamente le variabili globali in istruzioni SQL o in proprietà di connessione. Tuttavia è possibile utilizzare un'attività di script ActiveX per modificare un'istruzione SQL o delle proprietà di connessione basate su una variabile globale. Di seguito è riportato un esempio di attività script ActiveX che può essere utilizzato per modificare l'istruzione SQL per un'attività data pump di dati basata sulla variabile globale denominata '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 : la descrizione di un'attività viene visualizzata nella finestra di Progettazione DTS, ma non è utilizzabile per fare riferimento direttamente un'attività in uno script ActiveX. Per fare riferimento all'attività da uno script ActiveX, si dovrebbe utilizzare il nome dell'attività. che può essere ricavato osservando le proprietà del flusso di lavoro per il nome del passaggio. Il nome dell'attività è uguale al nome del passaggio con la sola eccezione che la parola 'Step' (passaggio) è sostituita da 'Task' (attività). Ad esempio, DTSStep_DTSDataPumpTask_1 diventa DTSTask_DTSDataPumpTask_1.

Invio di parametri a un pacchetto DTS

Il programma DTSRun non accetta alcun parametro di riga di comando passato al pacchetto durante la sua esecuzione. Per passare le informazioni a un pacchetto durante il runtime, è necessario che i parametri vengano letti da un file o recuperati da una tabella di database utilizzando del codice.

Nota : se gli strumenti di SQL Server 2000 o un'istanza denominata di SQL Server 2000 è installata su un server che ha installato come istanza predefinita di SQL Server 7.0, il programma DTSRun può accettare il parametro della riga di comando /A per passare i valori dalla riga di comando le variabili globali definite in un pacchetto DTS di SQL Server 7.0.

Di seguito è riportato un esempio di attività di script ActiveX che legge una riga da un file di testo per impostare una variabile globale. Questa variabile globale potrebbe essere utilizzata per modificare il comportamento del pacchetto come mostrato nella sezione "Controllo dei pacchetti tramite variabili globali" di questo articolo.
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
				
nell'esempio riportato di seguito viene illustrato come utilizzare un'attività Script ActiveX per leggere i parametri da una tabella di SQL Server. Il codice va a leggere il valore della colonna paramvalue contenuta nella tabella my_param_table e utilizza tale valore per impostare una variabile globale. Questo esempio utilizza il metodo DMO (Distributed Management Objects) di SQL per interagire con SQL Server, ma è possibile ottenere lo stesso risultato utilizzando ActiveX Data Objects (ADO) o un altro metodo di accesso ai dati.
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
				

Scrittura di attività DTS personalizzate in Visual Basic

È possibile scrivere attività DTS personalizzate in Visual Basic. Un esempio di un'attività personalizzata in Visual Basic senza interfaccia utente è disponibile nella directory \Devtools\Samples\DTS sul CD di SQL Server. Di seguito sono riportati alcuni problemi comuni durante la gestione di attività personalizzate di Visual Basic in DTS:
  1. Le attività personalizzate scritte in Visual Basic che implementano un'interfaccia come DTS.CustomTaskUI DEVONO implementare ciascun evento nell'interfaccia se non si vuole che si verifichi una violazione di accesso.
  2. Se si sta sviluppando un'attività personalizzata in Visual Basic con un'interfaccia utente, si consiglia di applicare il Service Pack 1 per SQL Server,. in cui sono contenuti numerosi miglioramenti che consentono di facilitare lo sviluppo di interfacce utenti.
  3. Le attività di Visual Basic sono a thread di tipo Apartment, mentre le attività DTS sono a thread libero. Al fine di eseguire un'attività scritta in Visual Basic, questa deve essere eseguita nel thread principale o verrà generata una violazione di accesso. DTS imposta l'indicatore appropriato che. l'utente non dovrebbe modificare.

Ottenimento di informazioni sulla codifica di pacchetti DTS

Nella cartella \Devtools\Damples\DTS del CD di SQL 7.0 sono contenuti numerosi pacchetti di esempio,. tra cui un'attività personalizzata di Visual Basic e una trasformazione personalizzata in C++. Alcuni pacchetti di esempio sono contenuti anche nel file eseguibile autoestraente DTSDemo.exe.

L'esempio più versatile è ScriptPkg, contenuto in Dtsdemo.exe. ScriptPkg contiene il codice di origine di Visual Basic che converte un pacchetto salvato nel server locale in codice Visual Basic. In questo esempio viene utilizzato migliore per:
  1. Produrre esempi di Visual Basic tramite l'esecuzione di script di un pacchetto DTS esistente.
  2. Mostrare come codificare il driver file flat DTS non documentato nella documentazione in linea di SQL.
  3. Convertire un pacchetto in testo, in modo che possa essere aggiunto e tracciato in SourceSafe.
Di seguito sono riportate alcune delle problematiche note relative all'esempio ScriptPkg:
  1. Le ricerche di un data pump non vengono eseguite correttamente negli script.
  2. Se il pacchetto presenta dimensioni troppo elevate, il testo generato non può essere trattato come una funzione in Visual Basic a causa di un limite del numero di righe di una funzione. Sarà necessario spezzare il file di script in più funzioni affinché Visual Basic possa compilare il codice.

Miglioramento delle prestazioni dei pacchetti DTS

Utilizzo di carichi paralleli

DTS è in grado di eseguire più attività in parallelo,. sebbene ogni connessione in un pacchetto DTS possa gestire un solo thread per volta. Questo significa che i seguenti data pump in un pacchetto sono tutti serializzati:

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

Che si utilizzi la stessa icona o icone diverse per la connessione non fa alcuna differenza.

L'unico modo per ottenere un'esecuzione parallela di attività consiste nel creare più connessioni allo stesso database con nomi diversi. Ad esempio A-> B e C-> D vengono eseguiti in parallelo anche se B e D sono connessioni distinte per il server stesso e il database.

È possibile utilizzare i vincoli di precedenza per applicare l'ordine di esecuzione delle attività e impedire il parallelismo per determinate attività.

Inserire la dimensione commit

Il parametro più importante l'attività data pump è Inserisci dimensioni commit . Questa proprietà è rilevante solo quando la destinazione è SQL Server. Essa controlla il numero di righe inserite in blocco prima che venga eseguita la transazione. Per impostazione predefinita questo è 0, tutte le righe fanno parte di una singola transazione. Questo è l'impostazione più sicura perché su qualsiasi errore rollback tutte le modifiche. Tuttavia, può richiedono un log delle transazioni di dimensioni molto grandi, portare a lungo tempo di risposta quando un pacchetto viene annullato e contatore essere produttivi quando una singola riga alla fine di un carico di grandi dimensioni causa il carico intero esito negativo. Alla fine di ciascun intervallo di commit è possibile notare una pausa che coincide con l'esecuzione delle righe. Una dimensione di commit di 0 è più veloce, ma gli altri valori buona sono 10.000, 1000 e 1 in ordine di riduzione della velocità. 1 è utile in quanto in caso di errore viene annullata una sola riga.

Si noti che se si imposta il numero di errori su qualsiasi numero 1 > ha effetto se la dimensione del commit di inserimento è 0. Il conteggio degli errori conta il numero di transazioni con errori, non il numero delle righe.

In SQL Server 7.0, è possibile impostare il valore Inserisci dimensioni commit nella sezione di Spostamento dati nella scheda Avanzate delle proprietà per l'operazione di trasformazione dei dati.

DTS e transazioni distribuite

I pacchetti DTS forniscono supporto per le transazioni distribuite per quei provider che supportano i servizi di trasformazione dei dati. Il servizio DTC deve essere in esecuzione se si desidera che le transazioni pacchetto e passaggi funzionino. Inoltre ciascun provider nella transazione deve supportare DTC.

Proprietà di transazione del pacchetto sono controllate nella scheda Avanzate delle proprietà del pacchetto.

Per impostazione predefinita, ciascun passaggio di un pacchetto gestisce le proprie transazioni e non le coordina tramite DTC. Affinché un'attività venga elencata in una transazione DTC è necessario impostare la casella di controllo "Join Transaction If Present" nelle proprietà del flusso di lavoro dell'attività. Altre opzioni di transazione DTC per un'attività sono "Commit transaction on successful completion of this step" e "Rollback transaction on failure"

I pacchetti NON supportano Microsoft Transaction Server (MTS).

Messaggio di errore

Quando si utilizza Local per il server database per una connessione da un pacchetto e il pacchetto viene in seguito modificato da un altro server e tale persona vuole controllare le trasformazioni, viene visualizzato il seguente messaggio di errore:
Origine errore: Provider Microsoft OLE DB per SQL Server Descrizione dell'errore: Impossibile aprire il database richiesto nell'account di accesso 'xxxxxxx'. Accesso non riuscito."

Proprietà

Identificativo articolo: 242391 - Ultima modifica: lunedì 25 novembre 2002 - Revisione: 1.2
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 7.0 Standard Edition
Chiavi: 
kbmt kbinfo KB242391 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 242391
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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