ORA-01882:未找到时区区域

时间:2012-02-06 06:30:51

标签: oracle jdbc timezone

我从java应用程序访问Oracle数据库,当我运行我的应用程序时,我收到以下错误:

  

java.sql.SQLException:ORA-00604:递归SQL级别1发生错误   ORA-01882:未找到时区区域

20 个答案:

答案 0 :(得分:57)

您也可以尝试检查Oracle jdbc驱动程序和Oracle数据库的版本。就在今天,当使用ojdbc6.jar(版本11.2.0.3.0)连接到Oracle 9.2.0.4.0服务器时,我遇到了这个问题。用ojdbc6.jar版本11.1.0.7.0替换它解决了这个问题。

我还设法通过在文件oracle / jdbc / defaultConnectionProperties.properties(在jar中)中添加oracle.jdbc.timezoneAsRegion=false来使ojdbc6.jar版本11.2.0.3.0连接没有错误。找到此解决方案here

最后,可以在命令行中添加-Doracle.jdbc.timezoneAsRegion=false,或者在使用此表示法的配置文件中添加AddVMOption -Doracle.jdbc.timezoneAsRegion=false

答案 1 :(得分:33)

在Windows下的一个简单的SQL-Developer安装中转到目录

C:\Program Files\sqldeveloper\sqldeveloper\bin

并添加

AddVMOption -Duser.timezone=CET

归档sqldeveloper.conf

答案 2 :(得分:23)

我得到的错误:

db_connection.java错误 - >> java.sql.SQLException:ORA-00604:递归SQL级别1发生错误  ORA-01882:未找到时区区域

ORA-00604:递归SQL级别1ORA-01882发生错误:未找到时区区域

上一个代码:

 public Connection getOracle() throws Exception {
     Connection conn = null;
     Class.forName("oracle.jdbc.driver.OracleDriver");
     conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:tap", "username", "pw");
     return conn;
}

新代码:

 public Connection getOracle() throws Exception {
     TimeZone timeZone = TimeZone.getTimeZone("Asia/Kolkata");
     TimeZone.setDefault(timeZone);
     Connection conn = null;
     Class.forName("oracle.jdbc.driver.OracleDriver");
     conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:tap", "username", "pw");
     return conn;
}

现在它正在运作!!

答案 3 :(得分:21)

更新文件 oracle / jdbc / defaultConnectionProperties.properties ,无论您使用哪个版本的库(即jar内)包含以下行:

oracle.jdbc.timezoneAsRegion=false

答案 4 :(得分:15)

会发生什么,JDBC客户端将时区ID发送到服务器。服务器需要知道该区域。您可以查看

SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';

我有一些数据库服务器知道'Etc / UTC'和'UTC'(tzfile版本18),但其他人只知道'UTC'(tz版本11)。

SELECT FILENAME,VERSION from V$TIMEZONE_FILE;

JDBC客户端也有不同的行为。从11.2开始,驱动程序将向Oracle发送区域ID(如果它已知),而在发送时间偏移之前。这种“发送已知ID”的问题是,客户端不检查服务器上存在的时区版本/内容,但有自己的列表。

Oracle支持文章[ID 1068063.1]中对此进行了解释。

似乎它还取决于客户端操作系统,使用Ubuntu而不是RHEL或Windows的Etc / UTC更有可能失败。我想这是由于一些规范化,但我还没弄清楚到底是什么。

答案 5 :(得分:9)

    在eclipse中
  1. 运行 - > 运行配置

  2. 转到右侧面板中的 JRE 标签

  3. VM Arguments 部分
  4. 粘贴此

    -Duser.timezone=GMT

  5. 然后申请 - >运行

答案 6 :(得分:4)

从持续集成服务器运行自动化测试时出现此问题。我尝试将VM参数“-Duser.timezone=GMT”添加到构建参数,但这并没有解决问题。但是,添加环境变量“TZ=GMT”确实为我解决了这个问题。

答案 7 :(得分:3)

错误:

  

ORA-00604:递归SQL级别1 ORA-01882发生错误:未找到时区区域

解决方案: Centos中的CIM设置。

/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh

添加此java参数:

JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"

答案 8 :(得分:2)

