Oracle的坑
1. Connection Reset
-
現象
Oracle JDBC使用Linux時,老是報錯SQLException("Io exception: Connection reset").
-
原因
為了登錄Oracle Server時的安全考慮,Oracle JDBC drivers 會調用Java SecureRandom生成隨機數。SecureRandom依賴os底層的/dev/random,/dev/random是Linux內核提供的安全隨機數生成設備;
Linux跑在有缺陷的硬件(比如,虛擬機),運氣不好時,/dev/random生成隨機數會非常慢。這樣導致了登錄進程會halt,最終導致Connection Reset。
-
解決方案
- 方案一,修改應用的JVM參數,使用/dev/urandom。好處,解決了隨機數生成慢、阻塞調用的問題;缺點是,/dev/urandom降低了安全性。
-Djava.security.egd=file:/dev/../dev/urandom
- 方案二,安裝部署 haveged-1.9.1 增加隨機數產量。
BTW,logstash啟動時也依賴/dev/random,這也是logstash在虛擬機中啟動非常緩慢的原因。
2. ORA-00942
-
現象
表,確實存在,但JDBC報錯"表或視圖不存在"
-
原因
Oracle 大小寫敏感,在創建和查詢時,對表名、列名會**自動轉為大寫**,這樣導致找不到表。
-
解決方案
語句中對表名、列名加雙引號。
create table "table_name" select * from "table_name"
歡迎加入橙鷹數據(據說是杭州一個很牛x很低調的大數據公司)
最後更新:2017-09-06 13:02:59