web-dev-qa-db-ja.com

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

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

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

87
ndalama

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をこの表記法を使用する構成ファイルに追加できます。

63

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

C:\Program Files\sqldeveloper\sqldeveloper\bin

そして追加

AddVMOption -Duser.timezone=CET

ファイルsqldeveloper.confに。

34
Marcus Rickert

私が得たエラー:

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

今では動作しています!!

23

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

Oracle.jdbc.timezoneAsRegion=false
21

発生するのは、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で失敗する可能性が高くなりました。これは何らかの正規化によるものだと思いますが、正確には何がわかっているのかわかりません。

16
eckes
  1. eclipseでgo 実行-> 実行構成

  2. そこに行くJRE右側のパネルのタブ

  3. in VM Argumentsセクションこれを貼り付け

    -Duser.timezone=GMT

  4. 適用->実行

11

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

4
Matt

エラー:

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"
4
Guna Sekaran

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

2
Mukul Rana

Netbeansでは、

  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
bonh

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

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

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

環境:

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

解決

TZパラメーターはLinuxマシンでは設定されていませんでした。これは基本的にOracleにタイムゾーンを通知します。そのため、アプリケーションの起動時にエクスポート文「export TZ = UTC」を追加すると、問題が解決しました。

UTC->タイムゾーンに合わせて変更します。

1
user3721248

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

1
Raj

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

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

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

1
adi-pradhan

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

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

0
S_intg

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

0
yushaa4dz

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

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

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

0
manjunatha H