Aracılığıyla paylaş


Program Aracılığıyla Uzak Paket Yükleme ve Çalıştırma

Şunlar için geçerlidir:SQL Server Azure Data Factory'de SSIS Tümleştirme Çalışma Zamanı

Uzak paketleri Integration Services yüklü olmayan bir yerel bilgisayardan çalıştırmak için, tümleştirme hizmetlerinin yüklü olduğu uzak bilgisayarda çalıştırılacak şekilde paketleri başlatın. Bu hedefe ulaşmak için, yerel bilgisayarın uzak bilgisayarda paketleri başlatmak için SQL Server Agent' ı, bir Web hizmetini veya uzak bir bileşeni kullanmasını sağlayın. Uzak paketleri doğrudan yerel bilgisayardan başlatmaya çalışırsanız, paketler üzerine yüklenir ve yerel bilgisayardan çalıştırmayı dener. Yerel bilgisayarda Integration Services yüklü değilse paketler çalışmaz.

Uyarı

Integration Services yüklü olmadığı sürece paketleri sql server veri araçları dışında bir istemci bilgisayarda çalıştıramazsınız. SQL Server lisanslama koşulları, Integration Services'i diğer bilgisayarlara yüklemenize izin vermeyebilir. Integration Services bir sunucu bileşenidir ve istemci bilgisayarlara yeniden dağıtılamaz.

Alternatif olarak, Integration Services'ın yüklü olduğu yerel bir bilgisayardan uzak bir paket çalıştırabilirsiniz. Daha fazla bilgi için bkz . Program Aracılığıyla Yerel Paket Yükleme ve Çalıştırma.

Uzak Bilgisayarda Uzak Paket Çalıştırma

Uzak sunucuda uzak paket çalıştırmanın birden çok yolu vardır:

Paketleri yüklemek ve kaydetmek için bu konu başlığında kullanılan yöntemlerin neredeyse tümü Microsoft.SqlServer.ManagedDTS derlemesine başvuru gerektirir. Özel durum, bu konuda yalnızca System.Data ve Microsoft.Data.SqlClient başvurularını gerektiren sp_start_job saklı yordamını yürütmek için gösterilen ADO.NETyaklaşımıdır. Başvuruyu yeni bir projeye Microsoft.SqlServer.ManagedDTS derlemesine ekledikten sonra, ad alanını using veya Imports deyimiyle içeri aktarınMicrosoft.SqlServer.Dts.Runtime.

Sql Server Aracısını Kullanarak Sunucuda Program Aracılığıyla Uzak Paket Çalıştırma

Aşağıdaki kod örneği, sunucuda uzak bir paket çalıştırmak için SQL Server Agent'ın program aracılığıyla nasıl kullanılacağını gösterir. Kod örneği, bir SQL Server Aracısı işi başlatan sp_start_job sistem saklı yordamını çağırır. Yordamın başlattığı iş olarak adlandırılır RunSSISPackageve bu iş uzak bilgisayardadır. İş RunSSISPackage daha sonra paketi uzak bilgisayarda çalıştırır.

Uyarı

sp_start_job saklı yordamının dönüş değeri, saklı yordamın SQL Server Aracısı işini başarıyla başlatıp başlatamadığını gösterir. Dönüş değeri, paketin başarılı mı yoksa başarısız mı olduğunu göstermez.

SQL Server Agent işlerinden çalıştırılacak paketlerin sorunlarını giderme hakkında bilgi için, SQL Server Aracısı iş adımından SSIS paketini çağırdığınızda SSIS paketi çalışmıyor başlıklı Microsoft makalesine bakın.

Örnek Kod

Imports System.Data  
Imports Microsoft.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, RunSSISPackage, started successfully.")  
      Case Else  
        Console.WriteLine("SQL Server Agent job, RunSSISPackage, failed to start.")  
    End Select  
    Console.Read()  
  
  End Sub  
  
