Uruchomienie pakietu SSIS programowo na komputerze zdalnym
Jeśli klient (lokalne) komputera nie ma Integration Services zainstalowany lub nie ma dostępu do wszystkich zasobów, których wymaga pakietu, należy uruchomić pakiet, tak aby pakiet działa na komputerze zdalnym, gdzie przechowywane są opakowania.Należy podjąć dodatkowe kroki w celu zapewnienia, że pakiet jest uruchamiany na komputerze zdalnym, ponieważ pakiet jest uruchamiane na komputerze aplikacji, która uruchamia pakiet.W ten sposób po uruchomieniu pakietu zdalnego bezpośrednio z aplikacji na komputerze lokalnym, pakiet załadować i uruchomić z komputera lokalnego.Ponieważ komputer lokalny nie ma Integration Services zainstalowany lub nie ma dostępu do zasobów, które pakiet wymaga pakiet nie zostanie uruchomiony pomyślnie.
Ostrzeżenie
A klient komputer może nie mieć Integration Services zainstalowana, ponieważ warunki na SQL Server licencjonowania nie może dać Ci zainstalować Integration Services na dodatkowych komputerach.(Integration Services jest składnikiem serwera, a nie do dystrybucji do klient komputerów.) Jednakże jeśli komputer lokalny ma Integration Services zainstalowana i ma dostęp do wszystkich zasobów, których wymaga pakiet, można używać komputera lokalnego do uruchomienia pakiet zdalnego.Aby uzyskać więcej informacji, zobacz Uruchomienie pakietu SSIS programowo na komputerze lokalnym.
Aby uruchomić pakiet na komputerze zdalnym, wywołania jednej z następujących programów:
SQL Server Agent.
Innej aplikacji, składników lub usługa sieci Web, która jest uruchomiona na komputerze zdalnym.
Sekcje w tym temacie
|
Wymagania wstępne dla komputera zdalnego
Należy się upewnić, że proces, który uruchamia pakiet na komputerze zdalnym ma wymagane uprawnienia.Ten proces wymaga uprawnień nie tylko aby uruchomić pakiet, ale aby znaleźć i otworzyć wszystkie zasoby, które korzysta z pakietu.Uprawnienia domyślne często nie są wystarczające, szczególnie w przypadku rozwiązania opartego na sieci Web.Pełne omówienie uprawnień i z uwierzytelnianie i autoryzacja, wykracza poza zakres tego tematu.
Uosabianie innego konta, aby uruchomić pakiet często nie jest pomyślne rozwiązania.Mimo że pakiet zostanie uruchomiony w kontekście personifikowanego konta, konto używane przez proces uruchomiony pakiet przywrócić dodatkowych wątków, które są tworzone przez pakiet.Wątki te obejmują wątków, używanych przez przepływ danych do ładowania i zapisywanie danych.Dlatego też samo konto procesu wymaga zgody na najbardziej zewnętrzne zasoby używane przez pakiet.
Uruchomienie pakietu SSIS zdalnie wywołując SQL Server Agent
Następujący przykładowy kod ilustruje sposób wywołania SQL Server programowo uruchamianie agenta pakiet na komputerze zdalnym.Wywołania przykładowy kod systemowa procedura składowana, sp_start_job, który z kolei uruchomi SQL Server Agent zadanie o nazwie RunSSISPackage, a na komputerze zdalnym.RunSSISPackage Następnie zadanie uruchamia pakiet na komputerze zdalnym, gdzie zadanie sam jest uruchomiony.
Ostrzeżenie
Wartość zwracana przez sp_start_job procedura składowana wskazuje, czy procedura składowana była możliwość uruchamiania SQL Server Agent zadanie pomyślnie.Zwracana wartość nie wskazuje, czy pakiet pomyślnych lub niepomyślnych.
Aby uzyskać informacje dotyczące rozwiązywania problemów z pakietów, które są uruchamiane z SQL Server zadanie agenta, zobacz Microsoft artykuł, pakiet SSIS nie działa podczas wywoływania pakiet SSIS od kroku zadanie agenta programu SQL Server.
Przykładowy kod
W następujących przykładach kodu wymagają odniesienie do System.Data wirtualny plik dziennika.
Imports System.Data
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim jobConnection As SqlConnection
Dim jobCommand As SqlCommand
Dim jobReturnValue As SqlParameter
Dim jobParameter As SqlParameter
Dim jobResult As Integer
jobConnection = New SqlConnection("Data Source=(local);Initial Catalog=msdb;Integrated Security=SSPI")
jobCommand = New SqlCommand("sp_start_job", jobConnection)
jobCommand.CommandType = CommandType.StoredProcedure
jobReturnValue = New SqlParameter("@RETURN_VALUE", SqlDbType.Int)
jobReturnValue.Direction = ParameterDirection.ReturnValue
jobCommand.Parameters.Add(jobReturnValue)
jobParameter = New SqlParameter("@job_name", SqlDbType.VarChar)
jobParameter.Direction = ParameterDirection.Input
jobCommand.Parameters.Add(jobParameter)
jobParameter.Value = "RunSSISPackage"
jobConnection.Open()
jobCommand.ExecuteNonQuery()
jobResult = DirectCast(jobCommand.Parameters("@RETURN_VALUE").Value, Integer)
jobConnection.Close()
Select Case jobResult
Case 0
Console.WriteLine("SQL Server Agent job, RunSISSPackage, started successfully.")
Case Else
Console.WriteLine("SQL Server Agent job, RunSISSPackage, failed to start.")
End Select
Console.Read()
End Sub
End Module
using System;
using System.Data;
using System.Data.SqlClient;
namespace LaunchSSISPackageAgent_CS
{
class Program
{
static void Main(string[] args)
{
SqlConnection jobConnection;
SqlCommand jobCommand;
SqlParameter jobReturnValue;
SqlParameter jobParameter;
int jobResult;
jobConnection = new SqlConnection("Data Source=(local);Initial Catalog=msdb;Integrated Security=SSPI");
jobCommand = new SqlCommand("sp_start_job", jobConnection);
jobCommand.CommandType = CommandType.StoredProcedure;
jobReturnValue = new SqlParameter("@RETURN_VALUE", SqlDbType.Int);
jobReturnValue.Direction = ParameterDirection.ReturnValue;
jobCommand.Parameters.Add(jobReturnValue);
jobParameter = new SqlParameter("@job_name", SqlDbType.VarChar);
jobParameter.Direction = ParameterDirection.Input;
jobCommand.Parameters.Add(jobParameter);
jobParameter.Value = "RunSSISPackage";
jobConnection.Open();
jobCommand.ExecuteNonQuery();
jobResult = (Int32)jobCommand.Parameters["@RETURN_VALUE"].Value;
jobConnection.Close();
switch (jobResult)
{
case 0:
Console.WriteLine("SQL Server Agent job, RunSISSPackage, started successfully.");
break;
default:
Console.WriteLine("SQL Server Agent job, RunSISSPackage, failed to start.");
break;
}
Console.Read();
}
}
}
Powrót do początku
Uruchomienie pakietu SSIS zdalnie wywołując zdalny składnik lub usługę
W poprzedniej sekcji rozwiązanie programowe uruchamiania pakietów na komputerze zdalnym nie wymaga żadnych niestandardowego kodu na komputerze zdalnym.Jednak mogą preferować rozwiązania, które nie korzystają z SQL Server Agent uruchamiania pakietów.
Poniższy przykład zawiera kod częściowe, który w składnik zdalny lub usługa sieci Web na serwerze mogą zostać wykorzystane do uruchamiania Integration Services pakietów na komputerze zdalnym.
Przykładowy kod
W następujących przykładach kodu sugeruje podejście do tworzenia i testowania zdalnego klasy, która uruchamia pakiet zdalnie.Próbki te nie są kompletne, ale zapewniają kodu, która może być używana jako część rozwiązania budowane, jako składnik zdalny lub usługa sieci Web.
Próbki wymagane odwołanie do Microsoft.SqlServer.ManagedDTS wirtualny plik dziennika.
Tworzenie funkcji zdalne uruchamianie pakietu SSIS
Integration Services Bezpośrednio z pliku, można załadować pakiet bezpośrednio z SQL Server, lub z SSIS magazynu pakiet, który zarządza magazynem pakiet w obu SQL Server i folderów systemu plików specjalnych.W tym przykładzie wykorzystano do obsługi wszystkich opcji dostępnych załadunku, Select Case lub switch konstrukcji, zaznacz odpowiednią składnię uruchamiania pakiet i odpowiednio złączyć argumenty wejściowe.
Ważne: |
---|
Metody Application klasy do pracy z SSIS pakiet tylko Obsługa magazynu ".", localhost lub serwera Nazwa serwera lokalnego.Nie można użyć "(local)". |
LaunchPackage Metoda zwraca wynik wykonanie pakiet jako liczba całkowita zamiast DTSExecResult wartość tak, aby klient komputery nie wymagają odwołania do wszelkich Integration Services zespołów.
Ważne: |
---|
Próbka ta nie została zakończona, ale zapewnia kodu, która może być używana jako część rozwiązania budowane, jako składnik zdalny lub usługa sieci Web.Próbka nie zawiera kodu, atrybuty lub odwołania, które mogą być wymagane do budowania i narazić zdalny składnik lub usługa. |
Aby utworzyć klasę zdalnego programowo uruchomienie pakietów na serwerze
Otwórz Visual Studio i Utwórz projekt odpowiedniego typu w sieci preferowanych programowania języka.
Poniższy kod przykładowy używa nazwy LaunchSSISPackageService dla projektu.
Dodaj odwołanie do Microsoft.SqlServer.ManagedDTS wirtualny plik dziennika.
Wklej przykładowy kod do pliku klasy.
Próbka zawiera całą zawartość okna kodu.
Dodaj kod, atrybuty lub odwołania, które mogą być wymagane do budowania i narazić zdalny składnik lub usługa.
Utworzyć i przetestować projekt, który zawiera przykładowy kod.
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.IO
Public Class LaunchSSISPackageService
' LaunchPackage Method Parameters:
' 1. sourceType: file, sql, dts
' 2. sourceLocation: file system folder, (none), logical folder
' 3. packageName: for file system, ".dtsx" extension is appended
Public Function LaunchPackage( _
ByVal sourceType As String, _
ByVal sourceLocation As String, _
ByVal packageName As String) As Integer 'DTSExecResult
Dim packagePath As String
Dim myPackage As Package
Dim integrationServices As New Application
' Combine path and file name.
packagePath = Path.Combine(sourceLocation, packageName)
Select Case sourceType
Case "file"
' Package is stored as a file.
' Add extension if not present.
If String.IsNullOrEmpty(Path.GetExtension(packagePath)) Then
packagePath = String.Concat(packagePath, ".dtsx")
End If
If File.Exists(packagePath) Then
myPackage = integrationServices.LoadPackage(packagePath, Nothing)
Else
Throw New ApplicationException( _
"Invalid file location: " & packagePath)
End If
Case "sql"
' Package is stored in MSDB.
' Combine logical path and package name.
If integrationServices.ExistsOnSqlServer(packagePath, ".", String.Empty, String.Empty) Then
myPackage = integrationServices.LoadFromSqlServer( _
packageName, "(local)", String.Empty, String.Empty, Nothing)
Else
Throw New ApplicationException( _
"Invalid package name or location: " & packagePath)
End If
Case "dts"
' Package is managed by SSIS Package Store.
' Default logical paths are File System and MSDB.
If integrationServices.ExistsOnDtsServer(packagePath, ".") Then
myPackage = integrationServices.LoadFromDtsServer(packagePath, "localhost", Nothing)
Else
Throw New ApplicationException( _
"Invalid package name or location: " & packagePath)
End If
Case Else
Throw New ApplicationException( _
"Invalid sourceType argument: valid values are 'file', 'sql', and 'dts'.")
End Select
Return myPackage.Execute()
End Function
End Class
using Microsoft.SqlServer.Dts.Runtime;
using System.IO;
public class LaunchSSISPackageServiceCS
{
public LaunchSSISPackageServiceCS()
{
}
// LaunchPackage Method Parameters:
// 1. sourceType: file, sql, dts
// 2. sourceLocation: file system folder, (none), logical folder
// 3. packageName: for file system, ".dtsx" extension is appended
public int LaunchPackage(string sourceType, string sourceLocation, string packageName)
{
string packagePath;
Package myPackage;
Application integrationServices = new Application();
// Combine path and file name.
packagePath = Path.Combine(sourceLocation, packageName);
switch(sourceType)
{
case "file":
// Package is stored as a file.
// Add extension if not present.
if (String.IsNullOrEmpty(Path.GetExtension(packagePath)))
{
packagePath = String.Concat(packagePath, ".dtsx");
}
if (File.Exists(packagePath))
{
myPackage = integrationServices.LoadPackage(packagePath, null);
}
else
{
throw new ApplicationException("Invalid file location: "+packagePath);
}
break;
case "sql":
// Package is stored in MSDB.
// Combine logical path and package name.
if (integrationServices.ExistsOnSqlServer(packagePath, ".", String.Empty, String.Empty))
{
myPackage = integrationServices.LoadFromSqlServer(packageName, "(local)", String.Empty, String.Empty, null);
}
else
{
throw new ApplicationException("Invalid package name or location: "+packagePath);
}
break;
case "dts":
// Package is managed by SSIS Package Store.
// Default logical paths are File System and MSDB.
if (integrationServices.ExistsOnDtsServer(packagePath, "."))
{
myPackage = integrationServices.LoadFromDtsServer(packagePath, "localhost", null);
}
else
{
throw new ApplicationException("Invalid package name or location: "+packagePath);
}
break;
default:
throw new ApplicationException("Invalid sourceType argument: valid values are 'file', 'sql', and 'dts'.");
}
return (Int32)myPackage.Execute();
}
}
Wywołanie funkcji zdalne uruchamianie pakietu SSIS
Następującej przykładowej aplikacji konsoli używa zdalnego składnik lub usługa, aby uruchomić pakiet.
LaunchPackage Metoda klasy zdalnego zwraca wynik wykonanie pakiet jako liczba całkowita zamiast DTSExecResult wartość tak, aby klient komputery nie wymagają odwołania do wszelkich Integration Services zespołów.Próbka tworzy prywatnych wyliczania którego dublowanie wartości DTSExecResult wartości, aby raportować wyniki wykonania.
Aby utworzyć aplikację konsoli, aby przetestować klasa zdalnego
W Visual Studio, Utwórz nową aplikację konsoli przy użyciu swojego preferowanego programowania języka.
Kod przykładowy używa nazwy LaunchSSISPackageTest dla projektu.
Dodaj odwołanie do wirtualny plik dziennika lokalnego serwera proxy, reprezentującą zdalny składnik lub usługa.Jeśli to konieczne, dostosować deklaracja zmiennej w przykładowy kod nazwa przypisana do obiektu serwera proxy.
Wklej przykładowy kod rutynowych główne i wyliczenie prywatnych do kodu.
Próbka zawiera całą zawartość okna kodu.
Edytuj wiersz kodu wywołuje LaunchPackage metoda w celu zapewnienia zestaw prawidłowe wartości wejściowe argumenty, które wskaż istniejący pakiet.
Na przykład jeśli package1.dtsx jest przechowywany na serwerze w pakietach c:\Moje, przekazać "pliku" jako wartość sourceType, "Pakietów c:\Moje" jako wartość sourceLocation, i "package1" (bez rozszerzenia) jako wartość packageName.
Module LaunchSSISPackageTest
Sub Main()
Dim launchPackageService As New LaunchSSISPackageService.LaunchSSISPackageService
Dim packageResult As Integer
Try
packageResult = launchPackageService.LaunchPackage("sql", String.Empty, "SimpleTestPackage")
Catch ex As Exception
Console.WriteLine("The following exception occurred: " & ex.Message)
End Try
Console.WriteLine(CType(packageResult, PackageExecutionResult).ToString)
Console.ReadKey()
End Sub
Private Enum PackageExecutionResult
PackageSucceeded
PackageFailed
PackageCompleted
PackageWasCancelled
End Enum
End Module
using System;
namespace LaunchSSISPackageSvcTestCS
{
class Program
{
static void Main(string[] args)
{
LaunchSSISPackageServiceCS.LaunchSSISPackageServiceCS launchPackageService = new LaunchSSISPackageServiceCS.LaunchSSISPackageServiceCS();
int packageResult = 0;
try
{
packageResult = launchPackageService.LaunchPackage("sql", String.Empty, "SimpleTestPackage");
}
catch (Exception ex)
{
Console.WriteLine("The following exception occurred: " + ex.Message);
}
Console.WriteLine(((PackageExecutionResult)packageResult).ToString());
Console.ReadKey();
}
private enum PackageExecutionResult
{
PackageSucceeded,
PackageFailed,
PackageCompleted,
PackageWasCancelled
};
}
}
Powrót do początku
Zasoby zewnętrzne
- Wideo, jak: Zautomatyzować wykonywanie pakietu SSIS przy użyciu agenta serwera SQL (SQL Server wideo), na technet.microsoft.com
|