在网络外部署SSIS(SQL Server 2012)项目

时间:2013-01-22 16:53:22

标签: deployment ssis sql-server-2012

我在我的PC上构建了一个SSIS项目,并在执行包时连接到网络外的SQL 2012 Server(通过SQL身份验证)。现在是时候将项目部署到同一台服务器上了,但我已经碰壁了。在浏览内置部署向导时,我输入服务器名称(就像我输入它以连接到连接管理器的数据库)并获得“不受信任的域”错误(它需要Window的身份验证而不是SQL身份验证)。

我认为我使用参数在项目中设置特定于环境的值也可能是相关的。

如何将SSIS项目部署到网络外的SQL Server?

我还应该补充一点,在我的搜索中,我确实遇到了一个用VPN连接努力做到这一点的人(没有发布决议),这通常是怎么做的?

2 个答案:

答案 0 :(得分:9)

您有3个工具可以将.ispac文件部署到SSISDB目录中。

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL
  4. 您已经在使用该向导,但由于身份验证问题而无法使用该向导。我想即使你的MOM方法,你仍然会遇到身份验证问题。这留下了TSQL方法,因为您有一个有效的登录,希望这将有效。

    以下代码将序列化.ispac,创建部署文件夹(如果尚不存在),部署项目然后分配参数值。

    在SSMS中,您需要将模式更改为SQLCMD模式,该模式在“查询”菜单下可用。执行此操作后,按Ctrl-Shift-M以显示宏,它将允许您指定.ispac文件的位置。

    USE SSISDB
    GO
    
    IF ('$(isPacPath)' = '$' + '(isPacPath)')
    BEGIN
        THROW 50000, N'This script must be run in SQLCMD mode.', 1;
    END
    GO
    
    -- You must be in SQLCMD mode
    -- setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac"
    :setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac>"
    
    
    
    DECLARE
        @folder_name nvarchar(128) = 'TSQLDeploy'
    ,   @folder_id bigint = NULL
        -- this must match the ispac
    ,   @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;
    
    -- Use this to set parameters
    -- http://msdn.microsoft.com/en-us/library/ff878162.aspx
    EXECUTE catalog.set_object_parameter_value 
        -- Use the value 20 to indicate a project parameter 
        -- or the value 30 to indicate a package parameter
        @object_type = 20 
    ,   @folder_name = @folder_name
    ,   @project_name = @project_name
    ,   @parameter_name = N'' -- nvarchar(128)
    ,   @parameter_value = NULL -- sql_variant
    ,   @object_name = N'' -- nvarchar(260)
    ,   @value_type = '' -- char(1)
    --  Use the character V to indicate that parameter_value is a literal value 
    -- that will be used by default if no other values are assigned prior 
    -- to execution. 
    -- Use the character R to indicate that parameter_value is a referenced value 
    -- and has been set to the name of an environment variable. 
    -- This argument is optional, the character V is used by default
    

    如果您参加了SQL Pass Summit 2012会议,我在2012 Deployment Model的演讲中对此进行了演示,但我没有介绍parameter部分。我认为最后一次通话是正确的,但我还没有证实。我已链接到过程调用的文档,以便您可以根据您的特定需求进行定制。

    示例PowerShell implementation

    2013年8月更新

    我在现在的客户那里学到了一些东西。我们的笔记本电脑已加入主域。我们在客户的AD网络上有账户。每当我需要在客户的世界中“做”某些事情时,我需要启动我的流程并指示它呈现我的“外国”凭据。使这成为可能的是RunAs。替代reference

    我创建了一套批处理文件,可以启动我需要的每个进程。它们采用

    的形式
    runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"
    

    我有一个用于命令提示符(上面),Visual Studio,SSMS,PowerShell,PowerShell ISE和其他一些需要使用其域名的专业应用程序。

    使用runas方法,我已经能够使用上述所有方法部署包(以及直接从使用外部凭据运行的Visual Studio实例部署)。

答案 1 :(得分:6)

我遇到类似问题时使用的一种方法是:

  1. 在VS 2012中建立项目。
  2. 将“* .ispac”文件复制到远程服务器。
  3. 双击“* .ispac”,通过选择目标服务器和目录来运行向导。
  4. 使用具有所需访问级别和角色的Windows帐户进行连接,验证包。
  5. 唯一的问题是,如果您有多个参数并且您的软件包已加密,您将无法导入它(这来自显示的警告消息,我没有使用加密软件包进行测试)。

    希望它有所帮助。