执行SSIS包

执行SSIS包,ssis,Ssis,我刚刚开始学习SSIS软件包,所以若我的问题的答案对你们来说是显而易见的,那个么请记住:-) 我有一个SSIS包,需要安装在不同的环境中,如DEV/SYSTEST/DTE/LIVE。请注意,SQL Server连接字符串在每个环境中都是不同的,因此需要不同的配置文件 我认为部署它的方式是 为不同的环境创建单独的包配置文件 创建一个环境变量,比如“MyPackageConfigPath”,以保存 配置文件的路径 使用DtExec命令和/ConfigFile开关运行包 我的问题是: 这是以不同

我刚刚开始学习SSIS软件包,所以若我的问题的答案对你们来说是显而易见的,那个么请记住:-)

我有一个SSIS包,需要安装在不同的环境中,如DEV/SYSTEST/DTE/LIVE。请注意,SQL Server连接字符串在每个环境中都是不同的,因此需要不同的配置文件

我认为部署它的方式是

  • 为不同的环境创建单独的包配置文件
  • 创建一个环境变量,比如“MyPackageConfigPath”,以保存 配置文件的路径
  • 使用DtExec命令和/ConfigFile开关运行包
我的问题是:

  • 这是以不同的方式部署SSIS包的好方法吗 环境
  • 在这个场景中,还有其他更好的执行包的方法吗

谢谢大家!

最好的答案是适合你的情况的答案。不是很有帮助,但你已经做到了。我不明白为什么你的解决方案不起作用


有些地方对在生产机器上添加环境变量有点挑剔。如果你能做到这一点,没有问题。如果没有,您能否将配置文件放在每台机器上的同一位置,并对位置进行硬编码?另外,部署时不必担心这一点。

我不喜欢摆弄环境变量,我发现在包配置中使用“SQL Server”配置元素更容易。它在您选择的数据库中创建预定义结构的配置表。该数据库甚至可能是服务器“localhost”上的“config123”。我就是这么做的。然后,我将配置数据库保存在本地开发机器和服务器上,但配置条目的值不同。 这意味着在我开发时,包使用我的本地配置设置,在服务器运行时,包自动使用生产服务器配置。:-)


我们还将包保存在msdb中(DeploymentManifests由Visual Studio创建,没有什么大不了的),并让SQL Server代理定期运行这些包。这使得部署更改变得非常容易。只要将更新后的包部署到msdb中,就可以了。

假设2005-2008 R2或2012具有包部署模型,您的配置选项如下

  • 父包
  • 注册表值
  • 环境变量
  • 命令行分配
  • XML文件
  • 数据库表
  • 您通常可以将它们分为单值配置(1-4)和多值配置(5-6)。所有这些方法都有优点和缺点,但我发现我拥有将数据库表作为主要配置存储库的最佳经验。我的所有值都存储在给定环境的目录中,因此每个环境(开发、测试、加载、阶段、产品)服务器都有一个专用目录,其中包含一个配置表(以及日志记录和其他特定于ETL的内容)

    表格法 如果您不喜欢我的表,您可以创建自己的表或让BIDS/SSDT来创建

    CREATE TABLE dbo.SSISConfig
    (
        id identity(1,1) NOT NULL PRIMARY KEY
    ,   ConfigurationFilter nvarchar(150) NOT NULL -- Package Name
    ,   ConfiguredValue nvarchar(255) NULL -- Value of setting, such as a connection string
    ,   PackagePath nvarchar(255) NOT NULL -- Target within SSIS package where value is written
    ,   ConfiguredValueType nvarchar(20) NOT NULL -- Data type such as String, Int32, or DateTime
    )
    
    DEV服务器上的示例如下所示

    id  | ConfigurationFilter| ConfiguredValue                                                                         | PackagePath                                              | ConfiguredValueType
    100 | Default.2005.Sales | Data Source=DEV;Initial Catalog=SALESDEVDB;Provider=SQLNCLI.1;Integrated Security=SSPI; | \Package.Connections[SLSDB].Properties[ConnectionString] | String
    
    生产中的同一行看起来像

    id  | ConfigurationFilter| ConfiguredValue                                                                          | PackagePath                                              | ConfiguredValueType
    123 | Default.2005.Sales | Data Source=PROD;Initial Catalog=SALESPRODB;Provider=SQLNCLI.1;Integrated Security=SSPI; | \Package.Connections[SLSDB].Properties[ConnectionString] | String
    
    我们有配置部署脚本,这些脚本将服务器部署到处理数据库和服务器名称更改的服务器中,因此只有一个脚本需要维护。我发现在这种情况下,XML文件很难保持同步(糟糕,我们忘了更新产品的配置文件,而且输入了错误的数据)

    诀窍 正如您在第二个要点中所指出的,实现这一点的诀窍在于,您需要某种机制来告诉SSI使用不同的配置集。如果您没有多实例机器,那么我发现使用环境变量是一种很好的方法。每个执行包的服务器定义一次,就完成了。如果您在多实例环境中工作,则情况会变得更加棘手

    我认为HLGEM有一个相当聪明的方法,在多实例环境中使用不同的服务帐户和本地环境变量。您可以向下滚动查看我在多实例机器上的方法

    我介绍配置的各种答案