2015-09-09 46 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.如果以上都不起作用,那麼您從中導入的服務器/機器上的進程監視器跟蹤應該會顯示一個打開的句柄或拒絕的訪問。

相關問題