20

我試圖建立一個存儲過程作爲一個SQL Server代理作業和它給我下面的錯誤,無法批量加載,因爲文件無法打開。操作系統錯誤代碼3

無法批量加載,因爲文件「P:\ FILE.CSV」可能不被打開。操作系統錯誤代碼3(無法檢索此錯誤的文本,原因:15105)。 [SQLSTATE 42000](錯誤4861)

有趣的是存儲過程時,我手動執行它工作得很好。

驅動病人:從LINUX通過Samba共享的Windows SQL Server上的共享驅動器,它是由執行以下命令來設置,

EXEC xp_cmdshell的淨使用病人:‘\ lnxusanfsd01 \數據’密碼/用戶:用戶名/持久性:是的

任何幫助將高度讚賞

+1

看起來像一個權限問題。SQL Server代理通常以不同的用戶身份運行,並且與手動運行時相比具有不同的權限。如果文件在本地目錄中,代理是否工作?代理是否還運行「net use」命令? – acfrancis

+0

代理未運行net use命令。我還沒有測試過,因爲我沒有RDP訪問SQL Server – user1345260

+0

那麼,如果將「net use」cmd添加到代理作業中,它是否工作?沒有這個,我很確定''P:''驅動器只能在你的用戶名的Windows會話中可用,而不是代理的。 – acfrancis

回答

0

這可能是一個權限問題,但你需要確保嘗試下列步驟來解決:

  • 將一個本地驅動器上的文件,並查看作業工程(你不一定需要RDP訪問,如果你能在數據庫服務器上本地工作站上的驅動器盤符映射到一個目錄)
  • 把文件上一個不需要用戶名和密碼(允許每個人都可以讀取)並使用UNC路徑(\ server \ directory \ file.csv)的遠程目錄
  • 配置SQL作業以您自己的用戶名運行
  • 配置SQL作業運行爲sa,並在前後添加net usenet use /delete命令

記得撤銷任何更改(特別是作爲sa運行)。如果沒有其他方法可行,則可以嘗試將批量加載更改爲在數據庫服務器或其他安裝了bcp的服務器上運行的計劃任務。

+0

如何將SQL作業配置爲以您自己的用戶名身份運行?我去登錄,在UserMapping期間,我選擇了msdb併爲SQLAgent提供了權限。是對的嗎? – user1345260

+0

我目前無權訪問SQL Server,但取決於您的版本,它可能看起來像這樣http://i31.tinypic.com/zjdqh3.jpg – acfrancis

+0

我嘗試使用SQL Server身份驗證來運行SQL作業,但出現以下錯誤: 服務器主體「sqldev01」無法在當前安全上下文中訪問數據庫「mydatabase」。 sqldev01帳戶有db_owner訪問mydatabase,我試圖插入csv文件。它還具有對Master數據庫的db_owner訪問權限,並且具有Bulkadmin角色。請幫忙 – user1345260

35

我不知道,如果你解決了這個問題,但我有同樣的問題,如果實例是本地的,你必須檢查訪問文件的權限,但如果你是從您的計算機訪問到服務器(遠程訪問)你必須指定服務器的路徑,這樣就意味着包括在服務器目錄中的文件,這解決了我的情況下

例如:

BULK INSERT Table 
FROM 'C:\bulk\usuarios_prueba.csv' -- This is server path not local 
WITH 
    (
    FIELDTERMINATOR =',', 
    ROWTERMINATOR ='\n' 
); 
+0

謝謝,你指出了我的問題,並解決了我15分鐘的'文件在那裏,你爲什麼不讀它?'。 –

+0

歡迎@DominicMcDonnell!很高興它有幫助! – DuSant

+0

感謝@DuSant文件的權限是什麼? - 右鍵單擊​​ - >安全性 - >編輯 - >誰擁有完全控制權。謝謝! –

2

爲了保持這種簡單,我只是改變了目錄,從我正在將數據導入服務器上的本地文件夾。

我曾位於一個共享文件夾中的文件,我只是複製我的文件到「C:\ TEMP \報告」我的服務器上(更新來自新文件夾的查詢BULK INSERT)。代理任務成功完成了很長一段時間,我能夠通過BULK代理作業自動插入後:)

最後。

此致敬禮。

1

我建議P:驅動器未映射的SQL Server已經開始爲帳戶。

相關問題