执行SSIS包

时间:2012-07-03 14:12:37

标签: ssis

我刚刚开始学习SSIS包,所以如果我的查询答案对您来说很明显,那么请耐心等待: - )

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

我想要部署它的方式是

  • 为不同的环境创建单独的程序包配置文件
  • 创建一个环境变量,说'MyPackageConfigPath'来保存 配置文件的路径。
  • 使用带/ ConfigFile开关的DtExec命令
  • 运行包

我的问题:

  • 这是不同部署SSIS包的好方法吗? 环境?
  • 在这种情况下执行包的任何其他更好的方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

假设2005-2008 R2或2012使用包部署模型,您的配置选项

  1. 父包
  2. 注册表值
  3. 环境变量
  4. 命令行分配
  5. XML文件
  6. 数据库表
  7. 通常可以将它们分组为单值配置(1-4)和多值配置(5-6)。所有这些都有利有弊,但我发现我拥有数据库表作为主要配置存储库的最佳体验。我的所有值都存储在给定环境中,因此每个环境(dev,test,load,stage,prod)服务器都有一个专用目录,其中包含一个用于配置的表(以及日志记录和其他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文件很难保持同步,因为这样的情况(垃圾,我们忘了更新生产的配置文件而我们输入了错误的数据)。

    诀窍

    正如您在第二篇文章中指出的那样,使这项工作的技巧是您需要一些机制来告诉SSIS使用不同的配置集。如果你没有多实例机器,那么我发现使用环境变量是一种很好的方法。每个执行包的服务器定义一次,然后就完成了。如果您在多实例环境中工作,那么它将变得更加棘手。

    我虽然HLGEM在answer中使用不同的服务帐户与多实例环境中的本地环境变量有一个相当聪明的方法。您可以向下滚动以查看我在多实例计算机上的方法。

    我所涵盖的配置

    的各种答案

答案 1 :(得分:0)

最好的答案是适合您情况的答案。不是很有帮助,但是,你有它。我无法理解为什么你的解决方案无法运作。

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

答案 2 :(得分:0)

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

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