ili*_*ica 10 sql-server deployment ssis environment-variables
我已经阅读了几篇关于环境变量的文章,但我找不到如何在我的情况下应用它们的用法.我正在本地机器上开发SSIS包.完成后,我计划在暂存生产服务器上进行部署.我的SSIS项目由几个包组成,其中大多数连接到2个数据库(但每个服务器都有自己的db副本)和很少的excel文件.
所以,我想将我的软件包部署到3个不同的服务器上.基于服务器,连接字符串会有所不同.由于这仍处于开发阶段,我将不得不重新部署大多数软件包.实现这一目标的最佳做法是什么?
bil*_*nkc 18
在集成服务目录,SSISDB下,点击鼠标右键,创建一个文件夹给它一个名称,但不要不单击确定.而是单击脚本,新查询编辑器窗口.这给出了一个类似的查询
DECLARE @folder_id bigint
EXEC [SSISDB].[catalog].[create_folder]
    @folder_name = N'MyNewFolder'
,   @folder_id = @folder_id OUTPUT
SELECT
    @folder_id
EXEC [SSISDB].[catalog].[set_folder_description]
    @folder_name = N'MyNewFolder'
,   @folder_description = N''
运行它,然后保存它,以便您可以在服务器2和服务器3上创建相同的文件夹.顺便说一下,这将是一个主题
刷新SSISDB下的下拉列表,找到新创建的文件夹.展开它,在"环境"下,右键单击"创建新环境".给它一个名称和描述,但不要点击OK.而是单击脚本,新查询编辑器窗口.
我们现在有了这个代码
EXEC [SSISDB].[catalog].[create_environment]
    @environment_name = N'DatabaseConnections'
,   @environment_description = N''
,   @folder_name = N'MyNewFolder'
运行它并保存以便部署到服务器2和3.
刷新"环境"树,在"新建环境"的"属性"窗口下,单击"变量"选项卡,然后为"连接"字符串或其他任何内容添加条目.这是你真的,真的不想点击确定.而是单击脚本,新查询编辑器窗口.
DECLARE @var sql_variant = N'ITooAmAConnectionString'
EXEC [SSISDB].[catalog].[create_environment_variable]
    @variable_name = N'CRMDB'
,   @sensitive = False
,   @description = N''
,   @environment_name = N'DatabaseConnections'
,   @folder_name = N'MyNewFolder'
,   @value = @var
,   @data_type = N'String'
GO
DECLARE @var sql_variant = N'IAmAConnectionString'
EXEC [SSISDB].[catalog].[create_environment_variable]
    @variable_name = N'SalesDB'
,   @sensitive = False
,   @description = N''
,   @environment_name = N'DatabaseConnections'
,   @folder_name = N'MyNewFolder'
,   @value = @var
,   @data_type = N'String'
GO
运行该查询,然后保存.现在,当您部署到环境2和3时,您只需更改值@var
到目前为止,我们已经成功地为我们的包提供了一套一致的文件夹,环境和变量.现在我们需要在一组包中实际使用它们.这将假设您的包已部署到上述步骤和现在之间的文件夹中.
右键单击要配置的包/项目.你很可能想要这个项目.
此时,您将拥有一个脚本,该脚本添加对环境变量的引用(以便您可以使用它),然后使用环境中的值覆盖存储的包值.
DECLARE @reference_id bigint
EXEC [SSISDB].[catalog].[create_environment_reference]
    @environment_name = N'DatabaseConnections'
,   @reference_id = @reference_id OUTPUT
,   @project_name = N'HandlingPasswords'
,   @folder_name = N'MyNewFolder'
,   @reference_type = R
SELECT
    @reference_id
GO
EXEC [SSISDB].[catalog].[set_object_parameter_value]
    @object_type = 30
,   @parameter_name = N'CM.tempdb.ConnectionString'
,   @object_name = N'ClassicApproach.dtsx'
,   @folder_name = N'MyNewFolder'
,   @project_name = N'HandlingPasswords'
,   @value_type = R
,   @parameter_value = N'SalesDB'
GO
应保存此脚本并将其用于服务器2和3.
所有这些都是为了让您可以使用配置.从作业安排包执行时,最终将得到如下所示的作业步骤
EXEC msdb.dbo.sp_add_jobstep
    @job_name = N'Demo job'
,   @step_name = N'SSIS job step'
,   @subsystem = N'SSIS'
,   @command = N'/ISSERVER "\"\SSISDB\MyNewFolder\HandlingPasswords\ClassicApproach.dtsx\"" /SERVER "\".\dev2014\"" /ENVREFERENCE 1 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
ClassicApproach除了我们的环境参考之外,您会注意到以上所有内容都很好并且指定了文本字符串而不是随机整数值.那是因为您可以为多个文件夹中的环境使用相同的文本名称.与您将同一项目部署到多个文件夹的方式类似,但无论出于何种原因,SSIS开发人员选择在我们使用"随机"整数值时提供包的完全限定路径.要确定您的环境ID,您可以运行以下查询
SELECT
    ER.reference_id AS ReferenceId
,   E.name AS EnvironmentName
,   F.name AS FolderName
,   P.name AS ProjectName
FROM
    SSISDB.catalog.environments AS E
    INNER JOIN
        SSISDB.catalog.folders AS F
        ON F.folder_id = E.folder_id
    INNER JOIN 
        SSISDB.catalog.projects AS P
        ON P.folder_id = F.folder_id
    INNER JOIN
        SSISDB.catalog.environment_references AS ER
        ON ER.project_id = P.project_id
ORDER BY 
    ER.reference_id;
或者浏览"文件夹/环境"下的"Integration Services目录",然后双击所需的环境.在生成的"环境属性"窗口中,名称和标识符将显示为灰色,并且Identifier您需要在SQL代理的作业步骤命令中使用该属性/ENVREFERENCE值.
如果您小心并保存向导为您执行的所有操作,那么在整个环境中迁移更改时,您只需更改一件事.这将导致干净,流畅,可重复的迁移过程,您想知道为什么要回到XML文件或任何其他配置方法.
| 归档时间: | 
 | 
| 查看次数: | 12540 次 | 
| 最近记录: |