问题描述
数据库升级,用docker容器安装oracle11g数据库,应用连接的时候报ORA-01882错误
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:456)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:451)
环境:
- jdk : openjdk8
- oracle: 11g
解决
问题本质上是java应用程序启动时, 找不到本地系统的时区环境变量导致。 我们只有把时区环境变量配置上就可以了。
解决办法有二:
- java应用程序启动时增加环境变量配置
-Duser.timezone=xxx(xxx为oracle时区ID)
- 直接修改服务器的系统环境变量(更彻底)
# 时间更新为东八区时间 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 配置时区为东八区。 Java可以通过Timezone获取时区的,修改完重启服务即可。 echo 'Asia/Shanghai' >/etc/timezone
如果是docker的话,将宿主机改为上述配置后,docker容器启动(run)增加挂载配置就可以了
-v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone
文档信息
- 本文作者:寒澈
- 本文链接:https://www.hancher.top/2023/08/18/java_oracle_docker_timezone_not_find/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)