INF: Opracowywanie, wdrażanie i wydajność pakietu DTS

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 242391 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

Celem tego artykułu jest podanie szczegółowych informacji pomocnych przy opracowywaniu i wdrażaniu pakietów DTS (Data Transformation Services) programu SQL Server 7.0. Podano także wskazówki, jak poprawić wydajność pakietu.

Aby uzyskać informacje na ten temat w odniesieniu do programu SQL Server 2000, zobacz dokumentację SQL Server Books Online.

Więcej informacji

Zapewnianie elastyczności połączeń danych

Pakiet DTS jest całkowicie niezależnym modułem. Wszystkie informacje o połączeniu są wczytywane do kolekcji właściwości połączenia w czasie projektowania, nawet informacje o połączeniach UDL i ODBC DSN. Jeśli po utworzeniu pakietu nastąpi zmiana informacji ODBC DSN lub OLEDB UDL, taka zmiana nie ma wpływu na pakiet. Dlatego trzeba o tym pamiętać podczas próby migrowania pakietów ze środowiska programowania do produkcyjnego.

Gdy są używane połączenia danych programu SQL Server, należy używać określenia (Local) dla nazwy serwera, aby uprościć przenoszenie pakietu między serwerami, gdyż nazwa serwera jest ustalana w czasie wykonywania pakietu. Takie podejście ma jedno zastrzeżenie – pakiet musi być uruchamiany i edytowany na komputerze z programem SQL Server.

Można także użyć zadania skryptu ActiveX lub programu otoki, aby zmodyfikować właściwości pakietu w czasie wykonywania. Aby zmodyfikować pakiet z niego samego, należy utworzyć zadanie skryptu ActiveX poprzedzające zadania przekaźnika danych i zmodyfikować pakiet w czasie jego działania. Aby uzyskać dojście do pakietu, należy odwołać się do zmiennej DTSGlobalVariables.Parent. Można za jej pośrednictwem zmieniać dowolne właściwości pakietu, ale wymaga to pewnych umiejętności programistycznych.

Poniżej znajduje się przykład z tematu „ActiveX Script Tasks” (Zadania skryptu ActiveX) dokumentacji SQL Books Online, ilustrujący sposób zmiany właściwości połączenia DataSource za pomocą skryptu 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
				
Jeśli potrzeba większej kontroli i dalsze programowanie nie stanowi problemu, należy wziąć pod uwagę zmodyfikowanie pakietu przed uruchomieniem za pomocą programu zewnętrznego lub utworzenie pakietu od nowa.

Aby utworzyć program służący do ładowania i modyfikowania pakietu, należy utworzyć szablon pakietu za pomocą kreatora DTS lub programu DTS Designer i zapisać go. Należy napisać program w języku Visual Basic ładujący pakiet i modyfikujący odpowiednie właściwości, następnie wywołać metodę Execute na obiekcie pakietu, aby uruchomić pakiet.

Aby utworzyć program generujący pakiet od nowa, należy utworzyć prototyp pakietu za pomocą kreatora DTS lub programu DTS Designer i zapisać go na lokalnym serwerze SQL. Aby utworzyć szablon kodu pakietu, należy użyć narzędzia ScriptPkg z następującego artykułu bazy wiedzy Microsoft Knowledge Base:
239454 INF: Narzędzie ScriptPkg generuje kod modelu obiektów DTS ułatwiający programowe korzystanie z niego
Używając szablonu jako podstawy, należy napisać własny kod generujący pakiet na podstawie danych wejściowych użytkownika.

Należy zwrócić uwagę, że w obu poprzednich sytuacjach projekt programu Visual Basic musi zawierać odwołanie do biblioteki Microsoft DTSPackage Object Library.

Ważne: Podczas wykonywania pakietu z programu napisanego w języku Visual Basic i monitorowania zdarzeń pakietu lub zadań wszystkie kroki w pakiecie muszą być skonfigurowane do wykonywania w wątku głównym. Jest to spowodowane ograniczeniem programu Visual Basic uniemożliwiającym mu poprawną obsługę jednoczesnych wywołań jego zdarzeń.

Sterowanie pakietem za pomocą zmiennych globalnych

Zmienne globalne są dostępne jedynie z zadań skryptów ActiveX i przepływu pracy oraz przekształceń ActiveX. Nie można ich używać bezpośrednio w instrukcjach języka SQL lub we właściwościach połączenia. Jednak można użyć zadania skryptu ActiveX do zmodyfikowania instrukcji języka SQL lub właściwości połączenia na podstawie zmiennej globalnej. Oto przykład zadania skryptu ActiveX, którego można użyć do zmiany instrukcji języka SQL dla zadania przekaźnika danych na podstawie zmiennej globalnej o nazwie „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
				
