SQL奇怪的超时问题

时间:2010-05-14 23:17:23

标签: sql-server exec

好的,所以我正在尝试创建一个调用扩展过程的过程。我收到以下错误:

Msg 121, Level 20, State 0, Line 0
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

即使是最简单的测试,我也会收到错误:

CREATE PROCEDURE Test
AS
BEGIN

EXEC xp_cmdshell 'dir *.exe'

END

但是,如果我只是单独运行xp_cmdshell 'dir *.exe',它就会起作用。

这是在群集SQL 2005服务器上运行的。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

在创建程序或执行程序时是否收到错误?

如果在执行时获得它,那么权限可能存在一些问题。因为在更高版本的sql server中,调用xp_cmdshell被严格锁定,并且默认情况下未在表面区域配置中启用,所以我可以看到它的潜力。

你是怎么称呼SP的?如果您正在使用动态SQL,那么请知道它是以调用者的权限执行的,而不是SP创建者。

您是否需要在SP中添加前缀为master.dbo.xp_cmdshell

您是否在SP创建或SP执行中尝试过EXECUTE AS

另外,根据我的经验,传输级错误有时不是由于服务器的问题,而是客户端缓存其连接对象超过服务器丢弃它的时间(从而使连接对象无效)的问题。鉴于你可能在最初连接的短时间内运行它,听起来这不是确切的问题,但你可能会遇到某种代理/防火墙/网络过滤器问题,因为它丢弃了数据包检测数据包中的某些关键字?我知道这是一个很长的镜头,但我不得不问......