【问题标题】:Timeout on DTEXEC execution - but only when called from stored procedureDTEXEC 执行超时 - 但仅在从存储过程调用时
【发布时间】:2012-04-12 08:25:12
【问题描述】:

以下问题困扰了我一段时间:

我有一个 dtsx-package 用于处理一些接口。我在一个存储过程中调用它,如下所示:

SET @v_statement = 'DTEXEC /FILE "' + @v_if_ssis_package + '" /SET \Package.Variables[User::message_number].Properties[Value];' + CAST(@i_message_number AS VARCHAR(20))
                + ' /ConfigFile "' + REPLACE(@v_if_ssis_package, '.dtsx', '.xml')  + '"'

EXECUTE AS USER = 'shell';  

INSERT INTO #SSISResult
EXEC @v_ssis_returncode = xp_cmdshell @v_statement;

据我所知,Shell 用户拥有能够运行 xp_cmdshell 调用的一切。尽管如此,我在运行存储过程时遇到了以下错误:

Microsoft (R) SQL Server Execute Package Utility Version 10.50.1600.1 for 32-bit 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始:10:12:28 错误:2012-04-12 10:12:59.11 代码:0x00000000 源:脚本任务脚本描述:超时已过期。操作完成前超时时间已过或服务器没有响应...

这是一直困扰我的事情。如果我运行与独立查询完全相同的事情(如下所示),它运行得很好。对这里发生的事情有什么想法吗?

EXECUTE AS USER = 'shell';
EXEC xp_cmdshell 'dtexec /FILE "C:\mypackage.dtsx" /SET \Package.Variables[User::message_number].Properties[Value];48644 /ConfigFile "C:\mypackage.xml"'

非常感谢任何可以就这个问题给我一些建议的人。

【问题讨论】:

    标签: sql timeout ssis xp-cmdshell


    【解决方案1】:

    可能是权限错误

    快速猜测:

    运行GRANT EXECUTE ON xp_cmdshell TO shell

    也许是EXECUTE AS login = 'shell' 而不是用户

    【讨论】:

    • 以登录身份执行似乎不适用于该用户,但我目前正在使用以用户身份执行,这确实有效。 Shell 用户已经有权限执行 xp_cmdshell
    • 我认为它必须在登录级别才能工作。你能试试吗?也许用户 shell 被映射到一个不同名称的登录名
    • 使用我的 shell 用户登录我的 sql server 并重新执行查询。它按预期运行。调用存储过程仍然让我超时..
    • 它被映射到一个专门为此目的的 shell 用户。用户拥有所需数据库的所有者权限和主服务器的公共权限。 ps:非常感谢您抽出宝贵时间对此进行调查。
    • 好的,我会尝试它们:1) 运行 DTEXEC 以外的命令(如 dir c:) 以查看问题是否与 dtexec 命令有关。 2) 使用 sa 用户运行它,看看它是否是权限问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2019-04-22
    • 2012-06-05
    相关资源
    最近更新 更多