Ale*_*nko 3 ssis sql-server-2012
我尝试将现有 SSIS 项目的新版本部署到集成服务中
目录和获取错误:
“无法部署项目。稍后再试。(Microsoft SQL Server,错误:27118)”
我在文件系统(驱动器“D:\”)上有新的 .ispac 文件。我试过:
我得到了同样的错误。
(SQL Server 2012)
问题已修复。所以我会尝试描述这个问题的解决方案,也许对某人来说它会很有用并节省时间。一开始,我们收到了来自向导的错误消息:
“无法部署项目。稍后再试。(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和问题就消失了。
| 归档时间: |
|
| 查看次数: |
6301 次 |
| 最近记录: |