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