ORA-01882:タイムゾーン地域が見つかりません


102

JavaアプリケーションからOracleデータベースにアクセスしていますが、アプリケーションを実行すると、次のエラーが発生します。

java.sql.SQLException:ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません


あなたの環境について教えてください、あなたはあなたのJavaをどのように実行しますか?
ABCade

コマンドラインでJavaアプリケーションを実行しています。Windows 7 64ビットですが、Oracle DBはリモートのUnixサーバーで実行されています。
ndalama

9
コマンドに "-Duser.timezone = <YOUR_GMT>"を追加してみてください。<YOUR_GMT>をGMTに置き換えることを忘れないでください。つまり、-Duser.timezone = "+ 05:30"
ABCade

回答:


87

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 を追加できます


24
また、ファイルoracle / jdbc / defaultConnectionProperties.properties(jar内)にoracle.jdbc.timezoneAsRegion = falseを追加することにより、エラーなしでojdbc6.jarバージョン11.2.0.3.0を接続することもできました。このソリューションはここにあります:forums.oracle.com/forums/thread.jspa?threadID
Matteo Steccolini

33
最後に、コマンドラインに-Doracle.jdbc.timezoneAsRegion = falseを追加するか、この表記を使用する構成ファイルでAddVMOption -Doracle.jdbc.timezoneAsRegion = falseを追加できます。
Matteo Steccolini、2013

stmsatに感謝します。それは私のために働いた。tomcat / libディレクトリでojdbc jarを11.1.0.7.0バージョンに変更すると、動作し始めました:)。
mdev 2014

1
私はmavenを使用してプロジェクトをビルドおよびパッケージ(war)し、Cloud Flareにデプロイしています。このプロパティの設定は、application.propertiesファイルまたはmavenから行うことができますか。
Ismail、

40

Windowsでの単純なSQL-Developerインストールでは、ディレクトリに移動します

C:\Program Files\sqldeveloper\sqldeveloper\bin

そして追加

AddVMOption -Duser.timezone=CET

ファイルにsqldeveloper.conf


Jetbrains DataGripを使用し、このVMオプションを追加した後に同じ問題に直面した
latsha

ありがとう、これは本当に役に立ちました!
クイントン

27

私が得たエラー:

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;
}

今それは働いています!!


ありがとう、まさにそれが私が必要としていたことです!
アラントンプソン

なぜそれがデフォルトのタイムゾーン「ヨーロッパ/マドリッド」を好まなかったのか分かりません。デフォルトのタイムゾーンを「GMT」に設定すると機能します。
fgui 2016年

22

以下の行を含めるために、使用しているライブラリのバージョン(つまり、jar内)のファイルoracle / jdbc / defaultConnectionProperties.propertiesを更新します。

oracle.jdbc.timezoneAsRegion=false

19

何が起こるかは、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が失敗する可能性が高かったです。これはいくつかの正規化が原因であると思いますが、正確には何を理解していません。


14
  1. 日食で実行する -> 実行構成

  2. 右側のパネルのJREタブに移動します

  3. [ VM引数]セクションにこれを貼り付けます

    -Duser.timezone=GMT

  4. 次に適用->実行


8

継続的インテグレーションサーバーから自動テストを実行すると、この問題が発生しました。VM引数「-Duser.timezone=GMT」をビルドパラメーターに追加しようとしましたが、問題は解決しませんでした。ただし、環境変数 " TZ=GMT"を追加すると、問題が解決しました。


2
「TZ = GMT」環境変数も私にとってはうまくいきました。Oracleにアクセスする別のツールを実行するための環境を設定するシェルスクリプトに問題がありました。
David Keener

1
同じ問題があるため、「ant」を使用するときも「TZ = Europe / Zurich」を使用する必要がありました。出来た!
ChristofKälin18年

2
これが一番の答えになるはずです。他のすべての回答は機能しませんでした。
Alex Dembo

4

エラー:

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"

3

ネットビーンズでは、

  1. プロジェクトを右クリック->プロパティ
  2. 実行に移動(カテゴリの下)
  3. VMオプションの下に-Duser.timezone = UTCまたは-Duser.timezone = GMTを入力します。

[OK]をクリックして、プログラムを再実行します。

注:UTCおよびGMT以外のタイムストーンを設定することもできます。


2

Tomcatでこの問題に遭遇しました。次の設定で$CATALINA_BASE/bin/setenv.sh問題が解決しました:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

他の回答からのJavaパラメータの提案の1つを使用しても、同じように機能すると確信しています。


2

私も同じような問題に直面しました。

環境:

Linux、hibernateプロジェクト、oracle 11gデータベースのクエリ中のojdbc6ドライバー。

解決

LinuxマシンでTZパラメータが設定されていなかったため、基本的にOracleにタイムゾーンが通知されました。したがって、アプリケーションの開始時にエクスポートステートメント "export TZ = UTC"を追加すると、問題が解決しました。

UTC->タイムゾーンに応じて変更します。


2

この問題が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のタイムゾーン設定を確認する必要があります。


1

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」にあります。


1

私の場合、「TZR」を「TZD」に変更することで、クエリを機能させることができます。

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

1

Linuxシステム(Centos6.5)でタイムゾーンを設定することで、同じ問題を解決できました。

からの再投稿

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

  1. タイムゾーンを設定します。/etc/sysconfig/clock例:ZONE = "America / Los_Angeles"に設定します

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

タイムゾーンの値を把握するには、

ls /usr/share/zoneinfo

タイムゾーンを表すファイルを探します。

これらを設定したら、マシンを再起動して再試行してください。


2
私にとって、/ etc / sysconfig / clockと/ etc / localtimeリンクが適切に設定されていることを確認することは、基本的にORA-01882の問題を解決するための前提条件でした。
David Keener、2015年

1

OBIEEでOracle dbに接続しようとすると、同じ問題が発生しました。Windowsタイムゾーンを(GMT + 01:00)西中央アフリカから(GMT + 01:00)ブリュッセル、コペンハーゲン、マドリード、パリに変更しました。その後、コンピュータを再起動しましたが、問題なく動作しました。Oracleは中央アフリカ西部のタイムゾーンを認識できなかったようです。


1

この問題は、dbに接続しようとしているコードに、dbにないタイムゾーンがあるために発生します。また、タイムゾーンを以下のように設定するか、Oracle DBで有効なタイムゾーンを設定することで解決できます。見つけることができる有効なタイムゾーンselect * from v $ version;

System.setProperty( "user.timezone"、 "America / New_York"); TimeZone.setDefault(null);


0

Eclipseと遠くのOracleデータベースを使用して同じ問題に直面し、データベースサーバーのタイムゾーンと一致するようにシステムのタイムゾーンを変更すると、問題が解決しました。 システムのタイムゾーンを変更した後、マシンを再起動します。

これが誰かを助けることを願っています


0

java.sql.SQLException:ORA-00604:再帰的SQLレベル1でエラーが発生しましたORA-01882:タイムゾーン領域が見つかりません

このタイプのエラーについては、システム時刻を国の標準GMT形式に変更してください

たとえば、インドのタイムゾーンはチェンナイ、コルカタです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.