在SSIS动态变化的服务器名称(Dynamically Changing Server Names

2019-07-30 02:31发布

我有我的SSIS包在一个开发周期(开发,QA,分期和生产),因此移动通过我想使用一种配置,在SSIS设置服务器名称在我的连接管理器,这样我不几个环境吨需要手工来做到这一点。

我读过有关使用XML配置文件,SQL配置表和环境变量。 不过,我的问题是,我的QA和分级环境是相同的服务器,但使用两个单独的SQL实例上。 我怎样才能动态地配置服务器名称在这种情况下?

Answer 1:

好了,这是我们如何处理。 我们使用环境变量来确定数据库中读取从德的配置考核的休息。 环境变量与用户相关联,所以我们成立了工作的质量保证,以一个用户和分期到另一个工作。 我们的用户被称为像SQLQA和SQLstaging和仅用于运行作业。 那么环境变量指向我们存储在SSIS配置的配置的其他数据库。



Answer 2:

你可以仍然使用一个配置文件QA和分期。 在文件中包含两个服务器。

然后,当你建立一个执行包你的QA流程,包括选配的运行参数,把你想要的包来执行的,并使用一个小脚本任务在你的包的开头设置相应的变量的特定环境(甚至只是动态变量)。

它并不完美,但它至少应该让你在不同环境下执行,而无需更改包本身。



Answer 3:

我对这个问题的解决方案是,设计时间值总是指着开发环境。 任何开发人员打开了包,它验证针对环境和一切都很好。

运行开发外的包意味着他们是通过SQL Agent的运行。 如果你能精确控制的这个水平,那么它的创建工作,以指向正确的配置库的一个简单的事情。

物理实现,我用每环境(SYSDB),其持有我们的配置,日志框架+标准记录表(sysdtslog90 / sysssislog)的自定义SSIS目录。 被要求每包有一个可变的User::Default_ConfigurationServer和变量被用作配置连接管理器的ConnectionString属性的表达式。 听起来很复杂,但它不是---

  1. 创建String类型的变量
  2. 复制配置连接管理器的连接字符串的值,并粘贴为价值
  3. 指定一个表达式返回到配置连接管理器的ConnectionString属性

在dev的净效应是,它什么也不做,但现在你定位,使其在其他环境下工作。 我公司代理的所有看起来像

DECLARE @serverName sysname
,    @jobstep_command nvarchar(4000)
-- Lots of other stuff removed
SET @serverName = @@servername

SET @jobstep_command = N'/SQL "\MyPackage"' + '" /SERVER "' + @serverName + '" /CHECKPOINTING OFF /REPORTING E /SET "\Package.Variables[User::Default_ConfigurationServer].Properties[Value]";"\"Provider=SQLNCLI10;Data Source=' + @serverName + ';Initial Catalog=SYSDB;Integrated Security=SSPI;\""'

-- create the job, also removed
-- Create the job step
EXECUTE @return_code = msdb.dbo.sp_add_job 
    @job_name = @job_name
,   @enabled = @job_enabled
,   @description = @job_description
,   @start_step_id = @job_start_step
,   @category_name = @category_name
--, @category_id = @category
,   @owner_login_name = @job_owner_login_name
,   @notify_level_eventlog = @job_notify_level_eventlog
,   @notify_level_email = @job_notify_level_email
,   @notify_level_netsend = @job_notify_level_netsend
,   @notify_level_page = @job_notify_level_page
,   @notify_email_operator_name = @job_notify_email_operator_name
,   @notify_netsend_operator_name = @job_notify_netsend_operator_name
,   @notify_page_operator_name = @job_notify_page_operator_name
,   @delete_level = @job_delete_level
,   @job_id = @job_id OUTPUT

现在,无论创建我的工作在那里的,它指向该变量到正确的位置这反过来导致包发现正确的存储库,我有较少的工作要做。



文章来源: Dynamically Changing Server Names in SSIS