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

Deployment 在网络外部部署SSIS(SQL Server 2012)项目,deployment,ssis,sql-server-2012,Deployment,Ssis,Sql Server 2012,我已经在我的PC上构建了一个SSIS项目,并且在执行包的同时连接到网络外部的SQL 2012服务器(通过SQL身份验证)。现在是将项目部署到同一台服务器的时候了,但我遇到了麻烦。在执行内置部署向导时,我输入了服务器名称(就像我输入它以使用连接管理器连接到数据库一样),并得到一个“不受信任的域”错误(它需要Windows身份验证而不是SQL身份验证) 我认为在项目中使用参数来设置特定于环境的值也可能是相关的 如何将SSIS项目部署到网络外部的SQL Server 我还应该补充一点,在我的搜索中,我

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

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

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


我还应该补充一点,在我的搜索中,我确实遇到过一个人,他在使用VPN连接(没有发布解决方案)时很难做到这一点,这就是通常的做法吗?

您有3个工具可用于将.ispac文件部署到SSIDB目录中

  • ISDeploymentWizard.exe
  • TSQL
  • 您已经在使用该向导,但由于身份验证问题,该向导无法工作。我想即使你用你妈妈的方法,你仍然会遇到身份验证问题。这就剩下了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
    
    我有一个用于命令提示符(如上)、Visual Studio、SSMS、PowerShell、PowerShell ISE和其他一些需要在其域中工作的专业应用程序


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

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

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


    希望有帮助。

    这可能是DNS问题吗?ie内部服务器名称与外部发布的名称不同?项目部署模型(新)或包部署(旧)?@比尔:谢谢您的输入。我是否必须使用外部名称从本地计算机进行部署(SQL Server位于网络之外)?@billinkc:我的理解是,鉴于我使用的是参数,我需要使用项目部署。我没有别的偏好。该项目中只有一个包将在服务器上执行,因此如果我可以使用包部署,我很乐意这样做。非常感谢。我将代码复制到SQLCMD模式查询窗口中,替换了ispac文件位置(我还将setvar isPacPath语句移到顶部,以消除未定义的变量错误)。执行该查询时,我得到一个“无法大容量加载,因为文件…无法打开。操作系统错误代码3(系统找不到指定的路径)。”我可以将相同的位置粘贴到windows资源管理器中,并打开部署向导,因此它是有效的。我几个小时后就要去度假了,但我一回来就会跟进你的建议。再次感谢。听起来有进步了。这可能仍然归结为SQL用户试图进入文件系统,操作系统需要知道这是谁。不管怎样,耸耸肩,享受你的假期,期待解决这个问题。我就是无法让它工作(即,无法找出它找不到文件的原因),所以我在服务器上创建了一个具有相同参数设置的新项目,然后将包文件复制到服务器并将包导入新项目。虽然不优雅,但确实有效。再次感谢你,不管它值多少钱,我想我所做的编辑会解决你的问题。runas命令将允许您通过外部凭据与远程域通信。几乎[catalog]中存储的所有进程都需要AD身份验证,而不是sql server身份验证;这可能会影响某些部署模型的可行性。这种方法看起来更简单,效果更好
    runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"