我从java应用程序访问Oracle数据库,当我运行我的应用程序时,我收到以下错误:
java.sql.SQLException:ORA-00604:递归SQL级别1发生错误 ORA-01882:未找到时区区域
答案 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)
去运行 - > 运行配置
转到右侧面板中的 JRE 标签
粘贴此
-Duser.timezone=GMT
然后申请 - >运行
答案 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中,
单击“确定”,然后重新运行程序。
注意:除了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
在mixin.js
中设置时区,例如设置为ZONE =“America / Los_Angeles”
sudo ln -sf / usr / share / zoneinfo / America / Phoenix / etc / localtime
要弄清楚时区值,请尝试
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"在申请开始时解决了我的问题。
UTC - >改变你的时区。
答案 14 :(得分:1)
在我的情况下,我可以通过更改" TZR"来使查询正常工作。用" TZD" ..
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
该文件位于"< oracle installation root> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf"。
答案 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