ORA-01882: région de fuseau horaire introuvable
J'accède à une base de données Oracle à partir d'une application java, lorsque j'exécute mon application, j'obtiens l'erreur suivante:
Java.SQL.SQLException: ORA-00604: erreur survenue au niveau SQL récursif 1 ORA-01882: région de fuseau horaire introuvable
17 réponses
Vous pouvez également essayer de vérifier la version du pilote Oracle JDBC et de la base de données Oracle. Juste aujourd'hui, j'ai eu ce problème lors de l'utilisation ojdbc6.jar (version 11.2.0.3.0) pour se connecter à un serveur Oracle 9.2.0.4.0. Le remplacer par ojdbc6.jar version 11.1.0.7.0 résolu le problème.
Dans une installation simple de SQL-Developer sous Windows, allez dans le répertoire
C:\Program Files\sqldeveloper\sqldeveloper\bin
Et ajouter
AddVMOption -Duser.timezone=CET
Dans le fichier sqldeveloper.conf
.
Erreur que j'ai eu:
Erreur de db_connection.java -->> java.SQL.SQLException: ORA-00604: erreur survenue au niveau SQL récursif 1 ORA-01882: région de fuseau horaire introuvable
ORA-00604: erreur survenue au niveau SQL récursif 1ORA-01882: région 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!!
Mettez à jour le fichier oracle/JDBC/defaultConnectionProperties.properties dans n'importe quelle version de la bibliothèque (c'est-à-dire à l'intérieur de votre jar) que vous utilisez pour contenir la ligne ci-dessous:
oracle.jdbc.timezoneAsRegion=false
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 db qui connaissent 'Etc / UTC' et ' UTC '(tzfile version 18) mais d'autres ne connaissent que 'UTC' (TZ version 11).
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 ID de zone s'il est "connu" à Oracle, alors qu'avant il a envoyé le décalage horaire. Le problème avec cette "envoi d'identifiants connus" est, que le client ne vérifie pas quelle version/contenu du fuseau horaire est présent sur le serveur, mais a 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 compris quoi exactement.
Dans eclipse aller exécuter - > configuration d'exécution
-
Là, allez à JRE onglet dans les panneaux latéraux de droite
-
Dans la section Arguments VM collez ceci
-Duser.timezone=GMT
-
Ensuite, Appliquer - > Exécuter
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
" l'a corrigé pour moi.
Erreur:
ORA-00604: erreur survenue au niveau SQL récursif 1 ORA-01882: région de 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"
Dans Netbeans,
- Cliquez avec le bouton droit sur votre projet - > Propriétés
- Aller à exécuter (sous catégories)
- Entrez-Duser.fuseau horaire = UTC ou-Duser.timezone = GMT sous Options VM.
Cliquez sur Ok, puis relancez votre programme.
Remarque: Vous pouvez également définir d'autres fuseaux horaires en dehors de UTC et GMT.
Si ce problème est 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 ajoutez l'option d'exécution suivante: - Duser.fuseau horaire = 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;
Parallèlement à cela, vous voudriez vérifier les paramètres de fuseau horaire dans votre jdev.conf ainsi que dans le JDeveloper - > menu Application - > default project Propertes - > Run / Debug - > Profil Par Défaut - > Options D'Exécution.
J'ai aussi 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 donc il a soulevé les erreurs ci-dessous comme:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
J'ai fait référence à de nombreux forums qui ont demandé d'inclure le fuseau horaire dans les Options Java (Run / Debug / Profile) des propriétés du projet et des propriétés du projet par défaut comme -Duser.timezone="+02:00"
bmais cela n'a pas fonctionné 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 " \ Middleware\jdeveloper\jdev\bin \ jdev.conf".
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 ?";
J'ai rencontré ce problème avec Tomcat. Définir ce qui suit 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'une des suggestions de paramètres Java des autres réponses fonctionnerait de la même manière.
J'ai également 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 explique essentiellement à oracle le fuseau horaire. Donc, après avoir ajouté la déclaration d'exportation "export TZ = UTC"au moment du début de l'application, j'ai résolu mon problème.
UTC -- > changer accorind à votre fuseau horaire.
J'ai pu résoudre le même problème en définissant le fuseau horaire dans mon système linux (Centos6. 5).
Reposter à partir de
Http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
-
Définir le fuseau horaire dans
/etc/sysconfig/clock
par exemple définir ZONE= "America / Los_Angeles" Sudo ln -sf /usr/share/zoneinfo/Amérique/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 les avez définis, redémarrez la machine et réessayez.
Face au même problème en utilisant Eclipse et une base de données Oracle distante, changer mon fuseau horaire système pour correspondre au fuseau horaire du serveur de base de données a résolu le problème. Redémarrez la machine Après avoir changé le fuseau horaire du système.
J'espère que cela peut aider quelqu'un
Java.SQL.SQLException: ORA-00604: erreur survenue au SQL récursif niveau 1 ORA-01882: région de fuseau horaire introuvable
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 indien est chennai, kolkata.