閱讀950 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go  塑料頭盔一樣給虛擬現實開道
  下一篇:go  沒學曆,培訓Java出來,想做開發