2012-05-02 74 views
0

的Windows Server 2008 R2 SP1 64位, SQL Server 2008中的x64 SP3, Access數據庫引擎的x64 SP1錯誤查詢使用Microsoft.ACE.OLEDB.12.0

我已經鏈接的服務器,從網絡共享DBF文件:

EXEC master.dbo.sp_addlinkedserver @server = N'dbf2', @srvproduct=N'dbf2', @provider=N'MSDASQL', @provstr=N'DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};' 

當查詢從本地磁盤一切DBF文件是OK:

select * from openquery(dbf2, 'select * from c:\\V4C8MA6.dbf') a 

但是從網絡共享查詢時

select * from openquery(dbf2, 'select * from \\\\gefest\\upload\\V4C8MA6.dbf') a 

我已經得到了錯誤:

Msg 7399, Level 16, State 1, Line 6 
The OLE DB provider "MSDASQL" for linked server "dbf2" reported an error. The provider did not give any information about the error. 
Msg 7350, Level 16, State 2, Line 6 
Cannot get the column information from OLE DB provider "MSDASQL" for linked server "dbf2". 

我已經嘗試不同的變體來描述的路徑:[], 「」,``,\ 「\」,... 一切正常與nework共享訪問,sql服務器帳戶需要訪問權限。但是......

如何使它工作?

添加於04 2012年5月:

xp_cmdchell完美列出的目錄。

這是我發現: 我創建的鏈接與sprovstr服務器指示文件的位置:

@provstr=N'DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};dbq=\\gefest\upload' 

,如果我連接到使用SQL 服務器授權在SQL Server的工作原理。

這是使用DBQ當什麼procmon中顯示:

日期&時間:5/4/2012上午09時57分55秒
事件類:文件系統
操作:的CreateFile
結果: 成功
路徑:\\ gefest \上傳\
TID:8588
時間:0。0001988
所需的訪問:讀取屬性
配置:打開
選項:打開重新分析點
屬性:N/A
ShareMode:讀,寫,刪除
AllocationSize:N/A
OpenResult:打開

這是表示在查詢路徑時:


日期&時間:5/4/2012上午9時58分53秒
事件類:文件系統
操作:的CreateFile
結果:對象路徑無效
路徑:\\ gefest \上傳\
TID:8588
時間:0.0000819
所需的訪問:讀取屬性
配置:打開
選項:打開重新分析點
屬性:N/A
ShareMo de:讀取,寫入,刪除
AllocationSize:n/a

爲什麼sql server在第一次查詢時收到所需的共享訪問權限,而不是第二次?

第三和第四個變量是連接到使用Windows驗證服務器時:使用DBQ


日期&時間:5/4/2012上午10時02分54秒
事件類:文件系統
操作:的CreateFile
結果:拒絕訪問
路徑:\\ gefest \ upload \
工商註冊號:8588
持續時間:0。0031837
所需的訪問:讀取屬性
配置:打開
選項:打開備份,打開重新分析點
屬性:N/A
ShareMode:讀,寫,刪除
AllocationSize:N/A
模擬:GAZ \ kozlovai

指示在查詢路徑:


日期&時間:5/4/2012上午10點02分20秒
事件類:文件系統
操作:的CreateFile
結果:對象路徑無效
路徑:\\ gefest \上傳\
TID:8588
時間:0.0000378
所需的訪問:讀取屬性
配置:打開
選項:打開備份,打開重新分析點
個屬性:N/A
ShareMode:讀,寫,刪除
AllocationSize:N/A
模擬:連接到共享時GAZ \ kozlovai

SQL Server的模仿。並且此帳戶'GAZ \ kozlovai'可以完全訪問共享,但sql server仍然無法打開該文件...

回答

0

檢查以查看運行查詢的用戶標識是否具有對temp的讀寫權限服務器上的文件夾。這是因爲SQL Server將在調用用戶的上下文中爲查詢創建臨時文件,而不是SQLServer進程帳戶。

編輯:我記得這個問題至少有一些情況只是通過UNC託管的股票產生的,所以它不是一個在本地參考時會發生的鉛管收縮。

只是爲了笑容,火起來的XP_CMDSHELL並執行「DIR \\ SERVER \ SHARE \文件夾」,並確定您可以在SQL Server中通過UNC談談這條道路。如果不是,您仍然有一個訪問問題需要克服。

最後,如果一切都失敗了,並且您有登錄訪問服務器的權限,我會啓動Process Monitor的副本並在查詢觸發時監視網絡IO問題。

+0

請loook什麼我加04 2012年5月 – Boogier

+0

剛剛看過您發佈的額外信息,以及東西浮現在腦海 - 奇怪,因爲這可能聽起來,是有你的域實現了漫遊配置文件的任何機會,如果有的話「標準」Windows文件夾被重定向到網絡共享? –

+0

另一個想法 - 是將映射到服務器的C:\驅動器的「gefest」服務器上的「上載」共享?誠然,這是一個很長的過程,但如果是這樣,您可能會遇到對網絡中系統驅動器根目錄中文件活動的限制。作爲測試,您可能會將.dbf文件移至其他文件夾,併爲您創建輔助共享以測試您的查詢。 –

相關問題