错误:' ORA-01805:日期/时间操作可能出错'尽管在客户端和服务器中具有相同版本的DB

时间:2016-11-21 06:32:49

标签: oracle11g oracle-sqldeveloper roracle

我正在尝试使用客户端的ROracle连接到远程Oracle数据库。

建立连接后,我执行此查询:

dat = dbGetQuery(con, "SELECT * FROM TABLE_01")

这会导致错误:

  

.oci.GetQuery中的错误(conn,statement,data = data,prefetch = prefetch,:     try({:ORA-01805:日期/时间操作中可能出错

)出错

我检查了服务器端的数据库版本:

SELECT * FROM V$VERSION

PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0  Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

然后我在客户端运行genezi:

    genezi -v

System name:    Linux
Release:        4.4.0-36-generic
Version:        #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016
Machine:        x86_64

Operating in Instant Client mode.
Small timezone file = timezone_14.dat
Large timezone file = timezlrg_14.dat

客户端和服务器的Oracle版本是11.2。但是时区文件似乎有所不同。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您很可能在数据库服务器和客户端之间安装了不同的时区。

检查数据库版本:

select * from v$timezone_file;

检查客户端版本:

genezi -v

(您已经完成了 - 您的客户端已经开启14.我怀疑数据库使用的是更新版本。)

答案 1 :(得分:1)

当我在 docker 容器中运行我的 Ruby on Rails 应用程序时,我遇到了这个错误。 (在容器外运行应用程序时没有发生错误。)

我需要从我的 Dockerfile 中删除这一行:

ENV TZ America/New_York

来自 config/application.rb 的这些行:

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local

这似乎解决了问题。