部署SSIS(SQL Server 2012中)项目外网(Deploying SSIS (SQL S

2019-07-18 13:46发布

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

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

如何部署一个SSIS项目外网的一个SQL Server?

我还要补充一点,在我的搜索,我没碰到过有人谁是挣扎的VPN连接(无分辨率发布)要做到这一点,是如何这通常做什么?

Answer 1:

你有3个刀具的文件部署.ispac到SSISDB目录。

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. 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

如果你参加了SQL传递峰会2012会议上,我演示了这个在我的谈话2012部署模型 ,但我没有覆盖参数的一部分。 我认为,最后一次通话是正确的,但我没有验证它。 我已经挂供程序调用的文件,这样就可以定制它以您的特定需求。

样品的PowerShell实现

更新2013年8月

我学会了在我的当前客户端的东西。 我们有我们的笔记本电脑被连接到主域。 我们有客户的广告网络上的帐户。 每当我需要在客户端的世界“做”什么,我需要启动我的过程,并指示它提出我的“洋”证书。 是什么让这一切成为可能的运行方式 。 备用参考

我创建了一套使每次发射过程中,我需要批处理文件。 他们采取的形式

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

我有一个命令提示符(上图),Visual Studio中,SSMS,PowerShell的,PowerShell的ISE和需要与他们的域名在其他一些特殊的应用程序。

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



Answer 2:

当面对类似的问题,我用的一个方法是:

  1. 建于2012 VS项目。
  2. 在“* .ispac”文件复制到远程服务器。
  3. 双击该“* .ispac”,通过选择目标服务器和目录运行该向导。
  4. 具有所需的访问级别和角色的Windows帐户连接,验证该包。

唯一的问题是,如果你有多个参数,你的包是加密的,你将无法将其导入(这从警告消息显示,我没有与测试,并加密包)。

希望能帮助到你。



文章来源: Deploying SSIS (SQL Server 2012) Project Outside Network