Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
SSIS Integration Runtime ve službě Azure Data Factory
Pokud chcete spustit vzdálené balíčky z místního počítače, který nemá nainstalované integrační služby, spusťte balíčky tak, aby běžely na vzdáleném počítači, na kterém je nainstalovaná služba Integration Services. K dosažení tohoto cíle použijte k spuštění balíčků na vzdáleném počítači agenta SYSTÉMU SQL Server, webovou službu nebo vzdálenou komponentu. Pokud se pokusíte spustit vzdálené balíčky přímo z místního počítače, balíčky se načtou a pokusí se spustit z místního počítače. Pokud místní počítač nemá nainstalované integrační služby, balíčky se nespustí.
Poznámka:
Balíčky mimo SQL Server Data Tools nelze spouštět na klientském počítači, pokud není nainstalována služba Integration Services. Podmínky licencování SQL Serveru nemusí umožnit instalaci integračních služeb na jiné počítače. Integrační služby jsou serverovou komponentou a nedají se distribuovat do klientských počítačů.
Případně můžete spustit vzdálený balíček z místního počítače s nainstalovanou službou Integration Services. Další informace naleznete v tématu Načítání a spouštění místního balíčku programově.
Spuštění vzdáleného balíčku na vzdáleném počítači
Vzdálený balíček můžete spustit na vzdáleném serveru několika způsoby:
Téměř všechny metody použité v tomto tématu k načtení a uložení balíčků vyžadují odkaz na sestavení Microsoft.SqlServer.ManagedDTS . Výjimkou je ADO.NET přístup, který je ukázaný v tomto tématu při provádění sp_start_job uložené procedury, která vyžaduje pouze odkazy na System.Data a Microsoft.Data.SqlClient. Po přidání odkazu na sestavení Microsoft.SqlServer.ManagedDTS v novém projektu importujte Microsoft.SqlServer.Dts.Runtime obor názvů pomocí příkazu using nebo Imports .
Použití agenta SQL Serveru ke spuštění vzdáleného balíčku programově na serveru
Následující ukázka kódu ukazuje, jak programově používat agenta SQL Serveru ke spuštění vzdáleného balíčku na serveru. Ukázka kódu volá uloženou proceduru systému sp_start_job, která spustí úlohu agenta SQL Serveru. Úloha, kterou procedura spustí, má název RunSSISPackagea tato úloha je ve vzdáleném počítači. Úloha RunSSISPackage pak spustí balíček na vzdáleném počítači.
Poznámka:
Vrácená hodnota sp_start_job uložená procedura označuje, zda uložená procedura mohla úspěšně spustit úlohu agenta SQL Serveru. Vrácená hodnota nezoznačuje, jestli byl balíček úspěšný nebo neúspěšný.
Informace o řešení potíží s balíčky spouštěné z úloh agenta SQL Serveru najdete v článku Microsoftu, balíček SSIS se nespustí při volání balíčku SSIS z kroku úlohy agenta SQL Serveru.
Ukázka kódu
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();
}
}
}
Použití webové služby nebo vzdálené komponenty ke spuštění vzdáleného balíčku prostřednictvím kódu programu
Předchozí řešení pro spouštění balíčků na serveru programově nevyžaduje žádný vlastní kód na serveru. Možná ale dáváte přednost řešení, které při spouštění balíčků nespoléhá na agenta SQL Serveru. Následující příklad ukazuje, jak vytvořit webovou službu na serveru pro místní spuštění balíčků integračních služeb a testovací aplikaci pro volání webové služby z klientského počítače. Pokud dáváte přednost vytvoření vzdálené komponenty místo webové služby, můžete použít stejnou logiku kódu s několika změnami ve vzdálené komponentě. Vzdálená komponenta však může vyžadovat rozsáhlejší konfiguraci než webová služba.
Důležité
Ve výchozím nastavení pro ověřování a autorizaci nemá webová služba obecně dostatečná oprávnění pro přístup k SQL Serveru nebo systému souborů pro načtení a spouštění balíčků. Možná budete muset webové službě přiřadit příslušná oprávnění tak, že v souboruweb.config nakonfigurujete jeho nastavení ověřování a autorizace a podle potřeby přiřadíte oprávnění k databázi a systému souborů. Úplná diskuze o oprávněních k webu, databázi a systému souborů je nad rámec tohoto tématu.
Důležité
Metody Application třídy pro práci s úložištěm balíčků SSIS podporují pouze ".", localhost nebo název serveru pro místní server. Nemůžete použít "(local)".
Ukázka kódu
Následující ukázky kódu ukazují, jak vytvořit a otestovat webovou službu.
Vytvoření webové služby
Balíček integrační služby můžete načíst přímo ze souboru, z SQL Serveru nebo z úložiště balíčků SSIS. Úložiště balíčků SSIS spravuje úložiště balíčků jak v SQL Serveru, tak ve speciálních složkách systému souborů. Tato ukázka podporuje všechny dostupné možnosti pomocí konstruktoru Select Case nebo switch k výběru odpovídající syntaxe pro spuštění balíčku a zřetězení vstupních argumentů odpovídajícím způsobem. Metoda webové služby LaunchPackage vrátí výsledek spuštění balíčku jako celé číslo místo DTSExecResult hodnoty, aby klientské počítače nevyžadují odkaz na žádná sestavení integračních služeb.
Vytvoření webové služby pro spouštění balíčků na serveru prostřednictvím kódu programu
Otevřete Visual Studio a vytvořte projekt webové služby v preferovaném programovacím jazyce. Ukázkový kód používá pro projekt název LaunchSSISPackageService.
Přidejte odkaz na Microsoft.SqlServer.ManagedDTS a do souboru kódu pro obor názvů Microsoft.SqlServer.Dts.Runtime přidejte příkaz Imports nebo using.
Vložte vzorový kód metody webové služby LaunchPackage do třídy. (Ukázka zobrazuje celý obsah okna kódu.)
Sestavte a otestujte webovou službu poskytnutím sady platných hodnot pro vstupní argumenty metody LaunchPackage, která odkazují na existující balíček. Pokud je například package1.dtsx uložen na serveru v umístění C:\My Packages, předejte "soubor" jako hodnotu sourceType, C:\My Packages jako hodnotu sourceLocation a "package1" (bez přípony) jako hodnotu 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();
}
}
Testování webové služby
Následující ukázková konzolová aplikace používá webovou službu ke spuštění balíčku. Metoda LaunchPackage webové služby vrátí výsledek spuštění balíčku jako celé číslo, DTSExecResult aby klientské počítače nevyžadují odkaz na žádná sestavení integračních služeb. Ukázka vytvoří privátní výčet, jehož hodnoty zrcadlí DTSExecResult hodnoty pro hlášení výsledků provádění.
Vytvoření konzolové aplikace pro otestování webové služby
V sadě Visual Studio přidejte novou konzolovou aplikaci pomocí preferovaného programovacího jazyka do stejného řešení, které obsahuje projekt webové služby. Vzorový kód používá pro projekt název LaunchSSISPackageTest.
Nastavte novou konzolovou aplikaci jako spouštěný projekt v řešení.
Přidejte odkaz na web pro projekt webové služby. V případě potřeby upravte deklaraci proměnné v vzorovém kódu pro název, který přiřadíte k objektu proxy webové služby.
Vložte vzorový kód pro rutinu Main a privátní výčet do kódu. (Ukázka zobrazuje celý obsah okna kódu.)
Upravte řádek kódu, který volá Metodu LaunchPackage, aby poskytoval sadu platných hodnot pro vstupní argumenty, které odkazují na existující balíček. Pokud je například package1.dtsx uložen na serveru v C:\My Packages, předejte "soubor" jako hodnotu
sourceType" C:\My Packages" jako hodnotusourceLocationa "package1" (bez přípony) jako hodnotupackageName.
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
};
}
}
Externí zdroje
- Video, postupy: Automatizace spouštění balíčků SSIS pomocí agenta SQL Serveru (video SQL Serveru) na technet.microsoft.com
Související obsah
pochopení rozdílů mezi místním a vzdáleným spouštěním
načítání a spouštění místního balíčku prostřednictvím kódu programu
Načtení výstupu místního balíčku