Nelle moderne applicazioni web (Internet o Intranet) i database OLTP rivestono sempre più un ruolo determinante. Il processo di "messa online" di un database OLTP con SQL Server viene realizzato attraverso tre macrofasi, che potremmo chiamare le 3P:
- Progettazione (logica e fisica), consiste nella creazione del database, tabelle, relazioni, vincoli, etc.
- Programmazione, consiste nellacreazione di stored procedure, funzioni utente, etc.
- Popolamento, consiste nel caricamento iniziale dei dati sul database.
Per lavorare alla fase di popolamento del database SQL Server ci mette a disposizione un componente appositamente dedicato allo scopo: i Data Trasformation Services (DTS).
Cosa sono i DTS?
I DTS sono un gruppo di strumenti che consentono di estrarre dati da sorgenti eterogenee, effettuare sugli stessi trasformazioni semplici o complesse ed infine consolidarli su altre sorgenti dati, come un database SQL Server o Access oppure un cubo degli Analysis Services.
I DTS possono lavorare con svariate origini dati a patto che queste supportino il modello di connettività fornito da OLE DB.
I DTS servono principalmente a risolvere le problematiche ETL (Extract, Trasform and Load) tipiche del mondo dei data whareahouse, ma grazie alla loro flessibilità ci vengono in aiuto in altre occasioni. Essendo fortemente integrati all'interno di SQL Server i DTS comunicano in modo egregio con tutte le altre sue componenti. Ad esempio grazie a SQL Agent possiamo pianificare l'esecuzione di un pacchetto DTS in tempi preordinati.
I DTS sono esposti tramite un modello ad oggetti COM, questo implica che tramite ambienti di sviluppo come Visual Basic o Visual C++ possiamo sviluppare e integrare soluzioni basate sui DTS in modo del tutto autonomo da altri strumenti.
I pacchetti DTS
L'unità di lavoro dei DTS è il pacchetto o package. Un pacchetto consiste in un insieme strutturato di oggetti programmabili coordinati nel raggiungere un determinato scopo.
Ogni pacchetto è formato da uno o più passaggi che vengono eseguiti in sequenza oppure in parallelo quando il pacchetto viene avviato. Vediamo un tipico esempio di esecuzione in parallelo:
Ad ogni thread viene assegnato una sequenza di passaggi (primo e secondo in questo caso) che quindi possono essere eseguiti contemporaneamente e con maggiore velocità; viene sfruttato il multithreading dei sistemi Win32.
Nel caso contrario invece è l'utente a decidere il flusso di esecuzione (con le varie priorità e precedenze) dei passaggi, che vengono eseguito in un unico thread, ecco un esempio:
Ogni volta che viene eseguito un passaggio si compiono varie attività, tra cui ricordiamo:
- Connettersi alle sorgenti dati (SQL Server, Access, Oracle, AS400, Server FTP, File System, File di testo, ecc...)
- Copiare i dati o gli oggetti del database.
- Trasformare i dati a livello di colonna grazie all'uso di script ActiveX con Visual Basic Scripting.
- Notificare eventi particolari (in caso di successo o fallimento) a processi o utenti.
Il controllo del flusso all'interno del pacchetto viene garantito dall'uso dei vincoili di precedenza. Un vincolo di precedenza stabilisce delle regole che il pacchetto deve seguire ogni volta che viene eseguito un passaggio. Ci sono tre tipi di vincoli di precedenza:
- In caso di successo (On success)
Un passaggio viene eseguito solo quando il precedente si è concluso correttamente - In caso di fallimento (On failure)
Un passaggio viene eseguito solo quando il precedente non si è concluso correttamento - In caso di completamento (On completion)
Un passaggio viene eseguito solo quando il precedente si è concluso, senza preoccuparci del risultato (positivo e negativo che sia)
L'immagine sottostante mostra come funzionano i vincoli di precedenza.
Il pacchetto esegue due query SQL allo stesso tempo (Attività 1 e 2). La due freccie verde indicano un vincolo di precedenza di tipo On success; questo significa che la terza query (Attività 3) verrà eseguita solo se le precedenti due query sono state eseguite con successo. L'ultimo passo, l'esecuzione dello script ActiveX, avverrà solamente nel caso in cui tutte le tre query vengano eseguite con successo.
I pacchetti possono essere blindati con password che ne impediscano l'esecuzione ad utenti non autorizzati ed essere recuperati in base alla versione.
Per vedere i pacchetti presenti in SQL Server è sufficiente aprire Enterprise Manager e sfogliare il nodo Data Transformation Services. Nella cartella Local Packages troviamo un elenco dei pacchetti disponibili.
Ogni pacchetto supporta una avanzata gestione di log delle operazione eseguite, nel quale possiamo trovare utili informazioni per un eventuale debug.
Il "ciclo di vita" di un pacchetto può essere riassunto in due fasi:
- Creazione del pacchetto (con eventuale salvataggio e/o modifica)
- Esecuzione del pacchetto
Per portare a termine queste due fasi esistono vari strumenti e differenti modalità che analizzeremo in dettaglio più avanti.
Sono state descritte le principali funzionalità dei pacchetti DTS. Ora invece focalizzeremo l'attenzione sugli strumenti che ci permettono di creare, salvare ed eseguire i pacchetti.
Strumenti per la creazione dei pacchetti DTS
Esistono fondamentalmente due strumenti per la costruzione di un pacchetto:
- Importazione/Esportazione guidata DTS
È una procedura guidata che consente di copiare i dati da e verso un'istanza di SQL Server 2000 e di eseguire il mapping delle trasformazioni dei dati. - Progettazione DTS o DTS Designer
È un'interfaccia grafica dotata di funzionalità drag and drop. Oltre a creare i pacchetti permette di configurarli, modificarli e personalizzarli secondo le proprie esigenze
Al primo strumento possiamo accedere nel modo indicato dalla parte superiore dell'immagine sottostante:
Invece, per accedere alla Progettazione DTS dobbiamo sfogliare il nodo Data Transformation Services o Local Packages (vedi immagine sopra) e quindi con il tasto destro del mouse attivare il menu contestuale del nodo che come prima voce indica "Nuovo Pacchetto".
Cliccando accediamo immediatamente alla Progettazione DTS, di cui possiamo vedere un'anteprima:
Il designer dei DTS è simile al più noto Visual Studio di Microsoft. È un ambiente visuale nel quale troviamo delle barre di lavoro con all'interno diversi elementi come connessioni, attività, flussi e vincoli. Una volta posizionati gli elementi nell'area di progettazione, possiamo:
- disegnare il flusso di lavoro del pacchetto
- configurare le proprietà degli elementi che utilizziamo
- tracciare i vincoli di precedenza tra i diversi elementi
Tutto ciò viene fatto in modo visuale, trascinando gli oggetti dalle barre di lavoro sull'area di progettazione. Per avere un'idea di pacchetto completo osserviamo l'immagine sottostante:
Ogni oggetto presente nell'area di progettazione è facilmente configurabile, difatti possiamo accedere alle proprietà dell'oggetto con un semplice click del mouse. Nell'immagine sottostante abbiamo un esempio della finestra di configurazione per un oggetto di tipo connessione.
Possiamo specificare:
- Il nome della connessione.
- La sorgente dati a cui connettersi, SQL Server in questo caso.
- Tutti i parametri di connessione, nome database, tipo di autenticazione, ecc...
Per ogni elemento del pacchetto esistono finestre di configurazione simili a questa.
Gli elementi dei pacchetti DTS
Abbiamo visto che un pacchetto DTS può contenere diversi elementi, ognuno dei quali ha un ruolo ben definito nel processo di trasformazione o copia dei dati. Gli elementi del pacchetto possono essere così classificati:
- Attività
È l'unità di lavoro del pacchetto, definisce ciò che realmente compie il pacchetto in materia di copia o trasformazione dei dati come unico passaggio. In un pacchetto di norma ci sono più attività. - Trasformazioni
Descrive le possibili trasformazioni a livello di colonna dei dati che sono disponibili per le varie attività del pacchetto - Connessioni
Rappresenta le differenti modalità di connessione disponibili per un pacchetto - Flusso di lavoro
Descrive la sequenza e la modalità di esecuzione dei vari passaggi contenuti nel pacchetto
Ognuno di questi a sua volta può essere suddiviso in funzione del tipo di operazione che svolge:
Attività
- Importazione ed esportazione di dati
- Copia di oggetti di database
- Invio e ricezione di messaggi a e da altri utenti e pacchetti
- Trasformazione di dati
- Esecuzione di istruzioni Transact-SQL o di script ActiveX su un'origine dati
- Attività personalizzate create tramite oggetti COM
Trasformazioni
- Manipolazione dei dati di colonna
- Applicazione di funzioni rappresentate da script ActiveX
- Selezione delle trasformazioni desiderate tra quelle disponibili in DTS
- Creazione di trasformazioni personalizzate sotto forma di oggetti COM e applicazione di tali trasformazioni ai dati delle colonne
Connessioni
- Direttamente da origini dati di Microsoft SQL Server e Oracle mediante provider OLE DB nativi
- Origini dati ODBC, mediante Provider Microsoft OLE DB per ODBC
- Access 2000, Excel 2000, Microsoft Visual FoxPro®, dBase, Paradox, HTML e altre origini dati in formato di file
- File di testo ASCII mediante il provider OLE DB di file
- Microsoft Exchange Server, Microsoft Active Directory e altre origini dati non relazionali
- Altre origini di terze parti
Flusso di Lavoro
- Script ActiveX che modificano il flusso di lavoro
- Vincoli di precedenza
Come vedremo in seguito, grazie alla flessibilità del modello ad oggetti COM su cui si basano i DTS, possiamo anche scrivere delle attività personalizzate con linguaggi come Visual Basic o Visual C++.
Come salvare un pacchetto DTS
Una volta creato, il pacchetto DTS può essere salvato ed archiviato. Questa opzione è utile nel caso in cui volessimo rilanciare l'esecuzione del pacchetto in un momento successivo a quello della creazione ma anche per poter modificare il pacchetto in base a nuove esigenze. Ci sono varie opzioni di salvataggio:
- Nel database msdb di SQL Server.
- In SQL Server 2000 Meta Data Services.
- Come file di archiviazione strutturata (con estensione dts).
- Come file di Visual Basic.
Salvare un pacchetto è possibile sia dalla procedura guidata di Importazione/Esportazione DTS che da Progettazione DTS.
Dopo aver salvato un pacchetto possiamo in un secondo tempo anche riprenderlo per modificarlo o addirittura eliminarlo. Queste operazioni sono possibili tramite lo strumento Progettazione DTS.
Eseguire i pacchetti DTS
Una volta creati i pacchetti devono essere eseguiti. L'esecuzione di un pacchetto rappresenta il punto conclusivo del ciclo di un pacchetto. Vediamo una schermata di esempio dopo l'avvio di un pacchetto.
Quando si esegue un pacchetto DTS, le connessioni, le attività, le trasformazioni e il codice di script in esso contenuti vengono eseguiti nell'ordine descritto dal flusso di lavoro del pacchetto. Per ogni passaggio viene indicato lo stato di esecuzione (può essere positivo, negativo oppure completato)
È possibile eseguire un pacchetto da:
- Progettazione DTS.
- SQL Server Enterprise Manager.
- Utilità per l'esecuzione dei pacchetti (dtsrun).
- Tramite Visual Basic, tramite il modello ad oggetti dei DTS.
I DTS come piattaforma si sviluppo
Come accennato nel precedente articolo, i DTS espongono un modello ad oggetti accessibile a qualunque ambiente di sviluppo che supporti COM. In questo caso, gli sviluppatori potranno creare dei propri pacchetti DTS senza dover necessariamente utilizzare strumenti grafici quali Progettazione DTS e Importazione/Esportazione Guidata DTS.
Il modello ad oggetti dei DTS permette di:
- Costruire pacchetti personalizzati.
- Estendere pacchetti già esistenti.
- Eseguire pacchetti.
Conclusione
Alla fine di questa panoramica avrete certamente capito la grande utilità che i DTS possono avere nel lavoro quotidiano dello sviluppatore. Nel caso voleste approfondire maggiormente l'argomento consiglio di leggere i Books OnLine di SQL Server, che contengono diverse sezioni dedicate al mondo dei DTS.