1. 概述
2. 取消勾選顯示Oracle所有表選項
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
原因分析:
當連結資料庫時,是透過連結池的機制進行連結的,資料庫參數: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”
解決方案:
點選下載:orai18n.jar,把 orai18n.jar 放到工程的webapps\webroot\WEB-INF\lib下,並重啟工程。