Oracle 資料連結常見錯誤解決方案

1. 概述

1.1 版本

Finereport版本
11.0


1.2 應用場景

本文介紹 資料連結Oracle中一些報錯及解決方案。


2. 取消勾選顯示Oracle所有表選項

設計器菜單欄「檔案>選項>進階」下預設勾選「顯示Oracle所有表」,在連結 Oracle 時容易出現效能問題,建議使用者取消勾選後再連結。

1719883166244248.png


3. 單個資料連結連結多個Oracle資料庫

問題描述:

通常,單個資料連結對應一個 Oracle 資料庫,但是有時可能因為網路或者其他原因,資料庫連結不上或不能工作了,則整個項目就不能運作了。

解決方案:

將兩台 Oracle 資料庫中,配置相同的資料庫以及資料庫登入的帳號和密碼,然後透過配置url讓這個資料連結能連結兩台機器,即使用一個資料連結連多個資料庫。

URL格式:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =IP1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST =IP2)(PORT = 1521))(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = 資料庫名)))

範例1:在 192.168.100.168 和 192.168.100.170 機器上都擁有資料庫名為 orcl10g,那麼資料連結的 URL 就改成:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.100.168)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.100.170)(PORT = 1521))(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl10g)))
範例2:在 env.finedevelop.com對應55602 埠擁有一個資料庫 initfantlam,同時對應 55502 埠也擁有一個資料庫 initfantlam,那麼資料庫連結的就改成:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =env.finedevelop.com)(PORT = 55602))(ADDRESS = (PROTOCOL = TCP)(HOST =env.finedevelop.com)(PORT = 55502))(LOAD_BALANCE=yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = initfantlam)))

4. Cannot get a connection

問題描述:

連結 Oracle 資料庫時,後台日誌報錯「java.lang.RuntimeException: Query:Cannot get a connection, pool error Timeout waiting for idle object」

解決方案:

修改連結池,擴展連結池最大連結個數,修改方法詳見 資料連結進階設定

5. 資料亂碼

問題描述:

1)Oracle資料集預覽時,資料亂碼,日期錯亂。

2)報表預覽時,從Oracle資料庫中取出的資料亂碼。

3)透過填報向Oracle資料庫中填入的資料亂碼。

5.1 資料庫編碼格式不一致

原因分析:

資料庫編碼格式與資料連結編碼格式不一致。

解決方案:

1)確認資料庫編碼格式

select userenv('language') from dual

2)修改資料連結編碼格式

若資料庫編碼格式為GBK,那麼資料連結編碼格式應該為GBK

若資料庫編碼格式為US7ASCII,那麼資料連結編碼格式應該為ISO-8859-1

因為US7ASCII字元集為ISO字元集的子集,這樣可以保證不會亂碼

5.2 資料庫驅動不一致

不同資料庫版本使用的驅動是有很大差別的。

請務必參考 資料連結Oracle 選擇適合自己資料庫版本的驅動

6. listener does not currently know of SID given in connect descriptor

6.1 URL格式錯誤

原因分析:

URL格式不正確。

解決方案:

調整資料連結的URL樣式,修改為:

jdbc:oracle:thin:@localhost:1521:databaseName改成jdbc:oracle:thin:@localhost:1521/databaseName

6.2 sid_name 出錯

原因分析:

slsdb 不是正確的 sid_name,可能是 service_name

解決方案:

1)看看資料連結的URL中,埠後面的sid是否寫錯。

2)在 Oracle 裏面用 tnsping,檢查一下 listener 啟動了沒有,再看看 listener config file 裏面有沒有寫上SID。

3)到伺服器上看一下 listener.ora,如

SID_LIST_LISTENER= (SID_DESC= (GLOBAL_DBNAME=oracle9i) (ORACLE_HOME=/opt/oracle9i/product/9.2.0) (SID_NAME=ORCL) )

URL 裏面可能用的是上面的 GLOBAL_DBNAME 的值,就是用的 SERVICE_NAME,更換成 SID_NAME,也可以登入 sqlplus 伺服器

$sqlplus/as sysdba SQL>SELECT * FROM V$instance;查看本機上sid的名稱

6.3 連結數過多

原因分析:

連結數過多

解決方案:

1)查看連結數

sql>show user; 查看當前使用者

select count(*) from v$process;–當前連結數

select value from v$parameter where name = 'processes' --資料庫允許的最大連結數

2)對當前連結數進行修改,不超過最大連結數就可以:

SQL> alter system set processes = 2000 scope = spfile;

3)重啟重新整理資料庫

7. 監聽進程不能解析在連結描述符中給出的 SERVICE_NAME

問題描述:

連結 Oracle 資料庫時,日誌報錯「ORA-12514:TNS:監聽進程不能解析在連結描述符中給出的 SERVICE_NAME」

7.1 SID_NAME 跟安裝 Oracle 時的 ORACLE_SID 相同

原因分析:


SID_NAME 跟安裝 Oracle 時的 ORACLE_SID 相同。

SERVICE_NAME=DBNAME.DB_DOMAINDBNAME 即是資料庫名,它是 Oracle 資料庫的內部標識,安裝以後輕易不要修改。

解決方案:

1)重啟oracle相關「服務」,重新進行連結嘗試。

2)正確設定listener.ora檔案,新增相應的實體名,重啟資料庫伺服器,檢查各項服務是否啟動,嘗試連結。

7.2 常式啟動問題

原因分析:

常式啟動有問題

解決方案:

1)啟動oracle

net start oracleserviceorcl

2)cmd管理者運作,輸入如下程式碼

sqlplus /nolog

connect/as sysdba

ALTER USER SYSTEM IDENTIFIED BY newpass;

3)啟動常式

sql> startup

8. Got minus one from a read call

問題描述:

資料連結失敗,報錯:Got minus one from a read call

1719884312297643.png

原因分析:

當連結資料庫時,是透過連結池的機制進行連結的,資料庫參數:max-session決定連結池的大小,而應用同樣也有一個參數,這個參數表示它連結資料庫連結池所佔用的最少資源。

例如:總共有 10 個應用需要連結資料庫,如果每個應用連結資料庫的最小連結數為 10 ,那麼10個應用總共會有 100 個連結,這樣就要求資料庫連結池的 max-session 必須大於100,否則就會報Got minus one from a read call的錯誤。

解決方案:

1)查看 processes 和 sessions 參數

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;

9. No matching authentication protocol

問題描述:

Oracel 連結報錯:ORA-28040: No matching authentication protocol;

原因分析:

驅動版本不適配

解決方案:

點選下載:ojdbc7.jar,把 ojdbc7.jar 放到工程的webapps\webroot\WEB-INF\lib下,刪除原來的 ojdbc14.jar 並重啟工程。

10. 資料連結成功,資料庫查詢顯示:資料庫連結失敗

問題現象:

Oracle 資料連結成功,但資料查詢是表出不來,顯示“資料庫連結失敗!”,日誌中報錯為“嚴重:09:58:46 AWT-EventQueue-0 ERROR [standard] java.lang.RuntimeException: java.sql.SQLException: 不支援的字元集 (在類路徑中新增 orai18n.jar): ZHS16GBK”

2024-07-02_9-44-07.png

解決方案:

點選下載:orai18n.jar,把 orai18n.jar 放到工程的webapps\webroot\WEB-INF\lib下,並重啟工程。

11. 資料連結偶發失敗

問題現象:

正常運作工程,忽然全部 oracle 資料庫連結不上,伺服器上 telnet ,網路是通的,不是密碼錯誤,本地用資料庫工具也能連上。重啟後能夠恢復。

問題原因:

資料連結時,使用的驅動是內建驅動,該驅動主要適配 jdk1.4 的。

解決方案:

如果遇到以上問題,建議升級驅動。

附件列表


主題: 資料準備
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

9s后關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙

反饋已提交

網絡繁忙