End Module  
using System;  
using System.Data;  
using Microsoft.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, RunSSISPackage, started successfully.");  
          break;  
        default:  
          Console.WriteLine("SQL Server Agent job, RunSSISPackage, failed to start.");  
          break;  
      }  
      Console.Read();  
    }  
  }  
}  

Bir Uzak Paketi Program Aracılığıyla Çalıştırmak için Web Hizmeti veya Uzak Bileşen Kullanma

Paketleri sunucuda program aracılığıyla çalıştırmak için önceki çözüm, sunucuda herhangi bir özel kod gerektirmez. Ancak, paketleri yürütmek için SQL Server Aracısı'na bağımlı olmayan bir çözüm tercih edebilirsiniz. Aşağıdaki örnekte, Integration Services paketlerini yerel olarak başlatmak için sunucuda bir Web hizmeti oluşturma ve bir istemci bilgisayardan Web hizmetini çağırmak için bir test uygulaması gösterilmektedir. Web hizmeti yerine uzak bir bileşen oluşturmayı tercih ederseniz, uzak bir bileşende birkaç değişiklikle aynı kod mantığını kullanabilirsiniz. Ancak uzak bir bileşen, Web hizmetinden daha kapsamlı bir yapılandırma gerektirebilir.

Önemli

Kimlik doğrulaması ve yetkilendirme için varsayılan ayarlarıyla, bir Web hizmeti genellikle PAKETLERI yüklemek ve yürütmek için SQL Server'a veya dosya sistemine erişmek için yeterli izinlere sahip değildir. web.config dosyasında kimlik doğrulaması ve yetkilendirme ayarlarını yapılandırarak ve veritabanı ve dosya sistemi izinlerini uygun şekilde atayarak Web hizmetine uygun izinleri atamanız gerekebilir. Web, veritabanı ve dosya sistemi izinlerinin eksiksiz bir tartışması bu konunun kapsamı dışındadır.

Önemli

SSIS Paket Deposu ile çalışmak için sınıfının yöntemleri Application yalnızca ".", localhost veya yerel sunucunun sunucu adını destekler. "(yerel)" kullanamazsınız.

Örnek Kod

Aşağıdaki kod örnekleri, Web hizmetini oluşturma ve test etme işlemini gösterir.

Web Hizmeti Oluşturma

Integration Services paketini doğrudan bir dosyadan, SQL Server'dan veya SSIS Paket Deposu'ndan yükleyebilirsiniz. SSIS Paket Deposu hem SQL Server hem de özel dosya sistemi klasörlerinde paket depolamayı yönetir. Bu örnek, paketi başlatmak için uygun söz dizimini seçmek ve giriş bağımsız değişkenlerini uygun şekilde birleştirmek için Büyük/Küçük Harf Seçme veya anahtar yapısı kullanarak tüm kullanılabilir seçenekleri destekler. LaunchPackage Web hizmeti yöntemi, istemci bilgisayarların herhangi bir Integration Services derlemesine başvuru gerektirmemesi için paket yürütmenin sonucunu bir değer yerine tamsayı DTSExecResult olarak döndürür.

Sunucudaki paketleri program aracılığıyla çalıştıracak bir Web hizmeti oluşturmak için
  1. Visual Studio'yu açın ve tercih ettiğiniz programlama dilinde bir Web hizmeti projesi oluşturun. Örnek kod, proje için LaunchSSISPackageService adını kullanır.

  2. Microsoft.SqlServer.ManagedDTS'ye bir başvuru ekleyin ve Microsoft.SqlServer.Dts.Runtime ad alanının kod dosyasına imports veya using deyimi ekleyin.

  3. LaunchPackage Web hizmeti yöntemi için örnek kodu sınıfına yapıştırın. (Örnek, kod penceresinin tüm içeriğini gösterir.)

  4. LaunchPackage yönteminin mevcut bir paketi işaret eden giriş bağımsız değişkenleri için bir dizi geçerli değer sağlayarak Web hizmetini derleyin ve test edin. Örneğin, package1.dtsx sunucuda C:\Paketlerim'de depolanıyorsa sourceType değeri olarak "dosya", sourceLocation değeri olarak "C:\Paketlerim" ve packageName değeri olarak "package1" (uzantı olmadan) geçirin.

