如何解決 SSIS Excel 連接管理器錯誤 0xC0209303?
我創建了一個將 excel 文件導入 SQL Server 表的 SSIS 包。
當我在我的機器上本地執行 SSIS 包時,它執行沒有任何問題,但是當我在將安排包的伺服器上執行它時,我收到以下錯誤(從文本文件我輸出錯誤以使用 SSIS 日誌記錄)。
經過研究,我能找到的唯一建議是將 Run64BitRuntime 屬性設置為 false,我這樣做了,但仍然沒有運氣。我懷疑這是導致我的錯誤的原因,因為錯誤沒有指定任何關於 64 位的內容(就像我發現的文章中的情況一樣)。
我還認為可能是伺服器沒有適當的 Excel 驅動程序,但我不認為是這種情況,因為通常錯誤消息會說明驅動程序未註冊。
我目前無權遠端訪問伺服器。我只能將包上傳到文件夾,然後由應用程序執行,所以我能看到的唯一錯誤消息是我創建的文本錯誤日誌中的內容。
錯誤程式碼 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。對連接管理器“Envision”的 AcquireConnection 方法呼叫失敗,錯誤程式碼為 0xC0209303。在此之前可能會發布錯誤消息,其中包含有關 AcquireConnection 方法呼叫失敗原因的更多資訊。
“Envision”是我的 Excel 連接管理器的名稱。
我使用表達式填充 Excel 文件路徑和連接字元串。
連接字元串表達式如下所示:
“提供者=Microsoft.ACE.OLEDB.12.0;數據源=”+@
$$ User::SourceFilePath $$+";擴展屬性="EXCEL 12.0 XML;HDR=YES";" SSIS Pacakge 由 Windows 使用者名/帳戶執行。我認為它可能是一個網路服務帳戶。(BDS_sprtIIS)
是否有人對如何解決僅在我的本地電腦上工作但在將部署包的實際伺服器上不工作的包的這個問題有任何解決方案或建議?
我在另一個論壇上找到了以下答案,這可能是導致我的問題的原因嗎?他們基本上是說 Excel 連接管理器出於某種原因嘗試訪問使用者臨時文件夾,如果它無權訪問該文件夾,那麼它將失敗:
我還注意到 Microsoft.JET.OLEDB.4.0 驅動程序將嘗試讀取登錄使用者配置文件下的臨時目錄。
.
…我們使用較低級別的域帳戶執行我們的 SQL 代理,並使用代理帳戶執行我們的 SSIS 包。你是正確的,因為 Procmon 也為我證實了這一點。我為配置文件的臨時目錄(C:\Documents and Settings\SQLAgentDomainAccount\Local Settings\Temp)提供了代理帳戶權限,並且它起作用了!
我沒有使用 SQL Server 作業或代理帳戶。該程序包很可能由 Windows 帳戶通過命令行腳本簡單地執行。
Windows 帳戶可以訪問該文件,但我不確定它是否可以訪問它的“TEMP”文件夾(我從未在包中引用它,所以我不知道為什麼它需要訪問該文件夾) …
有 2 個問題阻止程序包在伺服器上執行。以下是我發現的 2 個問題和解決方案。
- 預設情況下,該程序包由使用 64 位 DTexec 實用程序的應用程序執行,但該程序包需要使用該實用程序的 32 位版本執行,才能通過 Excel 連接管理器正確訪問 Excel 文件。
我創建了一個“包裝器”SSIS 包,它使用呼叫 32 位(而不是 64 位)DTExec 實用程序的執行程序任務並傳遞命令以打開原始包。
2. 我還需要安裝 32 位版本的Microsoft Access Database Engine 2010 Redistributable。
延伸閱讀: