web-dev-qa-db-fra.com

ORA-01882: zone de fuseau horaire introuvable

J'accède à une base de données Oracle à partir d'une application Java. Lorsque j'exécute mon application, l'erreur suivante apparaît:

Java.sql.SQLException: ORA-00604: une erreur s'est produite au niveau SQL récursif 1 ORA-01882: zone de fuseau horaire introuvable

77
ndalama

Vous pouvez également essayer de vérifier la version du pilote Oracle jdbc et de la base de données Oracle. Aujourd'hui, j'ai eu ce problème lorsque j'utilisais ojdbc6.jar (version 11.2.0.3.0) pour me connecter à un serveur Oracle 9.2.0.4.0. Le remplacement par ojdbc6.jar version 11.1.0.7.0 a résolu le problème.

53
Matteo Steccolini

En clair, une installation SQL-Developer sous Windows dans le répertoire

C:\Program Files\sqldeveloper\sqldeveloper\bin

et ajouter

AddVMOption -Duser.timezone=CET

pour déposer sqldeveloper.conf.

32
Marcus Rickert

Erreur j'ai eu:

Erreur de db_connection.Java - >> Java.sql.SQLException: ORA-00604: une erreur est survenue au niveau 1 récursif de SQL ORA-01882: zone de fuseau horaire introuvable

ORA-00604: une erreur s'est produite lors du niveau récursif SQL 1ORA-01882: zone de fuseau horaire introuvable

Code précédent:

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

nouveau code:

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

maintenant ça marche !!

22
Waruna Sri Jayanth

Mettez à jour le fichier Oracle/jdbc/defaultConnectionProperties.properties dans n’importe quelle version de la bibliothèque (c.-à-d. Dans votre fichier jar) que vous utilisez pour contenir la ligne ci-dessous:

Oracle.jdbc.timezoneAsRegion=false
17
Babatunde Adeyemi

Ce qui se passe, c'est que le client JDBC envoie l'ID de fuseau horaire au serveur. Le serveur doit connaître cette zone. Vous pouvez vérifier avec 

SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';

J'ai des serveurs de base de données qui connaissent 'Etc/UTC' et 'UTC' (version 18 de tzfile), mais d'autres ne connaissent que 'UTC' (version 11 de tz).

SELECT FILENAME,VERSION from V$TIMEZONE_FILE;

Il existe également un comportement différent du côté client JDBC. À partir de 11.2, le pilote enverra les identifiants de zone s'il est "connu" d'Oracle, alors qu'avant il envoyait le décalage horaire. Le problème avec cet "envoi d'identifiants connus" est que le client ne vérifie pas quelle version/contenu de fuseau horaire est présent sur le serveur mais possède sa propre liste.

Ceci est expliqué dans l'article de support Oracle [ID 1068063.1].

Il semble que cela dépend aussi du système d'exploitation client, il était plus probable que Etc/UTC échoue avec Ubuntu que RHEL ou Windows. Je suppose que cela est dû à une certaine normalisation mais je n’ai pas trouvé quoi au juste.

15
eckes
  1. dans Eclipse, allez exécutez -> exécutez la configuration  

  2. là bas aller àJREonglet dans les panneaux de droite

  3. dans VM Arguments section coller ceci

    -Duser.timezone=GMT

  4. puis Appliquer -> Exécuter

8
Priyan at Dialog

J'ai eu ce problème lors de l'exécution de tests automatisés à partir d'un serveur d'intégration continue. J'ai essayé d'ajouter l'argument VM "-Duser.timezone=GMT" aux paramètres de construction, mais cela n'a pas résolu le problème. Cependant, l'ajout de la variable d'environnement "TZ=GMT" a résolu le problème pour moi.

4
Matt

ERREUR :

ORA-00604: une erreur s'est produite lors de la récursive SQL niveau 1 ORA-01882: région du fuseau horaire introuvable

Solution: Configuration CIM dans Centos.

/opt/Oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh

Ajoutez ces arguments Java:

Java_ARGS="${Java_ARGS} -Duser.timezone=EDT"
3
Guna Sekaran

Si ce problème se trouve dans JDeveloper: Modifiez les propriétés du projet pour le modèle et le projet de vue -> exécuter/déboguer -> profil par défaut -> modifier Ajouter l'option d'exécution suivante: - Duser.timezone. = Asie/Calcutta

Assurez-vous que la valeur de fuseau horaire ci-dessus est extraite de votre base de données comme suit:

select TZNAME from V$TIMEZONE_NAMES;

En plus de cela, vous voudrez vérifier les paramètres de fuseau horaire dans votre jdev.conf ainsi que dans JDeveloper -> Menu Applications -> Propriétés du projet par défaut -> Exécuter/Déboguer -> Profil par défaut -> Options d'exécution.

2
Mukul Rana

En Netbeans, 

  1. Faites un clic droit sur votre projet -> Propriétés
  2. Aller à la course (sous catégories)
  3. Entrez -Duser.timezone = UTC ou -Duser.timezone = GMT sous VM Options.

Cliquez sur OK, puis réexécutez votre programme.

Remarque: Vous pouvez également définir des timestones autres que UTC et GMT.

2
Babatunde Adeyemi

Dans mon cas, je pourrais faire fonctionner la requête en changeant "TZR" avec "TZD" ..

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

J'ai aussi même fait face à un problème similaire.

Environnement:

Linux, projet hibernate, pilote ojdbc6 lors de l’interrogation de la base de données Oracle 11g.

Résolution

Le paramètre TZ n’a pas été défini sur la machine Linux, ce qui indique essentiellement à Oracle le fuseau horaire . Ainsi, après l’ajout de la déclaration d’exportation "export TZ = UTC" au moment du démarrage de l’application, j'ai résolu le problème.

UTC -> Changez selon votre fuseau horaire.

1
user3721248

Moi aussi j'ai eu le même problème quand j'ai essayé de créer une connexion dans JDeveloper. Notre serveur situé dans un fuseau horaire différent et, par conséquent, il a généré les erreurs suivantes:

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found

J'ai référé de nombreux forums qui demandaient d'inclure le fuseau horaire dans les options Java (Exécuter/Déboguer/Profil) des propriétés du projet et des propriétés par défaut du projet comme -Duser.timezone="+02:00", mais cela ne fonctionnait pas pour moi. Enfin, la solution suivante a fonctionné pour moi. 

Ajoutez la ligne suivante au fichier de configuration de JDeveloper ( jdev.conf ). 

AddVMOption -Duser.timezone=UTC+02:00

Le fichier se trouve dans "<racine d'installation Oracle>\Middleware\jdeveloper\jdev\bin\jdev.conf".

1
Raj

J'ai pu résoudre le même problème en définissant le fuseau horaire dans mon système Linux (Centos6.5). 

Republier de 

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

  1. définir le fuseau horaire dans /etc/sysconfig/clock par ex. mis à ZONE = "America/Los_Angeles"

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

Pour déterminer la valeur du fuseau horaire, essayez de 

ls /usr/share/zoneinfo

et recherchez le fichier qui représente votre fuseau horaire. 

Une fois que vous avez défini ces paramètres, redémarrez la machine et réessayez.

1
adi-pradhan

J'ai rencontré ce problème avec Tomcat. Le paramétrage suivant dans $CATALINA_BASE/bin/setenv.sh a résolu le problème:

Java_OPTS=-Doracle.jdbc.timezoneAsRegion=false

Je suis sûr que l’utilisation de l’un des paramètres Java suggérés dans les autres réponses fonctionnerait de la même manière.

1
bonh

Face au même problème avec Eclipse et une base de données Oracle distante, la modification de mon fuseau horaire system pour correspondre au fuseau horaire du serveur de base de données a résolu le problème .Redémarrez l'ordinateur après avoir modifié l'heure système. zone.

J'espère que cela peut aider quelqu'un

0
S_intg

J'ai eu le même problème en essayant d'établir une connexion sur OBIEE to Oracle db . J'ai changé mon fuseau horaire Windows de (GMT + 01: 00) Afrique centrale occidentale à (GMT + 01: 00) Bruxelles, Copenhague, Madrid, Paris. Ensuite, j'ai redémarré mon ordinateur et cela a très bien fonctionné ... Il semblerait que Oracle ne soit pas en mesure de reconnaître le fuseau horaire de l'Afrique centrale et occidentale.

0
yushaa4dz

Java.sql.SQLException: ORA-00604: une erreur s'est produite lors de l'utilisation de SQL récursif niveau 1 ORA-01882: zone de fuseau horaire non trouvée

Pour ce type d'erreur, il suffit de changer l'heure de votre système au format GMT standard de votre pays.

par exemple. Le fuseau horaire de l'Inde est Chennai, Kolkata.

0
manjunatha H