Imports System.Web  
Imports System.Web.Services  
Imports System.Web.Services.Protocols  
Imports Microsoft.SqlServer.Dts.Runtime  
Imports System.IO  
  
<WebService(Namespace:="https://dtsue/")> _  
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _  
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _  
Public Class LaunchSSISPackageService  
  Inherits System.Web.Services.WebService  
  
  ' 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  
  
  <WebMethod()> _  
  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 System;  
using System.Web;  
using System.Web.Services;  
using System.Web.Services.Protocols;  
using Microsoft.SqlServer.Dts.Runtime;  
using System.IO;  
  
[WebService(Namespace = "https://dtsue/")]  
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
public class LaunchSSISPackageServiceCS : System.Web.Services.WebService  
{  
  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  
  
  [WebMethod]  
  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();  
  
  }  
  
}  

Web Hizmetini Test Etme

Aşağıdaki örnek konsol uygulaması, bir paketi çalıştırmak için Web hizmetini kullanır. Web hizmetinin LaunchPackage yöntemi, istemci bilgisayarların herhangi bir Integration Services derlemesine başvuru gerektirmemesi için paket yürütmenin sonucunu bir DTSExecResult değer yerine tamsayı olarak döndürür. Örnek, değerleri yürütme sonuçlarını raporlamak için değerleri yansıtan DTSExecResult özel bir sabit listesi oluşturur.

Web hizmetini test etmek üzere bir konsol uygulaması oluşturmak için
  1. Visual Studio'da, Web hizmeti projesini içeren çözüme tercih ettiğiniz programlama dilini kullanarak yeni bir konsol uygulaması ekleyin. Örnek kod, proje için LaunchSSISPackageTest adını kullanır.

  2. Yeni konsol uygulamasını çözümdeki başlangıç projesi olarak ayarlayın.

  3. Web hizmeti projesi için bir Web başvurusu ekleyin. Gerekirse, Web hizmeti proxy nesnesine atadığınız adın örnek kodundaki değişken bildirimini ayarlayın.

  4. Main yordamı ve özel sabit listesi için örnek kodu koda yapıştırın. (Örnek, kod penceresinin tüm içeriğini gösterir.)

  5. Var olan bir paketi işaret eden giriş bağımsız değişkenleri için geçerli değerler kümesi sağlamak üzere LaunchPackage yöntemini çağıran kod satırını düzenleyin. Örneğin, package1.dtsx sunucuda C:\Paketlerim'de depolanıyorsa, değeri olarak sourceType"file" değerini , "C:\Paketlerim" değerini sourceLocationve "package1" (uzantısı olmadan) değerini packageNameolarak geçirin.

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  
      ' The type of exception returned by a Web service is:  
      '  System.Web.Services.Protocols.SoapException  
      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)  
      {  
        // The type of exception returned by a Web service is:  
        //  System.Web.Services.Protocols.SoapException  
        Console.WriteLine("The following exception occurred: " + ex.Message);  
      }  
  
      Console.WriteLine(((PackageExecutionResult)packageResult).ToString());  
      Console.ReadKey();  
  
    }  
  
    private enum PackageExecutionResult  
    {  
      PackageSucceeded,  
      PackageFailed,  
      PackageCompleted,  
      PackageWasCancelled  
    };  
  
  }  
}  

Dış Kaynaklar

Yerel ve Uzaktan Yürütme arasındaki farkları anlama
Program Aracılığıyla Yerel Paket Yükleme ve Çalıştırma
Yerel Paketin Çıktısını Yükleme