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很低调的大数据公司)

上一篇:天啦撸!打印日志竟然只晓得 Log4j?(1)


下一篇:Java循环练习:打印图案-6