首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在sql server 2012中部署现有的SSIS包?

如何在sql server 2012中部署现有的SSIS包?
EN

Stack Overflow用户
提问于 2014-02-04 22:24:13
回答 3查看 53.3K关注 0票数 17

我在SSIS包上工作,在现有的ssis package.After上增加了一个数据流任务,完成了添加新任务,我重建了包,没有任何错误。我需要把它部署到开发服务器上吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-05 01:01:59

背景

Visual Studio中的2012 SSIS Project Deployment model包含一个文件,其中包含项目参数、项目级连接管理器、包以及您添加到项目中的任何其他内容。

在下图中,您可以看到我有一个名为Lifecycle的解决方案。该解决方案有一个名为Lifecycle的项目。生命周期项目定义了一个项目级连接管理器ERIADOR和两个包: Package00.dtsx和Package01.dtsx。

当您运行包时,Visual Studio将首先在幕后构建/编译所有必需的项目元素,并将其编译为一个可部署的量程,称为ispac (发音为eye ess-pack,而不是ice-pack)。这将在您的项目的bin\Development子文件夹中找到。

Lifecycle.ispac是一个压缩文件,包含以下内容。

这一切是什么意思?最大的区别在于,您需要部署整个.ispac,而不仅仅是部署一个更新的包。是的,即使你只更改了一个包,你也必须重新部署所有的东西。这就是生活。

如何使用SSIS项目部署模型部署包?

您可以使用主机选项,但您需要了解的3件事是

  • 我的ispac
  • 在哪里?我要部署到
  • 的是哪台服务器?将此项目部署到

的是什么文件夹

SSDT

在一开始,这可能是你最常用的选择。在SQL Server数据工具SSDT中,您可以在Configuration Manager级别定义要部署到的服务器和文件夹。在我的客户端,我有3种配置:开发、阶段、生产。一旦您定义了这些值,它们将被保存到.dtproj文件中,然后您可以右键单击并从visual studio部署到您的核心内容。

ISDeploymentWizard -图形用户界面风格

SSDT实际上只是构建对ISDeploymentWizard.exe的调用,由于某种原因,它有32位和64位两种风格。

Microsoft:\ Server\110\DTS\Binn\ISDeploymentWizard.exe

  • C:\Program Server\110\DTS\Binn\ISDeploymentWizard.exe

\

  • (x86)\Microsoft

ISDeploymentWizard关联了一个.ispac扩展,所以双击就可以了。与使用SSDT界面相比,第一个屏幕是新的,但在此之后,它将是要部署的相同的单击集。

ISDeploymentWizard -命令行风格

他们在包部署模型的2012版本中得到的正确之处在于,清单文件可以以自动方式部署。我有一个workaround,但它应该是一个标准的“东西”。

因此,请仔细查看SSDT或GUI deploy中的Review选项卡。那不是个美人吗?

使用相同的可执行文件ISDeploymentWizard,我们可以为我们的.ispac提供一个有人值守和无人值守的安装程序。突出显示第二行,复制粘贴,现在就可以进行持续集成了!

代码语言:javascript
复制
C:\Program Files\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe 
/Silent 
/SourcePath:"C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac" 
/DestinationServer:"localhost\dev2012" 
/DestinationPath:"/SSISDB/Folder/Lifecycle"

TSQL

可以通过SQL Server Management Studio SSMS或命令行sqlcmd.exe将ispac部署到SQL Server。虽然SQLCMD不是严格要求,但它简化了脚本。

您必须使用windows帐户来执行此操作,否则您将收到以下错误消息。

该操作不能由使用SQL Server身份验证的帐户启动。使用使用Windows身份验证的帐户启动操作。

此外,您还需要能够执行批量操作(序列化.ispac)和对SSISDB数据库的SSISDB/sa权限。

在这里,我们使用OPENROWSET和BULK选项将ispac读入varbinary变量。如果文件夹不存在,我们通过catalog.create_folder创建一个文件夹,然后使用catalog.deploy_project实际部署项目。一旦完成,我喜欢检查操作消息表,以验证事情是否按预期进行。

代码语言:javascript
复制
USE SSISDB
GO

-- You must be in SQLCMD mode
-- setvar isPacPath "C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac"
:setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac>"

DECLARE
    @folder_name nvarchar(128) = 'TSQLDeploy'
,   @folder_id bigint = NULL
,   @project_name nvarchar(128) = 'TSQLDeploy'
,   @project_stream varbinary(max)
,   @operation_id bigint = NULL;

-- Read the zip (ispac) data in from the source file
SELECT
    @project_stream = T.stream
