JavaアプリケーションからOracleデータベースにアクセスしていますが、アプリケーションを実行すると次のエラーが表示されます。
Java.sql.SQLException:ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません
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をエラーなしで接続することができました。このソリューションを見つけました こちら
最後に、-Doracle.jdbc.timezoneAsRegion=false
をコマンドラインに追加するか、AddVMOption -Doracle.jdbc.timezoneAsRegion=false
をこの表記法を使用する構成ファイルに追加できます。
WindowsでのSQL-Developerの単純なインストールでは、ディレクトリに移動します
C:\Program Files\sqldeveloper\sqldeveloper\bin
そして追加
AddVMOption -Duser.timezone=CET
ファイルsqldeveloper.conf
に。
私が得たエラー:
Db_connection.Javaからのエラー->> Java.sql.SQLException:ORA-00604:再帰SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません
ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-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;
}
今では動作しています!!
ファイルを更新しますOracle/jdbc/defaultConnectionProperties.properties以下の行を含めるために使用しているライブラリのどのバージョン(つまり、jar内)でも:
Oracle.jdbc.timezoneAsRegion=false
発生するのは、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を送信します。この「既知のIDの送信」の問題は、クライアントがサーバーに存在するタイムゾーンのバージョン/コンテンツをチェックせず、独自のリストを持っていることです。
これは、Oracleサポート記事[ID 1068063.1]で説明されています。
クライアントOSにも依存しているようです。RHELやWindowsよりもEtc/UTCがUbuntuで失敗する可能性が高くなりました。これは何らかの正規化によるものだと思いますが、正確には何がわかっているのかわかりません。
eclipseでgo 実行-> 実行構成
そこに行くJRE右側のパネルのタブ
in VM Argumentsセクションこれを貼り付け
-Duser.timezone=GMT
適用->実行
継続的統合サーバーから自動テストを実行すると、この問題が発生しました。 VM引数 "-Duser.timezone=GMT
"をビルドパラメーターに追加しようとしましたが、問題は解決しませんでした。ただし、環境変数「TZ=GMT
」を追加すると、修正されました。
エラー:
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"
この問題がJDeveloperにある場合:モデルとビュー・プロジェクトの両方のプロジェクトのプロパティを変更->実行/デバッグ->デフォルトのプロファイル->編集次の実行オプションを追加:-Duser.timezone = Asia/Calcutta
上記のタイムゾーン値が次のようにデータベースからフェッチされていることを確認してください。
select TZNAME from V$TIMEZONE_NAMES;
それに加えて、jdev.confおよびJDeveloper-> Application Menu-> Default Project Propertes-> Run/Debug-> Default Profile-> Run Optionsでタイムゾーン設定を確認する必要があります。
Netbeansでは、
[OK]をクリックして、プログラムを再実行します。
注:UTCおよびGMT以外のタイムストーンに設定することもできます。
Tomcatでこの問題に遭遇しました。 $CATALINA_BASE/bin/setenv.sh
で次を設定すると、問題が解決しました。
Java_OPTS=-Doracle.jdbc.timezoneAsRegion=false
他の回答からのJavaパラメータ提案の1つを使用しても同じように機能すると確信しています。
私の場合、「TZR」を「TZD」に変更することでクエリを機能させることができました。
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
私も同じような問題に直面しました。
Linux、hibernateプロジェクト、ojdbc6ドライバー、Oracle 11gデータベースのクエリ中。
TZパラメーターはLinuxマシンでは設定されていませんでした。これは基本的にOracleにタイムゾーンを通知します。そのため、アプリケーションの起動時にエクスポート文「export TZ = UTC」を追加すると、問題が解決しました。
UTC->タイムゾーンに合わせて変更します。
JDeveloperで接続を作成しようとしたときにも、同じ問題が発生しました。私たちのサーバーは異なるタイムゾーンにあるため、以下のエラーが発生しました:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
プロジェクトプロパティのJavaオプション(実行/デバッグ/プロファイル)およびデフォルトのプロジェクトプロパティにタイムゾーンを含めるように要求する多くのフォーラムを-Duser.timezone="+02:00"
と呼びましたが、うまくいきませんでした。最後に、次の解決策がうまくいきました。
JDeveloperの構成ファイルに次の行を追加します(jdev.conf)。
AddVMOption -Duser.timezone=UTC+02:00
このファイルは、「<Oracleインストールルート>\Middleware\jdeveloper\jdev\bin\jdev.conf」にあります。
Linuxシステム(Centos6.5)でタイムゾーンを設定することで、同じ問題を解決できました。
から再投稿
http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/set-time.html
/etc/sysconfig/clock
でタイムゾーンを設定します。 ZONE = "America/Los_Angeles"に設定
Sudo ln -sf/usr/share/zoneinfo/America/Phoenix/etc/localtime
タイムゾーン値を把握するには
ls /usr/share/zoneinfo
タイムゾーンを表すファイルを探します。
これらを設定したら、マシンを再起動して再試行してください。
Eclipseと離れたOracleデータベースを使用して同じ問題に直面して、データベースサーバーのタイムゾーンと一致するようにシステムタイムゾーンを変更すると、問題が修正されました。 マシンの再起動システムのタイムゾーンを変更した後。
これが誰かを助けることを願っています
OBIEEでOracle dbに接続しようとすると、同じ問題が発生しました。 Windowsタイムゾーンを(GMT + 01:00)西中央アフリカから(GMT + 01:00)ブリュッセル、コペンハーゲン、マドリード、パリに変更しました。その後、コンピューターを再起動しましたが、問題なく動作しました。 Oracleは西中央アフリカのタイムゾーンを認識できなかったようです。
Java.sql.SQLException:ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません
このタイプのエラーについては、システム時刻を国の標準GMT形式に変更するだけです
例えばインドのタイムゾーンはチェンナイ、コルカタです。