在Netbeans中,

  1. 右键单击您的项目 - >特性
  2. 转到“运行”(在“类别”下)
  3. 在VM选项下输入-Duser.timezone = UTC或-Duser.timezone = GMT。
  4. 单击“确定”,然后重新运行程序。

    注意:除了UTC和UTC之外,您还可以设置其他时间表。 GMT。

答案 9 :(得分:2)

如果JDeveloper中存在此问题: 更改模型和视图项目的项目属性 - >运行/调试 - >默认个人资料 - >编辑 添加以下运行选项: -Duser.timezone =亚/加尔各答

确保从数据库中提取上述时区值,如下所示:

select TZNAME from V$TIMEZONE_NAMES;

除此之外,您还要检查jdev.conf以及JDeveloper中的时区设置 - >应用程序菜单 - >默认项目属性 - >运行/调试 - >默认配置文件 - >运行选项。

答案 10 :(得分:2)

我遇到了Tomcat的这个问题。在$CATALINA_BASE/bin/setenv.sh中设置以下内容解决了问题:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

我确信使用其他答案中的一个Java参数建议会以相同的方式工作。

答案 11 :(得分:1)

我能够通过在我的linux系统(Centos6.5)中设置时区来解决同样的问题。

重新发布

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html

  1. mixin.js中设置时区,例如设置为ZONE =“America / Los_Angeles”

  2. sudo ln -sf / usr / share / zoneinfo / America / Phoenix / etc / localtime

  3. 要弄清楚时区值,请尝试

    setupController: function(controller, models) {
      this._super(controller, models); // Allow others to be called
    }
    

    并查找代表您的时区的文件。

    一旦你设置了这些重新启动机器并再试一次。

答案 12 :(得分:1)

发生此问题的原因是试图连接到db的代码具有不在db中的时区。 也可以通过将时区设置为以下或oracle db中可用的任何有效时区来解决。 可以找到的有效时区,请从v $ version中选择*;

System.setProperty(“ user.timezone”,“ America / New_York”); TimeZone.setDefault(null);

答案 13 :(得分:1)

我也遇到了同样的问题。

<强>环境:

Linux,hibernate项目,ojdbc6驱动程序,同时查询oracle 11g数据库。

分辨率

在linux机器上没有设置TZ参数,基本上告诉oracle有关时区的信息。 因此,在添加导出语句后#34;导出TZ = UTC&#34;在申请开始时解决了我的问题。

UTC - &GT;改变你的时区。

答案 14 :(得分:1)

在我的情况下,我可以通过更改&#34; TZR&#34;来使查询正常工作。用&#34; TZD&#34; ..

String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ?  and ?";

答案 15 :(得分:1)

当我尝试在JDeveloper中创建连接时,我也遇到了同样的问题。我们的服务器位于不同的时区,因此它产生了以下错误:

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found

我引用了许多论坛,要求在Project选项(运行/调试/配置文件)中包含时区,将项目属性和默认项目属性包括为-Duser.timezone="+02:00",但它并不适用于我。最后,以下解决方案对我有用。

将以下行添加到JDeveloper的配置文件( jdev.conf )。

AddVMOption -Duser.timezone=UTC+02:00

该文件位于&#34;&lt; oracle installation root&gt; \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf&#34;。

答案 16 :(得分:0)

使用Eclipse和远程Oracle数据库面对同样的问题,更改我的系统时区以匹配数据库服务器的时区来解决问题。 更改系统时区后重新启动机器

我希望这可以帮助某人

答案 17 :(得分:0)

  

java.sql.SQLException:ORA-00604:递归SQL时发生错误   级别1 ORA-01882:未找到时区区域

对于此类错误,只需将系统时间更改为您所在国家/地区的标准GMT格式

e.g。印度时区是chennai,kolkata。

答案 18 :(得分:0)

当尝试在OBIEE上建立与Oracle数据库的连接时,我遇到了同样的问题。 我将Windows时区从(GMT + 01:00)中西部非洲更改为(GMT + 01:00)布鲁塞尔,哥本哈根,马德里,巴黎。然后,我重启了计算机,一切正常。 好像Oracle无法识别中西部非洲时区。

答案 19 :(得分:0)

当您使用错误版本的 OJDBC jar 时发生。

你需要使用 11.2.0.4