操作系統:Oracle Linux Server release 6.5 64bit
BIEE版本:12.2.1.1.0
同11g一樣,12c雖然biee自帶了datadirect的mysql驅動,但是該驅動只能連接企業版的mysql,並不支持社區版的的mysql。
所以我們只能採用mysql自己的odbc驅動。有關驅動的下載以及unixODBC的版本要求,具體請參考(BIEE 11g linux下連接mysql數據源)中的內容。
總結就是
unixODBC一定要在unixODBC-2.2.14-15.2.x86_64.rpm及以上
mysql driver 可以使用5.3.6
http://dev.mysql.com/downloads/connector/odbc/
注意匹配正確的操作系統版本
在安裝好unixODBC和mysql驅動之後,接下來就應該進行相關的配置了。
可以參考如官方文檔(Configuring Database Connections Using Native ODBC Drivers)
http://docs.oracle.com/middleware/12211/biee/BIEMG/GUID-CCDD9782-BC2A-497A-8ED0-AECA2ECFB3AE.htm#config_native_dbs
總結下來就是:
1.配置環境變量
修改$BI_DOMAIN/config/fmwconfig/bienv/OBIS目錄的obis.properties文件,向其中添加如下內容:
LD_LIBRARY_PATH=/usr/lib64
2.配置ODBC.ini
修改$BI_DOMAIN/bi/config/fmwconfig/bienv/core目錄下的odbc.ini
添加如下內容:
[mysql_test]Driver = /usr/lib64/libmyodbc5w.so
Description = Connector/ODBC 5 Driver DSN
SERVER = 192.168.5.1
PORT = 8803
Database = demo
OPTION =
SOCKET = /tmp/mysql.sock
IANAAppCodePage = 106
Charset = UTF8
但是你會發現使用官方的步驟並不能成功配置mysql數據源,當你從biee向mysql數據源發出查詢的時候,bi server就會掛掉
這是爲什麼呢?
通過查看bi server的日誌($BI_DOMAIN/bi/servers/obis1/logs/obis1.out)你看發現如下內容
<Nov 4, 2016 10:02:18 PM CST> <INFO> <NodeManager ComponentManager> <LD_LIBRARY_PATH=/u01/app/Oracle/Middleware/Oracle_Home/bi/modules/oracle.bi.datadirect.odbc/8.0.1/lib:/u01/app/Oracle/Middleware/Oracle_Home/bi/modules/oracle.bi.datadirect.odbc/7.1.5/lib:/u01/app/Oracle/Middleware/Oracle_Home/bi/bifoundation/server/bin:/u01/app/Oracle/Middleware/Oracle_Home/bi/bifoundation/web/bin:/u01/app/Oracle/Middleware/Oracle_Home/bi/clients/Essbase/EssbaseRTC/bin:/u01/app/Oracle/Middleware/Oracle_Home/bi/lib:/u01/app/Oracle/Middleware/Oracle_Home/lib:/u01/app/Oracle/Middleware/Oracle_Home/oracle_common/adr:/u01/app/Oracle/Middleware/Oracle_Home/oracle_common/lib:/usr/lib:/lib:/usr/lib64::::/u01/app/Oracle/Middleware/Oracle_Home/wlserver/server/native/linux/x86_64:/u01/app/Oracle/Middleware/Oracle_Home/wlserver/server/native/linux/x86_64/oci920_8>
不知道大家有沒有看出來什麼問題?就是我們在obis.properties中配置的/usr/lib64這個目錄存在於LD_LIBRARY_PATH變量值的中間,即在datadirect驅動路徑之後。
由於datadirect和mysql odbc使用的是同樣的驅動管理器,誰的lib在前,誰的在後就有講究;我們需要把mysql的lib path放到前面去
即變成如下
LD_LIBRARY_PATH=/usr/lib64:/u01/app/Oracle/Middleware/Oracle_Home/bi/modules/oracle.bi.datadirect.odbc/8.0.1/lib:/u01/app/Oracle/Middleware/Oracle_Home/bi/modules/oracle.bi.datadirect.odbc/7.1.5/lib:/u01/app/Oracle/Middleware/Oracle_Home/bi/bifoundation/server/bin:/u01/app/Oracle/Middleware/Oracle_Home/bi/bifoundation/web/bin:/u01/app/Oracle/Middleware/Oracle_Home/bi/clients/Essbase/EssbaseRTC/bin:/u01/app/Oracle/Middleware/Oracle_Home/bi/lib:/u01/app/Oracle/Middleware/Oracle_Home/lib:/u01/app/Oracle/Middleware/Oracle_Home/oracle_common/adr:/u01/app/Oracle/Middleware/Oracle_Home/oracle_common/lib:/usr/lib:/lib::::/u01/app/Oracle/Middleware/Oracle_Home/wlserver/server/native/linux/x86_64:/u01/app/Oracle/Middleware/Oracle_Home/wlserver/server/native/linux/x86_64/oci920_8>
怎麼才能這樣呢?
我們必須得知道設置這個先後順序,通過觀察日誌可以得知,8.0.1的datadirect lib path是最後設置的,那麼我們只需要知道是哪裏完成這個設置的即可。
那怎麼才能知道呢?
很簡單,使用如下命令查找即可
find /u01/app/Oracle -type f -name "*.properties" | xargs grep "8.0.1"
這樣會得到一堆文件,我們只需要修改其中的一個文件即可
/u01/app/Oracle/Middleware/Oracle_Home/bi/modules/oracle.bi.sysman/env/odbc.properties
注意:爲什麼我會查找.properties文件,以及知道是oracle.bi.sysman目錄下的這個文件呢?
因爲我先查找到.sh的文件,沒有效果。然後oracle.bi.sysman下面的文件,是從obis1.out中的日誌觀察得出來的 其中有sysman相關的信息。
打開/u01/app/Oracle/Middleware/Oracle_Home/bi/modules/oracle.bi.sysman/env/odbc.properties
注:在12.2.1.2.0版本中修改此文件已經無效,應該修改 ----2016/12/13修改
$FMW_HOME/bi/modules/oracle.bi.datadirect.odbc/8.0.1/odbc.properties
將其中的
LD_LIBRARY_PATH=$BI_PRODUCT_HOME/modules/oracle.bi.datadirect.odbc/8.0.1/lib,$BI_PRODUCT_HOME/modules/oracle.bi.datadirect.odbc/7.1.5/lib
改成
LD_LIBRARY_PATH=/usr/lib64,$BI_PRODUCT_HOME/modules/oracle.bi.datadirect.odbc/8.0.1/lib,$BI_PRODUCT_HOME/modules/oracle.bi.datadirect.odbc/7.1.5/lib
即可。
同時將$BI_DOMAIN/config/fmwconfig/bienv/OBIS目錄的obis.properties文件中的
LD_LIBRARY_PATH=/usr/lib64 刪除
最後重啓bi server即可。
cd /u01/app/Oracle/bi_domain/bi/bitools/bin
./stop.sh -i obis1 && ./start.sh -i obis1