2015-09-09 50 views
0

我试图从存储过程中执行DTS包(我们称之为'MY_DTS')。没有成功。使用存储过程中的xp_cmdshell调用dtsrun - Microsoft Jet数据库引擎无法打开文件错误

这里是我的程序代码:

CREATE PROCEDURE [dbo].[RUN_DTS] 
    @DTSName nvarchar(4000) 
AS 

DECLARE @Command AS nvarchar(4000) 
SET @Command = 'dtsrun /S "(local)" /N "' + @DTSName + '" /W "0" /E' 

SELECT @Command 

EXEC master..xp_cmdshell @Command 
GO 

我使用存储过程如下:

EXEC HURT.dbo.RUN_DTS @DTSName = 'MY_DTS' 

在执行过程中它打印预期的命令:

dtsrun /S "(local)" /N "MY_DTS" /W "0" /E 

和结果具有以下错误:

Error string: The Microsoft Jet database engine cannot open the file '\\network_drive_server_ip\path_to_important_file'. 
It is already opened exclusively by another user, or you need permission to view its data. 
Error source: Microsoft JET Database Engine 
Help file:  
Help context: 5003051 

我该如何解决此问题?

要添加一些观点:

有两台服务器:

  1. Windows Server 2003中运行SQL Server 2000我连接到该服务器,并远程执行使用查询分析器的所有操作(以运行SQL语句)。我将它称为数据库服务器。

  2. 网络驱动器服务器。

MY_DTS驻留在数据库服务器上,引用包含需要读取的important_file的网络驱动器。

从调用命令行内相同的命令succeded:

>dtsrun /S "(local)" /N "MY_DTS" /W "0" /E 
DTSRun: Package execution complete. 

而且我敢肯定,99%没有该文件在执行存储过程的时刻打开。我已经使用Process Explorer v16.05确认了它:没有找到句柄或DLL。所以我认为这是权限的事情。

回答

0

这也可能是一个权限问题。您是否可以批量导入该网络共享中的文件?如果没有,那么你需要确保一些东西: 1.在本地复制文件并尝试运行DTS包。如果这可行,那么这主要是一个权限问题。 2.如果我之前建议的BULK IMPORT不起作用,那么您可以使用article中提到的步骤使其工作。 3.如果以上都不起作用,那么您从中导入的服务器/机器上的进程监视器跟踪应该会显示一个打开的句柄或拒绝的访问。

相关问题