UWAGA: Opis zadania jest wyświetlany w programie DTS Designer, ale nie można go użyć, aby bezpośrednio odwołać się do zadania w skrypcie ActiveX. W celu odwołania się do zadania ze skryptu ActiveX należy użyć nazwy zadania. Aby uzyskać nazwę zadania, należy zwrócić uwagę na właściwości przepływu prac dla nazwy kroku. Nazwa zadania jest taka sama jak nazwa kroku, ale słowo „Step” jest zastąpione słowem „Task” . Na przykład nazwa DTSStep_DTSDataPumpTask_1 staje się nazwą DTSTask_DTSDataPumpTask_1.

Przekazywanie parametrów do pakietu DTS

Program DTSRun nie przyjmuje parametrów wiersza polecenia, które można przekazać do pakietu w czasie wykonywania. Aby przekazać informacje do pakietu w czasie wykonywania, parametry muszą być wczytane programowo z pliku lub pobrane z kwerendy tabeli bazy danych.

UWAGA: Jeśli narzędzia programu SQL Server 2000 lub nazwane wystąpienie programu SQL Server 2000 są zainstalowane na serwerze z zainstalowanym programem SQL Server 7.0 jako wystąpieniem domyślnym, program DTSRun może przyjmować parametr wiersza polecenia /A do przekazania wartości z wiersza polecenia do zmiennych globalnych zdefiniowanych w pakiecie DTS programu SQL Server 7.0.

Oto przykład zadania skryptu ActiveX wczytującego wiersz z pliku tekstowego w celu ustawienia zmiennej globalnej. Ta zmienna globalna może być następnie użyta do zmodyfikowania zachowania pakietu, tak jak to pokazano w sekcji „Sterowanie pakietem za pomocą zmiennych globalnych” tego artykułu.
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
				
W następującym przykładzie przedstawiono sposób użycia zadania skryptu ActiveX do wczytania parametrów z tabeli programu SQL Server. Ten kod wczytuje wartość kolumny paramvalue z tabeli my_param_table i używa jej do ustawienia zmiennej globalnej. Ten przykład używa obiektów DMO (Distributed Management Objects) języka SQL do interakcji z programem SQL Server, ale to samo można osiągnąć, używając obiektów ADO (ActiveX Data Objects) lub innej metody dostępu.
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
				

Pisanie niestandardowych zadań DTS w języku Visual Basic

Istnieje możliwość pisania niestandardowych zadań DTS w języku Visual Basic. Przykład niestandardowego zadania w języku Visual Basic bez interfejsu użytkownika jest dostępny w katalogu \Devtools\Samples\DTS na dysku CD-ROM z programem SQL Server. Oto kilka typowych problemów napotykanych podczas zajmowania się niestandardowymi zadaniami języka Visual Basic w DTS:
  1. Niestandardowe zadania napisane w języku Visual Basic implementujące interfejs, taki jak DTS.CustomTaskUI, MUSZĄ implementować każde zdarzenie w interfejsie, gdyż w przeciwnym wypadku spowodują naruszenie zasad dostępu.
  2. W wypadku opracowywania niestandardowego zadania języka Visual Basic z interfejsem użytkownika zaleca się zastosowanie dodatku Service Pack 1 (SP1) do programu SQL Server. Dodatek SP1 zawiera kilka ulepszeń ułatwiających opracowywanie interfejsu użytkownika.
  3. Zadania języka Visual Basic są wątkowane komórkowo, natomiast zadania DTS są bezwątkowe. Aby wykonać zadanie napisane w języku Visual Basic, musi być ono wykonane w głównym wątku, gdyż w przeciwnym wypadku spowoduje naruszenie zasad dostępu. Zadanie DTS ustawia domyślnie odpowiednią flagę. Użytkownik nie powinien zmieniać tej flagi.

Uzyskiwanie informacji, jak kodować pakiety DTS

W programie SQL 7.0 istnieje kilka przykładów na dysku CD-ROM w folderze \Devtools\Damples\DTS. Obejmują one przykładowe niestandardowe zadanie (Visual Basic) i przykładowe przekształcenie (C++). Niektóre przykładowe pakiety znajdują się także w samowyodrębniającym się pliku wykonywalnym DTSDemo.exe.

Najbardziej uniwersalny przykład to pakiet ScriptPkg będący częścią pliku Dtsdemo.exe. Pakiet ScriptPkg zawiera kod źródłowy programu Visual Basic przekształcający pakiet zapisany na serwerze lokalnym w kod programu Visual Basic. Ten przykład najlepiej ilustruje następujące zagadnienia:
  1. Przygotowywanie przykładów w języku Visual Basic przez tworzenie skryptów istniejącego pakietu DTS.
  2. Pisanie kodu sterownika DTS pliku prostego, co nie jest opisane w dokumentacji SQL Books Online.
  3. Przekształcanie pakietu na tekst, dzięki czemu można go dodać do programu SourceSafe.
W poniższej sekcji wymieniono kilka znanych problemów z pakietem ScriptPkg.
  1. Wyszukiwania przekaźnika danych nie są poprawnie obsługiwane w skryptach.
  2. Jeśli pakiet jest za duży, wygenerowany tekst nie może być traktowany jako pojedyncza funkcja języka Visual Basic z powodu ograniczenia liczby wierszy w jednej funkcji. Konieczne będzie samodzielne podzielenie pliku skryptu na kilka funkcji, aby program Visual Basic skompilował kod.

