搜尋本站文章

2011-12-20

SSIS:64 位元 Excel 2010 與 BIDS 開發工具

SSIS 2008、SSIS 2008 R2,使用的開發工具是:Visual Studio 2008,也就是 SQL Server Business Intelligence Development Studio(BIDS)。

但目前 Visual Studio 2008 僅有 32 位元版本,因此,BIDS 也是 32 位元版本,這表示也僅能使用 32 位元版本的 OLE DB 驅動程式。

雖然在 Excel 2010 版本上,提供了 32 位元與 64 位元版本的 OLE DB 驅動程式。

Excel 2007、Excel 2010 不是使用 Microsoft Jet 4.0 驅動程式,而是使用 Access Database Engine (ACE) OLE DB 驅動程式。

但在使用 Visual Studio 2008 開發封裝上,是無法直接使用 64 位元版本的 OLE DB 驅動程式。



可能的作法:

(一) 在 SSIS 伺服器

在 SSIS 伺服器上安裝 64 位元版本的 Access Database Engine 2010 (ACE) OLE DB 驅動程式。

(二) 在開發人員環境


(1) 若是安裝 32 位元版本的 Access Database Engine (ACE)

這會是平順地開發 SSIS 封裝的作法。

雖然是在 32 位元環境上開發,但若是 BIDS 上執行此 SSIS 封裝,預設會使用 64 位元環境來執行封裝,請設定屬性:Run64BitRuntime 為 False。

-- 01_調整為 32 模式來執行封裝



若是將封裝部署到 SSIS 伺服器上,是無需調整,可以使用 64 位元模式來執行此封裝。


在 BIDS 上執行此 SSIS 封裝,預設會使用 64 位元環境來執行,請設定屬性:Run64BitRuntime 為 False。

--

若仍是使用預設的 64 位模式來執行,將遭遇到以下的錯誤訊息:

[myOrders_Excel_2010 [1]] 錯誤: SSIS 錯誤碼 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。
對 "myOrders_Excel_2010" 連接管理員呼叫 AcquireConnection 方法失敗,錯誤碼為 0xC0209303。

在此之前可能已公佈過錯誤訊息,說明 AcquireConnection 方法呼叫為何失敗的詳細資訊。

[SSIS.Pipeline] 錯誤: 元件 "myOrders_Excel_2010" (1) 驗證失敗,傳回錯誤碼 0xC020801C。

[連接管理員 "myOrders_Excel_2010"] 錯誤: SSIS 錯誤碼 DTS_E_OLEDB_NOPROVIDER_64BIT_ERROR。
要求的 OLE DB 提供者 Microsoft.ACE.OLEDB.12.0 並未註冊 -- 可能是沒有 64 位元提供者可用。

錯誤碼: 0x00000000。
有 OLE DB 記錄可用。來源: "Microsoft OLE DB Service Components"  Hresult: 0x80040154  描述: "類別未登錄"。

-- 06_未安裝 64 位元驅動程式,卻使用 64 模式來執行





(2) 若是安裝 64 位元版本的 Access Database Engine (ACE)

由於 Visual Studio 2008 不支援 64 位元,但是可以採用變通的開發封裝之作法:

1. 使用「匯入和匯出資料 (64 位元)」來建立此封裝的雛形。
2. 再使用 BIDS 開啟與設計此封裝,應該仍是可以正常運作,但有以下的注意事項。

-- 02_使用「匯入和匯出資料 (64 位元)」



若使用 BISD 開啟此封裝,編輯使用 Access Database Engine 2010 OLE DB 驅動程式的資料來源,將遭遇到以下的錯誤訊息:

錯誤位置 新的封裝 [連接管理員 "SourceConnectionOLEDB"]: SSIS 錯誤碼 DTS_E_OLEDB_NOPROVIDER_ERROR。

要求的 OLE DB 提供者 Microsoft.ACE.OLEDB.12.0 並未註冊。錯誤碼: 0x00000000。
有 OLE DB 記錄可用。

來源: "Microsoft OLE DB Service Components"  Hresult: 0x80040154  描述: "類別未登錄"。

