Reporting Service 2016 連線Oracle 9i DB的解法

在微軟的online document中有提到想要在Reporting Service 2016或2017的版本使用Oracle關聯式資料庫的話 , 就必須採用Oracle Client 12c或以上的用戶端元件版本,而Oracle Client 12c 的版本已經不支援Oracle 9i以下的DB Server了,想要使用就要升級DB或是使用其他方式來連線。

 

在微軟的online document中有提到想要在Reporting Service 2016或2017的版本使用Oracle關聯式資料庫的話 , 就必須採用Oracle Client 12c或以上的用戶端元件版本,而Oracle Client 12c 的版本已經不支援Oracle 9i以下的DB Server了,想要使用就要升級DB或是使用其他方式來連線。

如果你跟我一樣有面臨到公司想要升級Reporting Service 2016以上的版本 , 但因為各種原因(我們公司是因為有某些單位正在使用Oracle ERP,而要讓Oracle 9i DB升級這件事情,要考慮的事情太多,所以應該是不太可能)。

基本上有很多種做法,可以新建立一個Oracle 11g以上的DB,使用ETL的方式,把9i DB的資料轉到11g DB去,或是也可以建立DB Link,透過11g以上的 DB來連到9i 以下的DB 。

我最後的做法,因為考量到要在同一台Reporting Service Server可以同時Access Oracle 11g與9i的DB,並且不採用DB Link,所以我透過了.net 4.0之後的版本提供的Oracle Data Access Components (ODAC) 11.2 XCopy 元件來同時Access 11g與9i DB。

Reporting Service 2016連線的方式則是透過OLE DB Provider, OLE DB再透過 ODAC 來連線到Oracle DB,這樣我就能打破一台Server同時間只能使用一種Oracle Client的版本連線DB的問題,但說穿的ODAC只是把不同版本的Oracle Client的driver封裝在ODAC而已。

下面就開始介紹步驟該怎麼做,我的做法則是參考這個網址來的,只不過他的用途是用在SSDT,我則是Repoting Service 2016

https://blogs.msdn.microsoft.com/dataaccesstechnologies/2018/03/26/configure-oracle-data-source-for-sql-server-reporting-services-ssdt-and-report-server/

首先我們要先去Oracle下載64bit ODAC 11.2 XCopy(當然也有32bit版本,看自己需求) 

http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html

下載完以後解壓縮,執行install

執行下列指令

C:\app\x64\product\11.2.0\client_1\odp.net\bin\2.x>oraprovcfg /action:gac /providerpath:C:\app\x64\product\11.2.0\client_1\odp.net\bin\2.x\Oracle.DataAccess.dll

請記得設定環境變數中的path路徑,並將你的tnsnames.ora檔放入該路徑。

_

在使用Reporting Service連線前先註冊OLE DB元件。

接著就是打開你的Reporting Service 2016首頁,新增一個Data Source,類型選擇OLE DB,帳密敲完應該測試連線就會成功連接了。