Udostępnij za pośrednictwem


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

  • Uruchomiony pakiet zdalnie wywołując SQL Server Agent

  • Uruchomiony pakiet zdalnie wywołując zdalny składnik lub usługa

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żna informacjaWaż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żna informacjaWaż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

  1. 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.

  2. Dodaj odwołanie do Microsoft.SqlServer.ManagedDTS wirtualny plik dziennika.

  3. Wklej przykładowy kod do pliku klasy.

    Próbka zawiera całą zawartość okna kodu.

  4. Dodaj kod, atrybuty lub odwołania, które mogą być wymagane do budowania i narazić zdalny składnik lub usługa.

  5. 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

  1. 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.

  2. 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.

  3. Wklej przykładowy kod rutynowych główne i wyliczenie prywatnych do kodu.

    Próbka zawiera całą zawartość okna kodu.

  4. 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

Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN:


Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.