oracle SQL查询返回ORA-01805:日期/时间操作错误中可能存在错误

cmssoen2  于 2023-02-03  发布在  Oracle
关注(0)|答案(2)|浏览(290)

我正尝试在python代码中执行SQL查询,并获取
ORA-01805:日期/时间操作错误中可能存在错误。
如何解决此问题?我已经下载了最新的oracle即时客户端文件。我应该如何更改日期?

k4emjkb1

k4emjkb11#

我还遇到了错误“ORA-01805:将数据库从11 g升级到19 C后,客户端出现“可能的日期/时间操作错误”问题。已升级客户端,但错误仍未解决。
解决方法是将$ORACLE_HOME/oracore/zoneinfo内容复制到客户端的同一目录中。(虽然不确定是否支持此操作,但我会验证)

zsohkypk

zsohkypk2#

Oracle的数据库全球化支持指南值得一读。然后您将了解到,对于时区感知客户端,您需要考虑一些细微差别。只有部分客户端可以连接不同版本的时区文件-它适用于Oracle Database 11 g和更高版本,以及OCI、JDBC、ProC和SQLPlus等客户端。对于其他客户端:
应该假定,此类客户端无法与时区文件与客户端不同的数据库服务器一起操作
一般来说,OCI在混合模式下是受支持的,所以cx_oracle应该可以工作。但是...我在Oracle 11 g和cx_oracle(不记得版本)上遇到了问题。解决方案是安装与数据库完全匹配的即时客户端版本。当我在11.2版本而不是12.2版本中安装即时客户端时,错误消失了。
因此,查找数据库版本:

select * from v$version;

找到匹配的即时客户端应该能用。
可以使用以下查询检查数据库时区文件版本:

-- user SYS or anyone with SYSDBA privilege can query that view:
select *
from v$timezone_file;

-- example output:
FILENAME         VERSION
timezlrg_14.dat  14

然后您可以检查即时客户端版本(在Linux上):

# your instant client path could be different
$ cd /usr/lib/oracle/12.2/client64/bin
$  ./genezi -v
Client Shared Library 64-bit - 12.2.0.1.0

System name:    Linux
Release:        4.15.0-121-generic
Version:        #123-Ubuntu SMP Mon Oct 5 16:16:40 UTC 2020
Machine:        x86_64

Operating in Instant Client mode.

Small timezone file = /usr/lib/oracle/12.2/oracore/zoneinfo/timezone_26.dat
Large timezone file = /usr/lib/oracle/12.2/oracore/zoneinfo/timezlrg_26.dat

在上面的示例中,数据库的时区文件版本为14,客户端的时区文件版本为26。

相关问题