1、Oracle鏈接多個數據庫sql
一般狀況,在定義數據鏈接時只連一個Oracle數據庫,可是有時可能由於網絡或者其它緣由,數據庫鏈接不上或不能工做了,則整個項目就不能運行了。此時有什麼方法讓項目能正常運行呢?數據庫
實現思路:express
將兩臺Oracle數據庫中,配置相同的數據庫以及數據庫登陸的用戶名和密碼,而後經過配置url讓這個數據鏈接能鏈接兩臺機器,即便用一個數據鏈接連多個數據庫。服務器
實現步驟:網絡
若使用Oracle數據庫,在定義數據鏈接時,將原來的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 = 數據庫名)))oracle
如:在168和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、Oracle相關報錯解決方法性能
1. 報錯ORA-00942url
對於報錯ORA-00942表或視圖不存在或者找不到數據鏈接:***ull日誌
要先確認數據庫裏表或字段是否存在,或者是否拼寫正確。
當初建立時是以什麼用戶建立的,如今的鏈接用戶是否有權限查詢該表。用建表的用戶鏈接後再查詢看看。
2. 報錯ORA-00904
對於報錯ORA-00904,標識符無效
須要肯定數據庫裏對應字段類型是否匹配。
字段、表達式的別名在where子句和group by子句都是不能使用的。
3. 報錯ORA-01008
對於報錯ORA-01008: 並不是全部變量都已綁定
須要結合看一下具體的存儲過程是怎麼寫的,而後在6.5中調用看看。
解決方案:FineReport 6.1升級後,存儲過程寫法須要變一下,原寫法如:call username.procname(?,'[?para|?]','[?para|?]','[?para|?]')須要改成這樣的寫法:{callusername.package.procedure('${p1}','${p2}','${p3}',?)}便可。
具體示例以下圖所示
調用存儲過程
正確結果
改爲這種寫法後,若是仍然不成功,報ORA-06550的錯誤。
緣由是:ORACLE裏面的存儲過程,識別包體名,而不是用戶名。直接拖的話,默認是用戶名,要本身寫包名才行。
4. 報錯ORA—00936
對於報錯ORA—00936:missing expression
解決方案
sql裏的參數寫法問題,and([?pro_status|?])和前面的參數識別衝突,去掉and ([?pro_status|?])便可。
5. 報錯ORA-01401
對於報錯ORA-01401: 插入的值對於列過大
緣由:數據庫的字段nvarchar2(2000),只能存儲1000的漢字,當插入2000的漢字的時候就會報錯。
解決方案
把nvarchar2(2000)改爲nvarchar2(4000)就能夠存下你的2000個漢字了。可是有一點,nvarchar2最大也只可以放到4000寬度了。若是還須要存更多的漢字,字段類型就得用Clob類型了。
6. 報錯ORA-01830
對於報錯ORA-01830: 日期格式圖片在轉換整個輸入字符串以前結束
緣由:在對字符串型數據轉化成日期型數據時,字符串的長度大於格式化的長度,如test數據庫中的一個數據列notice_date存的數據爲:2011/08/12 08:49:23,將其轉化爲yyyy-mm-dd格式的數據時,如sql語句爲:select todate(notice_date,'yyyy-mm-dd') from test就會報錯。
解決方案
使用substr函數將字符串的位數截取的和轉換的日期函數相同,如上面的sql語句就改成:select todate(substr(notice_date,1,10,'yyyy-mm-dd') )from test便可。
7.could not establish the connection
對於報錯:The Network Adapter could not establish the connection
解決方案
數據庫裏系統日誌滿了,刪除後從新啓動OracleOraDb10g_home1TNSListener服務後就ull能鏈接成功了。
或者,因網絡問題或數據庫沒有啓動致使鏈接失敗。
8. 報錯ORA-00911
對於報錯ORA-00911: 無效字符
緣由:這個錯誤是因爲sql語句有問題。把語句拿到庫裏執行也沒報錯,後來發如今庫裏查詢時,查詢語句結尾帶了一個分號,庫裏面是支持這個分號的,但到IBATIS裏面是不支持這個分號的。
解決方案:去掉分號。
3、經過oci方式鏈接Oracle
oracle經過JDBC數據鏈接實際上是經過thin的方式鏈接的,你們都知道oracle除了thin方式能夠鏈接以外,oci方式也能夠,下面來介紹怎麼經過oci的方式來鏈接oracle。
oci和thin的區別
Java程序鏈接oracle數據庫時,用oci驅動要比用thin驅動性能好些。主要的區別是使用thin驅動時,不須要安裝oracle的客戶端,而使用oci時則要安裝oracle的客戶端。
oci鏈接方式
在本地安裝好oracle的客戶端以後,在客戶端配置好本地服務名,這裏咱們配置好的本地服務名爲orcl。
點擊服務器>新建數據鏈接,新建一個jdbc數據鏈接,以下圖:
更多FineReport的知識能夠查看幫助文檔(http://help.finereport.com/)