本文介紹 Oracle 資料連結 中一些報錯及解決方案。
在 Oracle 9i 版本中,精度為 0 的欄位值會被識別成正文而不是數值「該欄位值用 column.getSize() 計算得到的是 38 ,所以會被識別成正文屬性」;其他版本的 Oracle 未有此現象出現。
BI 平台 Oracle 連結池在一段時間沒有使用會自動釋放,之所以查看連結池有之前的連結,是因為後面使用者連結時又重新啟用,所以不會因為連結一直得不到釋放而造成問題。
在 2019-01-15 之前的版本中,若為 Spider 引擎開啓實時資料,直連 Oracle 資料庫的話,超過 22 位的欄位需要使用 SQL 語句轉義新增到 FineBI 中。原因是 FineBI 直連會在欄位前加 8 位字元,而 Oracle 超過 30 位識別符號在將表新增到 FineBI 中時就會報錯ORA-000972。
注:在 2019-01-15 之後的 FineBI5.1 版本已經修復該問題,可開啓實時資料,直接新增最多 30 位的欄位/表名至 FineBI 中。
SQL 轉義語句可使用:select “超過22位欄位名的欄位” as 轉義名 from 表,如下圖所示:
所有以 ORA 開頭的報錯都是 Oracle 資料庫報錯,可以透過在網路上對報錯資訊進行搜尋,排查報錯。
問題描述
Oracle19c 資料連結報錯:create connection error java.lang.IllegalArgumentException: ONS configuration failed
如下圖所示:
解決方案:
Linux/Unix 修改 startWebLogic.sh 檔案,搜尋「setDomainENV.sh」,然後在「.${DOMAIN_HOME}」這句的上一行插入「JAVA_OPTIONS="-Doracle.jdbc.fanEnabled = false"」,如下圖所示:
問題描述:
Oracle 資料連結,新增 DB 表,表名/表頭亂碼。
將 Oracle 資料庫的編碼改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK
Oracle11無法取 DB 表,日誌報錯如下圖所示:
解决方案:
點選下載:orai18n.jar,把orai18n.jar放到工程的webapps\webroot\WEB-INF\lib下,並重啓工程。
資料連結失敗,報錯:Got minus one from a read call
原因分析:
當連結資料庫時,是透過連結池的機制進行連結的,資料庫參數:max-session決定連結池的大小,而應用同樣也有一個參數,這個參數表示它連結資料庫連結池所佔用的最少資源。
例如:總共有 10 個應用需要連結資料庫,如果每個應用連結資料庫的最小連結數為 10 ,那麼10個應用總共會有 100 個連結,這樣就要求資料庫連結池的 max-session 必須大於100,否則就會報Got minus one from a read call的錯誤。
1)查看 processes 和 sessions 參數
SQL 語句分別為:
show parameter processes
show parameter sessions
2)修改 processes 和 sessions 值
alter system set processes=300 scope=spfile;
alter system set sessions=335 scope=spfile;
3)重啓 Oracle
shutdown immediate;
startup;
Oracle 版本 9.2.0.4 ,使用 2020-01-15 的 JAR ,連結成功後無法選擇模式,也不顯示數值。
驅動版本不適配。
根據實際情況換成支援的驅動,驅動下載連結:驅動下載官方連結
範例:換成 ojdbc6 驅動才可以正常顯示資料和選擇模式。
Oracel 連結報錯:ORA-28040: No matching authentication protocol;
點選下載:ojdbc7.jar,把 ojdbc7.jar 放到工程的webapps\webroot\WEB-INF\lib下,並重啓工程。