錯誤位置 資料流程工作 1 [來源 - Orders [1]]: SSIS 錯誤碼 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。
對 "SourceConnectionOLEDB" 連接管理員呼叫 AcquireConnection 方法失敗,錯誤碼為 0xC0209302。

在此之前可能已公佈過錯誤訊息,說明 AcquireConnection 方法呼叫為何失敗的詳細資訊。

------------------------------
其他資訊:

發生例外狀況於 HRESULT: 0xC020801C (Microsoft.SqlServer.DTSPipelineWrap)

-- 03_編輯使用 Access Database Engine 2010 OLE DB 驅動程式的資料來源,所遇到的錯誤訊息



-- 04_進階資訊



-- 05_點選「預覽」的錯誤



--

若是在安裝 64 位元版本的 Access Database Engine 2010 (ACE) OLE DB 驅動程式的環境,使用 BIDS 執行此封裝,卻刻意調整屬性:Run64BitRuntime 為 False。

將遭遇到以下的錯誤訊息:

[來源 - Orders [1]] 錯誤: SSIS 錯誤碼 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。
對 "SourceConnectionOLEDB" 連接管理員呼叫 AcquireConnection 方法失敗,錯誤碼為 0xC0209302。

在此之前可能已公佈過錯誤訊息,說明 AcquireConnection 方法呼叫為何失敗的詳細資訊。

[SSIS.Pipeline] 錯誤: 元件 "來源 - Orders" (1) 驗證失敗,傳回錯誤碼 0xC020801C。

[連接管理員 "SourceConnectionOLEDB"] 錯誤: SSIS 錯誤碼 DTS_E_OLEDB_NOPROVIDER_ERROR。
要求的 OLE DB 提供者 Microsoft.ACE.OLEDB.12.0 並未註冊。錯誤碼: 0x00000000。

有 OLE DB 記錄可用。
來源: "Microsoft OLE DB Service Components"  Hresult: 0x80040154  描述: "類別未登錄"。

-- 07_已安裝64位元驅動程式,卻刻意用32位元模式來執行




觀念說明

雖然 Visual Studio 2008 僅有 32 位元版本。
但在使用 BIDS 來執行 SSIS 封裝時,所使用的程式是:

(1) DtsDebugHost.exe

此為 64 位元版本。

(2) DtsDebugHost.exe * 32

此為 32 位元版本。

-- 08_使用32位元模式,「Windows 工作管理員」



-- 09_使用64位元模式,「Windows 工作管理員」




依據預設值:

若作業系統上已經先安裝了 32 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」,是無法額外安裝 64 位元版本的「Microsoft Access Database Engine 2010 可轉散發套件」。

同樣的,若是先安裝了 64 位元版本後,也無法再將安裝 32 位元版本。

但之前曾經嘗試過以下的作法:

1. 先安裝 32 位元版本 Office 2007。
2. 移除 32 位元版本 Office 2007。
3. 再安裝 64 位元版本 Office 2010。


或是

1. 先安裝 32 位元版本的Microsoft Access Database Engine 2007 可轉散發套件。
2. 再安裝 64 位元版本的Microsoft Access Database Engine 2010 可轉散發套件。


或許,就可以讓 32 位元與 64 位元的 「Microsoft Access Database Engine 2010 可轉散發套件」並存在同一套作業系統上。



參考資料:

檢查是否已經安裝 「Microsoft Access Database Engine 2010 可轉散發套件」驅動程式;Microsoft Access Database Engine 2010 Redistributable
http://sharedderrick.blogspot.com/2011/08/microsoft-access-database-engine-2010.html

SSIS:使用 Excel 2010 (例如:附檔名為 xlsx)為來源或是目的地
http://sharedderrick.blogspot.com/2011/10/ssis-excel-2010-xlsx.html

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

Service Pack 1 for Microsoft Access Database Engine 2010 (KB2460011) 32-bit Edition - 中文(繁體)
http://www.microsoft.com/downloads/zh-tw/details.aspx?FamilyID=b663a458-2fe9-4d45-9c2d-992298fe4434