Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
SSIS Integration Runtime di Azure Data Factory
Untuk menjalankan paket jarak jauh dari komputer lokal yang tidak memiliki Layanan Integrasi yang terinstal, mulai paket sehingga paket berjalan di komputer jarak jauh tempat Layanan Integrasi diinstal. Anda melakukan ini dengan meminta komputer lokal menggunakan SQL Server Agent, layanan Web, atau komponen jarak jauh untuk memulai paket di komputer jarak jauh. Jika Anda mencoba memulai paket jarak jauh langsung dari komputer lokal, paket akan dimuat ke dan mencoba menjalankan dari komputer lokal. Jika komputer lokal tidak memiliki Layanan Integrasi yang terinstal, paket tidak akan berjalan.
Catatan
Anda tidak dapat menjalankan paket di luar SQL Server Data Tools pada komputer klien yang tidak memiliki Layanan Integrasi yang terinstal, dan ketentuan lisensi SQL Server Anda mungkin tidak memungkinkan Anda menginstal Layanan Integrasi di komputer tambahan. Integration Services adalah komponen server dan tidak dapat didistribusikan ulang ke komputer klien.
Secara bergantian, Anda dapat menjalankan paket jarak jauh dari komputer lokal yang telah menginstal Layanan Integrasi. Untuk informasi selengkapnya, lihat Memuat dan Menjalankan Paket Lokal Secara Terprogram.
Menjalankan Paket Jarak Jauh pada Komputer Jarak Jauh
Seperti disebutkan di atas, ada beberapa cara di mana Anda dapat menjalankan paket jarak jauh di server jarak jauh:
Menggunakan SQL Server Agent untuk menjalankan paket jarak jauh secara terprogram
Gunakan layanan Web atau komponen jarak jauh untuk menjalankan paket jarak jauh secara terprogram
Hampir semua metode yang digunakan dalam topik ini untuk memuat dan menyimpan paket memerlukan referensi ke rakitan Microsoft.SqlServer.ManagedDTS . Pengecualiannya adalah pendekatan ADO.NET yang ditunjukkan dalam topik ini untuk menjalankan prosedur tersimpan sp_start_job , yang hanya memerlukan referensi ke System.Data. Setelah Anda menambahkan referensi ke rakitan Microsoft.SqlServer.ManagedDTS dalam proyek baru, impor Microsoft.SqlServer.Dts.Runtime namespace layanan dengan pernyataan menggunakan atau Impor .
Menggunakan Agen SQL Server untuk Menjalankan Paket Jarak Jauh Secara Terprogram di Server
Sampel kode berikut menunjukkan cara menggunakan SQL Server Agent secara terprogram untuk menjalankan paket jarak jauh di server. Sampel kode memanggil prosedur tersimpan sistem, sp_start_job, yang meluncurkan pekerjaan SQL Server Agent. Pekerjaan yang diluncurkan prosedur diberi nama RunSSISPackage, dan pekerjaan ini ada di komputer jarak jauh. Pekerjaan RunSSISPackage kemudian menjalankan paket pada komputer jarak jauh.
Catatan
Nilai pengembalian prosedur tersimpan sp_start_job menunjukkan apakah prosedur tersimpan berhasil memulai pekerjaan SQL Server Agent. Nilai pengembalian tidak menunjukkan apakah paket berhasil atau gagal.
Untuk informasi tentang paket pemecahan masalah yang dijalankan dari pekerjaan SQL Server Agent, lihat artikel Microsoft, Paket SSIS tidak berjalan saat Anda memanggil paket SSIS dari langkah pekerjaan SQL Server Agent.
Kode Sampel
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, 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 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, RunSSISPackage, started successfully.");
break;
default:
Console.WriteLine("SQL Server Agent job, RunSSISPackage, failed to start.");
break;
}
Console.Read();
}
}
}
Menggunakan Layanan Web atau Komponen Jarak Jauh untuk Menjalankan Paket Jarak Jauh Secara Terprogram
Solusi sebelumnya untuk menjalankan paket secara terprogram di server tidak memerlukan kode kustom apa pun di server. Namun, Anda mungkin lebih suka solusi yang tidak mengandalkan SQL Server Agent untuk menjalankan paket. Contoh berikut menunjukkan layanan Web yang dapat dibuat di server untuk memulai paket Layanan Integrasi secara lokal, dan aplikasi pengujian yang dapat digunakan untuk memanggil layanan Web dari komputer klien. Jika Anda lebih suka membuat komponen jarak jauh alih-alih layanan Web, Anda dapat menggunakan logika kode yang sama dengan sangat sedikit perubahan dalam komponen jarak jauh. Namun komponen jarak jauh mungkin memerlukan konfigurasi yang lebih luas daripada layanan Web.
Penting
Dengan pengaturan default untuk autentikasi dan otorisasi, layanan Web umumnya tidak memiliki izin yang memadai untuk mengakses SQL Server atau sistem file untuk memuat dan menjalankan paket. Anda mungkin harus menetapkan izin yang sesuai ke layanan Web dengan mengonfigurasi pengaturan autentikasi dan otorisasinya di file web.config dan menetapkan izin database dan sistem file yang sesuai. Diskusi lengkap tentang izin Web, database, dan sistem file berada di luar cakupan topik ini.
Penting
Metode Application kelas untuk bekerja dengan dukungan SSIS Package Store hanya ".", localhost, atau nama server untuk server lokal. Anda tidak dapat menggunakan "(lokal)".
Kode Sampel
Sampel kode berikut menunjukkan cara membuat dan menguji layanan Web.
Membuat Layanan Web
Paket Layanan Integrasi dapat dimuat langsung dari file, langsung dari SQL Server, atau dari Penyimpanan Paket SSIS, yang mengelola penyimpanan paket di SQL Server dan folder sistem file khusus. Sampel ini mendukung semua opsi yang tersedia dengan menggunakan konstruksi Pilih Kasus atau beralih untuk memilih sintaks yang sesuai untuk memulai paket dan menggabungkan argumen input dengan tepat. Metode layanan Web LaunchPackage mengembalikan hasil eksekusi paket sebagai bilangan bulat alih-alih DTSExecResult nilai sehingga komputer klien tidak memerlukan referensi ke rakitan Integration Services apa pun.
Untuk membuat layanan Web untuk menjalankan paket di server secara terprogram
Buka Visual Studio dan buat proyek layanan Web dalam bahasa pemrograman pilihan Anda. Kode sampel menggunakan nama LaunchSSISPackageService untuk proyek.
Tambahkan referensi ke Microsoft.SqlServer.ManagedDTS dan tambahkan Impor atau menggunakan pernyataan ke file kode untuk namespace Microsoft.SqlServer.Dts.Runtime .
Tempelkan kode sampel untuk metode layanan Web LaunchPackage ke kelas . (Sampel menunjukkan seluruh konten jendela kode.)
Bangun dan uji layanan Web dengan menyediakan sekumpulan nilai yang valid untuk argumen input metode LaunchPackage yang menunjuk ke paket yang ada. Misalnya, jika package1.dtsx disimpan di server di C:\My Packages, teruskan "file" sebagai nilai sourceType, "C:\My Packages" sebagai nilai sourceLocation, dan "package1" (tanpa ekstensi) sebagai nilai packageName.
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();
}
}
Menguji Layanan Web
Contoh aplikasi konsol berikut menggunakan layanan Web untuk menjalankan paket. Metode LaunchPackage dari layanan Web mengembalikan hasil eksekusi paket sebagai bilangan bulat alih-alih DTSExecResult nilai sehingga komputer klien tidak memerlukan referensi ke rakitan Integration Services apa pun. Sampel membuat enumerasi privat yang nilainya mencerminkan DTSExecResult nilai untuk melaporkan hasil eksekusi.
Untuk membuat aplikasi konsol untuk menguji layanan Web
Di Visual Studio, tambahkan aplikasi konsol baru, menggunakan bahasa pemrograman pilihan Anda, ke solusi yang sama yang berisi proyek layanan Web. Kode sampel menggunakan nama LaunchSSISPackageTest untuk proyek.
Atur aplikasi konsol baru sebagai proyek startup dalam solusi.
Tambahkan referensi Web untuk proyek layanan Web. Jika perlu, sesuaikan deklarasi variabel dalam kode sampel untuk nama yang Anda tetapkan ke objek proksi layanan Web.
Tempelkan kode sampel untuk rutinitas Utama dan enumerasi privat ke dalam kode. (Sampel menunjukkan seluruh konten jendela kode.)
Edit baris kode yang memanggil metode LaunchPackage untuk menyediakan sekumpulan nilai yang valid untuk argumen input yang menunjuk ke paket yang ada. Misalnya, jika package1.dtsx disimpan di server di C:\My Packages, teruskan "file" sebagai nilai
sourceType, "C:\My Packages" sebagai nilaisourceLocation, dan "package1" (tanpa ekstensi) sebagai nilaipackageName.
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
};
}
}
Sumber Daya Eksternal
- Video, Cara: Mengotomatiskan Eksekusi Paket SSIS dengan Menggunakan SQL Server Agent (SQL Server Video), pada technet.microsoft.com
Lihat Juga
Memahami Perbedaan antara Eksekusi Lokal dan Jarak Jauh
Memuat dan Menjalankan Paket Lokal Secara Terprogram
Memuat Output Paket Lokal