JavaアプリケーションからOracleデータベースにアクセスしていますが、アプリケーションを実行すると、次のエラーが発生します。
java.sql.SQLException:ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません
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.timezoneAsRegion=false
ファイルoracle / jdbc / defaultConnectionProperties.properties(jar内)を追加することにより、エラーなしでojdbc6.jarバージョン11.2.0.3.0を接続することもできました。ここでこのソリューションを見つけました
最後-Doracle.jdbc.timezoneAsRegion=false
に、コマンドラインに追加するか、-Doracle.jdbc.timezoneAsRegion=false
この表記を使用する構成ファイルのAddVMOption を追加できます
私が得たエラー:
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;
}
今それは働いています!!
以下の行を含めるために、使用しているライブラリのバージョン(つまり、jar内)のファイルoracle / jdbc / defaultConnectionProperties.propertiesを更新します。
oracle.jdbc.timezoneAsRegion=false
何が起こるかは、JDBCクライアントがタイムゾーンIDをサーバーに送信することです。サーバーはそのゾーンを認識する必要があります。あなたはチェックすることができます
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
'Etc / UTC'と 'UTC'(tzfileバージョン18)を知っているいくつかのdbサーバーがありますが、 'UTC'(tzバージョン11)しか知らないサーバーもあります。
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
JDBCクライアント側でも動作が異なります。11.2以降、ドライバーは、Oracleに「既知」の場合はゾーンIDを送信しますが、タイムオフセットを送信する前に送信します。この「既知のIDの送信」の問題は、クライアントがサーバーに存在するタイムゾーンのバージョン/コンテンツをチェックせず、独自のリストを持っていることです。
これは、Oracleサポート記事[ID 1068063.1]で説明されています。
クライアントOSにも依存しているようです。RHELやWindowsよりもUbuntuでEtc / UTCが失敗する可能性が高かったです。これはいくつかの正規化が原因であると思いますが、正確には何を理解していません。
日食で実行する -> 実行構成
右側のパネルのJREタブに移動します
[ VM引数]セクションにこれを貼り付けます
-Duser.timezone=GMT
次に適用->実行
継続的インテグレーションサーバーから自動テストを実行すると、この問題が発生しました。VM引数「-Duser.timezone=GMT
」をビルドパラメーターに追加しようとしましたが、問題は解決しませんでした。ただし、環境変数 " TZ=GMT
"を追加すると、問題が解決しました。
ネットビーンズでは、
[OK]をクリックして、プログラムを再実行します。
注:UTCおよびGMT以外のタイムストーンを設定することもできます。
私も同じような問題に直面しました。
Linux、hibernateプロジェクト、oracle 11gデータベースのクエリ中のojdbc6ドライバー。
LinuxマシンでTZパラメータが設定されていなかったため、基本的にOracleにタイムゾーンが通知されました。したがって、アプリケーションの開始時にエクスポートステートメント "export TZ = UTC"を追加すると、問題が解決しました。
UTC->タイムゾーンに応じて変更します。
この問題が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のタイムゾーン設定を確認する必要があります。
JDeveloperで接続を作成しようとしたときにも、同じ問題が発生しました。私たちのサーバーは異なるタイムゾーンにあるため、以下のエラーが発生しました:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
プロジェクトプロパティとデフォルトプロジェクトプロパティのJavaオプション(実行/デバッグ/プロファイル)にタイムゾーンを含めるように要求する多くのフォーラムを-Duser.timezone="+02:00"
bB として参照しましたが、それは私にとっては機能しませんでした。最後に、次の解決策が私にとってうまくいきました。
JDeveloperの構成ファイル(jdev.conf)に次の行を追加します。
AddVMOption -Duser.timezone=UTC+02:00
このファイルは「<oracle installation root> \ 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
タイムゾーンを表すファイルを探します。
これらを設定したら、マシンを再起動して再試行してください。
java.sql.SQLException:ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません
このタイプのエラーについては、システム時刻を国の標準GMT形式に変更してください
たとえば、インドのタイムゾーンはチェンナイ、コルカタです。