Zwiększanie wydajności pakietu DTS

Używanie równoległych ładowań

Pakiet DTS jest w stanie wykonywać kilka zadań jednocześnie. Jednak każde połączenie w pakiecie DTS może obsługiwać jeden wątek na raz. To oznacza, że następujące przekaźniki danych w pakiecie będą szeregowane:

A -> B oraz A -> B
A -> B oraz A -> C
A -> B oraz C -> B

Nie ma znaczenia, czy dla połączeń będą użyte te same, czy różne ikony.

Jedyny sposób zrównoleglenia wykonywania zadań to utworzenie wielu połączeń o różnej nazwie do tej samej bazy danych. Na przykład przekaźniki A -> B i C -> D będą wykonywane jednocześnie, nawet jeśli B i D to różne połączenia do tego samego serwera i tej samej bazy danych.

W razie potrzeby można użyć więzów kolejności, aby wymusić kolejność wykonywania i nie dopuścić do równoległego wykonywania wybranych zadań.

Insert Commit Size

Najważniejszy parametr przekaźnika danych to Insert Commit Size (Rozmiar wstawienia zatwierdzanego). Ta właściwość ma znaczenie tylko wtedy, gdy obiektem docelowym jest program SQL Server. Określa ona minimalną liczbę wierszy wstawianych zbiorczo powodującą zatwierdzenie transakcji. Domyślnie wynosi ona 0; wszystkie wiersze są częścią pojedynczej transakcji. Jest to najbezpieczniejsze ustawienie, ponieważ każdy błąd powoduje wycofanie wszystkich zmian przez program SQL Server. Jednak takie ustawienie może wymagać bardzo dużego dziennika transakcji, a to może prowadzić do bardzo długich czasów reakcji, gdy pakiet zostanie anulowany, i może zmniejszać efektywność działania, gdyż pojedynczy wiersz na końcu dużego ładowania może spowodować niepowodzenie całej operacji ładowania. Pod koniec każdego okresu zatwierdzania można zaobserwować wyraźną zwłokę spowodowaną zatwierdzaniem wszystkich wierszy. Rozmiar zatwierdzania 0 zapewnia najszybsze działanie, ale dobre są i inne wartości: 10 000, 1000 i 1 (w kolejności coraz dłuższych czasów). Wartość 1 jest przydatna, gdyż awaria powoduje wycofanie tylko jednego wiersza.

Należy zauważyć, że ustawianie licznika błędów na jakąkolwiek wartość większą od 1 nie ma znaczenia, gdy rozmiar wstawiania zatwierdzonego jest równy 0. Licznik błędów rejestruje liczbę transakcji, w których wystąpiły błędy, a nie liczbę wierszy.

W programie SQL Server 7.0 można określić wartość Insert Commit Size w sekcji Data Movement (Przeniesienie danych) na karcie Advanced (Zaawansowane) właściwości zadania przekształcenia danych.

Pakiet DTS i transakcje rozproszone

Pakiety DTS zapewniają obsługę transakcji rozproszonych dla dostawców obsługujących usługę DTC. Aby działały transakcje pakietu i kroku, usługa DTC musi być uruchomiona. Dodatkowo każdy dostawca w transakcji musi obsługiwać usługę DTC.

Właściwości transakcji pakietu są określane na karcie Advanced (Zaawansowane) właściwości pakietu.

Domyślnie każdy krok w pakiecie obsługuje własne transakcje i nie koordynuje transakcji za pomocą usługi DTC. Aby zadanie pojawiło się w transakcji DTC, należy zaznaczyć pole wyboru „join transaction if present” (dołącz do transakcji, jeśli obecna) we właściwościach przepływu pracy zadania. Inne opcje transakcji DTC dla zadania, to „Commit transaction on successful completion of this step” (Zatwierdź transakcje po ukończeniu tego kroku) i „Rollback transaction on failure” (Wycofaj transakcję w wypadku niepowodzenia).

Należy zauważyć, że pakiety nie obsługują programu Microsoft Transaction Server (MTS).

Komunikat o błędzie

Jeśli jest używana nazwa Local dla serwera bazy danych w połączeniu pakietu i pakiet zostanie zmieniony z innego serwera, a następnie osoba, która wprowadziła zmianę, spróbuje zobaczyć przekształcenia, pojawi się następujący komunikat o błędzie:
Error Source : Microsoft OLE DB Provider for SQL Server Error Description : Cannot open database requested in login 'xxxxxxx'. Login fails." (Źródło błędu : Opis błędu dostawcy Microsoft OLE DB dla programu SQL Server : Nie można otworzyć bazy danych żądanej w logowaniu 'xxxxxxx'. Niepowodzenie logowania.).

Właściwości

Numer ID artykułu: 242391 - Ostatnia weryfikacja: 3 stycznia 2008 - Weryfikacja: 1.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft SQL Server 7.0 Standard Edition
Słowa kluczowe: 
kbinfo KB242391

Przekaż opinię

 

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