gpt4 book ai didi

sql-server - 如何在SQL Server 2012中部署现有的SSIS包?

转载 作者:行者123 更新时间:2023-12-02 05:38:49 25 4
gpt4 key购买 nike

我正在研究SSIS包。我向现有的ssis包中添加了另一个数据流任务。添加新任务后,我重新构建了该包,结果发现它没有任何错误。
我需要将其部署到开发服务器吗?

最佳答案

背景

Visual Studio中的2012 SSIS Project Deployment model包含用于项目参数,项目级连接管理器,程序包以及您添加到项目中的所有其他文件的文件。

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



运行包时,Visual Studio会先在后台将所有必需的项目元素生成/编译到称为ispac(发音为eye-ess-pack,而不是ice-pack)的可部署范围中。这将在您项目的bin\Development子文件夹中找到。



Lifecycle.ispac是一个包含以下内容的zip文件。



这到底是什么意思最大的区别在于,您不仅需要部署更新的软件包,还需要部署整个.ispac。是的,即使您只更改了一个软件包,您实际上也必须重新部署所有内容。这就是人生。

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

您有一个可用的主机选项,但是您需要了解的三件事是


我的ispac在哪里
我要部署到哪个服务器
该项目到哪个文件夹


固态硬盘

一开始这可能是您最常见的选择。在SQL Server数据工具SSDT中,您可以在Configuration Manager级别定义将什么服务器和文件夹内容部署到哪个服务器。在我的客户处,我有3种配置:开发,阶段,生产。定义这些值后,它们将保存到.dtproj文件中,然后您可以右键单击并从Visual Studio部署到您内心的内容。



ISDeploymentWizard-GUI风格

SSDT实际上只是建立对ISDeploymentWizard.exe的调用,出于某种原因,该版本具有32位和64位版本。


C:\ Program Files \ Microsoft SQL Server \ 110 \ DTS \ Binn \ ISDeploymentWizard.exe
C:\ Program Files(x86)\ Microsoft SQL Server \ 110 \ DTS \ Binn \ ISDeploymentWizard.exe


.ispac扩展名与ISDeploymentWizard关联,因此双击然后离开。与使用SSDT界面相比,第一个屏幕是新屏幕,但在那之后,它将是相同的部署单击集。

ISDeploymentWizard-命令行风格

他们对2012年发布的软件包部署模型感到满意的是,清单文件可以以自动化方式进行部署。我有一个workaround,但它应该是标准的“东西”。

因此,请仔细查看SSDT或GUI部署中的“审阅”选项卡。那不是美女吗?



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

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数据库的ssis_admin / sa权限的能力。

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

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不支持该选项。

[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

关于sql-server - 如何在SQL Server 2012中部署现有的SSIS包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21555086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com