阅读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出来,想做开发