无法部署项目。稍后再试。(Microsoft SQL Server,错误:27118)

Ale*_*nko 3 ssis sql-server-2012

我尝试将现有 SSIS 项目的新版本部署到集成服务中

目录和获取错误:

“无法部署项目。稍后再试。(Microsoft SQL Server,错误:27118)”

我在文件系统(驱动器“D:\”)上有新的 .ispac 文件。我试过:

  • 从 SSMS 部署
  • 从命令行
  • 使用 Power Shall 脚本

我得到了同样的错误。

(SQL Server 2012)

Ale*_*nko 5

问题已修复。所以我会尝试描述这个问题的解决方案,也许对某人来说它会很有用并节省时间。一开始,我们收到了来自向导的错误消息:

“无法部署项目。稍后再试。(Microsoft SQL Server,错误:27118)”

让我们看看详细的错误,为此只需要点击“显示技术细节按钮”。在“附加数据”部分,我们可以找到导致此错误的对象。就我而言,它是程序prepare_deploy。这是数据库 SSISDB 的内部存储过程。为了捕捉错误,我在不同的地方使用了语句 RAISERROR,因为这个错误出现在不同的地方。因此我的问题在那里:

IF EXISTS (SELECT [project_id] FROM [internal].[projects]
            WHERE [folder_id] = @folder_id AND [name] = @project_name)
    BEGIN
        RAISERROR(27118, 16, 1) WITH NOWAIT
        RETURN 1                
    END
Run Code Online (Sandbox Code Playgroud)

但是要查看此错误,您应该在以下条件下为真:IF(@project_id IS NULL)请参阅存储过程中较早出现的整个语句:

    SET @project_id = (SELECT [project_id] FROM [catalog].[projects]
                   WHERE [folder_id] = @folder_id AND [name] = @project_name)

    IF(@project_id IS NULL)

    BEGIN
    ...
Run Code Online (Sandbox Code Playgroud)

所以除了模式之外,我们有几乎相同的 SELECT 语句,但结果不同:第一个语句没有给我们任何结果,尽管第二个语句给出了一些结果。
模式[catalog]说我们有一个处理视图。看一下视图:

CREATE VIEW [catalog].[projects]
AS
SELECT     ...

FROM       [internal].[object_versions] ver INNER JOIN
           [internal].[projects] proj ON (ver.[object_id] = proj.[project_id]
           AND ver.[object_version_lsn] = proj.[object_version_lsn]) INNER JOIN
           [internal].[folders] ON proj.[folder_id] = [internal].[folders].[folder_id]
WHERE      (ver.[object_status] = 'C') 
           AND (ver.[object_type]= 20) 
           AND (
                  proj.[project_id] IN (SELECT [id] FROM [internal].[current_user_readable_projects])
                  OR (IS_MEMBER('ssis_admin') = 1)
                  OR (IS_SRVROLEMEMBER('sysadmin') = 1)
                )
Run Code Online (Sandbox Code Playgroud)

显然,要查看此视图​​的某些结果,用户应该具有ssis_admin or sysadmin. 看谁执行程序internal.prepare_deploy

ALTER PROCEDURE [internal].[prepare_deploy]
    ...
WITH EXECUTE AS 'AllSchemaOwner'
AS
Run Code Online (Sandbox Code Playgroud)

最后,检查AllSchemaOwner数据库 SSISDB 中用户的权限:

在此处输入图片说明

Bingo,我们没有适当的权限从 view 中查看数据[catalog].[projects]。只需将用户添加AllSchemaOwner到角色ssis_admin和问题就消失了。