FROM
(
    SELECT 
        *
    FROM 
        OPENROWSET(BULK N'$(isPacPath)', SINGLE_BLOB ) AS B
) AS T (stream);

-- Test for catalog existences
IF NOT EXISTS
(
    SELECT
        CF.name
    FROM
        catalog.folders AS CF
    WHERE
        CF.name = @folder_name
)
BEGIN
    -- Create the folder for our project
    EXECUTE [catalog].[create_folder] 
        @folder_name
    ,   @folder_id OUTPUT;
END

-- Actually deploy the project
EXECUTE [catalog].[deploy_project] 
    @folder_name
,   @project_name
,   @project_stream
,   @operation_id OUTPUT;

-- Check to see if something went awry
SELECT
    OM.* 
FROM
    catalog.operation_messages AS OM
WHERE
    OM.operation_message_id = @operation_id;

你妈妈

与中一样,您的Managed Object Model提供了用于部署包的.NET接口。这是一种用于部署ispac以及创建文件夹的PowerShell方法,因为这是ISDeploymentWizard不支持的选项。

代码语言:javascript
复制
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Management.IntegrationServices") | Out-Null

#this allows the debug messages to be shown
$DebugPreference = "Continue"

# Retrieves a 2012 Integration Services CatalogFolder object
# Creates one if not found
Function Get-CatalogFolder
{
    param
    (
        [string] $folderName
    ,   [string] $folderDescription
    ,   [string] $serverName = "localhost\dev2012"
    )

    $connectionString = [String]::Format("Data Source={0};Initial Catalog=msdb;Integrated Security=SSPI;", $serverName)

    $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)

    $integrationServices = New-Object Microsoft.SqlServer.Management.IntegrationServices.IntegrationServices($connection)
    # The one, the only SSISDB catalog
    $catalog = $integrationServices.Catalogs["SSISDB"]

    $catalogFolder = $catalog.Folders[$folderName]

    if (-not $catalogFolder)
    {
        Write-Debug([System.string]::Format("Creating folder {0}", $folderName))
        $catalogFolder = New-Object Microsoft.SqlServer.Management.IntegrationServices.CatalogFolder($catalog, $folderName, $folderDescription)
        $catalogFolder.Create()
    }

    return $catalogFolder
}

# Deploy an ispac file into the SSISDB catalog
Function Deploy-Project
{
    param
    (
        [string] $projectPath
    ,   [string] $projectName
    ,   $catalogFolder
    )

    # test to ensure file exists
    if (-not $projectPath -or  -not (Test-Path $projectPath))
    {
        Write-Debug("File not found $projectPath")
        return
    }

    Write-Debug($catalogFolder.Name)
    Write-Debug("Deploying $projectPath")

    # read the data into a byte array
    [byte[]] $projectStream = [System.IO.File]::ReadAllBytes($projectPath)

    # $ProjectName MUST match the value in the .ispac file
    # else you will see 
    # Failed to deploy the project. Fix the problems and try again later.:The specified project name, test, does not match the project name in the deployment file.
    $projectName = "Lifecycle"

    $project = $catalogFolder.DeployProject($projectName, $projectStream)
}




$isPac = "C:\Dropbox\presentations\SSISDB Lifecycle\Lifecycle\Lifecycle\bin\Development\Lifecycle.ispac"
$folderName = "Folder"
$folderName = "SSIS2012"
$folderDescription = "I am a description"
$serverName = "localhost\dev2012"

$catalogFolder = Get-CatalogFolder $folderName $folderDescription $serverName

Deploy-Project $isPac $projectName $catalogFolder
票数 61
EN

Stack Overflow用户

发布于 2016-06-29 19:26:04

这是关于在SSIS 2016中部署单个包的更新(希望这会有用)。

随着SQL Server 2016和SSDT 2015的发布,单个包部署的问题现在已经成为过去。出现了新的Deploy Package选项(VS 2015),用于在项目部署模型中部署单个包

有了这个新特性,您还可以部署多个包,方法是单击并按住Ctrl键,然后选择要部署的包。

除了Visual Studio2015中的Deploy Package选项之外,您还可以使用其他一些可能性来部署包,例如启动ISDeploymentWizard应用程序或执行命令行部署(当SSIS构建和部署作为持续集成过程的一部分进行自动化或管理时,此选项是必需的)。您可以通过导航到这篇文章了解更多信息:http://www.sqlshack.com/single-package-deployment-in-sql-server-integration-services-2016/

票数 10
EN

Stack Overflow用户

发布于 2014-02-05 00:01:55

如果您在SSIS 2012中使用项目模型,则每次在包中进行任何更改时都必须部署项目。您可以简单地执行以下操作:

  • 右键单击项目并部署
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21555086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档