ORA-01882: región de zona horaria no encontrada

102

Estoy accediendo a una base de datos Oracle desde una aplicación java, cuando ejecuto mi aplicación obtengo el siguiente error:

java.sql.SQLException: ORA-00604: se produjo un error en el nivel 1 de SQL recursivo ORA-01882: no se encontró la región de la zona horaria

ndalama
fuente
Cuéntenos sobre su entorno, ¿cómo ejecuta su java?
ABCade
Estoy ejecutando la aplicación Java en la línea de comandos. Windows 7 de 64 bits, pero Oracle DB se está ejecutando en un servidor Unix remoto.
ndalama
9
intente agregar "-Duser.timezone = <YOUR_GMT>" a su comando, no olvide reemplazar <YOUR_GMT> con su GMT, es decir, -Duser.timezone = "+ 05:30"
ABCade

Respuestas:

87

También puede intentar verificar la versión del controlador jdbc de Oracle y la base de datos de Oracle. Hoy mismo tuve este problema al usar ojdbc6.jar (versión 11.2.0.3.0) para conectarme a un servidor Oracle 9.2.0.4.0. Reemplazarlo con ojdbc6.jar versión 11.1.0.7.0 resolvió el problema.

También logré hacer que ojdbc6.jar versión 11.2.0.3.0 se conecte sin errores, agregando el oracle.jdbc.timezoneAsRegion=falsearchivo oracle / jdbc / defaultConnectionProperties.properties (dentro del jar). Encontré esta solución aquí

Por último, se puede agregar -Doracle.jdbc.timezoneAsRegion=falsea la línea de comando, o AddVMOption -Doracle.jdbc.timezoneAsRegion=falseen archivos de configuración que usan esta notación

Matteo Steccolini
fuente
24
También logré hacer que ojdbc6.jar versión 11.2.0.3.0 se conecte sin errores, agregando oracle.jdbc.timezoneAsRegion = false en el archivo oracle / jdbc / defaultConnectionProperties.properties (dentro del jar). Encontré esta solución aquí: forums.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini
33
Por último, se puede agregar -Doracle.jdbc.timezoneAsRegion = false a la línea de comando, o AddVMOption -Doracle.jdbc.timezoneAsRegion = false en los archivos de configuración que usan esta notación.
Matteo Steccolini
Gracias stmsat. Funcionó para mí. Cambié mi jar ojdbc a la versión 11.1.0.7.0 en el directorio tomcat / lib y comenzó a funcionar :).
mdev
1
Estoy usando maven para construir y empaquetar (guerra) mi proyecto e implementarlo en Cloud Flare, ¿hay alguna forma de configurar esta propiedad desde el archivo application.properties o desde maven?
Ismail
40

En una instalación simple de SQL-Developer en Windows, vaya al directorio

C:\Program Files\sqldeveloper\sqldeveloper\bin

y añadir

AddVMOption -Duser.timezone=CET

archivar sqldeveloper.conf.

Marcus Rickert
fuente
Usando Jetbrains DataGrip y enfrenté el mismo problema después de agregar esta opción de VM, el problema se resolvió
latsha
¡Gracias, esto realmente ayudó mucho!
Quinton
27

Error que tengo:

Error de db_connection.java - >> java.sql.SQLException: ORA-00604: se produjo un error en el nivel 1 de SQL recursivo ORA-01882: no se encontró la región de la zona horaria

ORA-00604: se produjo un error en el nivel de SQL recursivo 1ORA-01882: no se encontró la región de la zona horaria

Código anterior:

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

nuevo código:

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

ahora esta funcionando !!

Waruna Sri Jayanth
fuente
¡Gracias, eso es exactamente lo que necesitaba!
Alan Thompson
No sé por qué no le gustó la zona horaria predeterminada 'Europa / Madrid'. La configuración de la zona horaria predeterminada en 'GMT' funciona.
fgui
22

Actualice el archivo oracle / jdbc / defaultConnectionProperties.properties en cualquier versión de la biblioteca (es decir, dentro de su jar) que esté utilizando para contener la siguiente línea:

oracle.jdbc.timezoneAsRegion=false
Babatunde Adeyemi
fuente
19

Lo que sucede es que el cliente JDBC envía el ID de zona horaria al servidor. El servidor necesita conocer esa zona. Puedes consultar con

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

Tengo algunos servidores de base de datos que conocen 'Etc / UTC' y 'UTC' (tzfile versión 18) pero otros solo conocen 'UTC' (tz versión 11).

SELECT FILENAME,VERSION from V$TIMEZONE_FILE;

También hay un comportamiento diferente en el lado del cliente JDBC. A partir de 11.2, el controlador enviará los ID de zona si es "conocido" por Oracle, mientras que antes enviaba la diferencia horaria. El problema con este "envío de ID conocidos" es que el cliente no comprueba qué versión / contenido de zona horaria está presente en el servidor, pero tiene su propia lista.

Esto se explica en el artículo de soporte de Oracle [ID 1068063.1].

Parece que también depende del sistema operativo del cliente, era más probable que Etc / UTC fallara con Ubuntu que con RHEL o Windows. Supongo que esto se debe a una cierta normalización, pero no he descubierto qué es exactamente.

eckes
fuente
14
  1. en eclipse ir a ejecutar -> ejecutar configuración

  2. allí, vaya a la pestaña JRE en los paneles laterales derechos

  3. en la sección Argumentos de VM pegue esto

    -Duser.timezone=GMT

  4. luego Aplicar -> Ejecutar

Priyan en el diálogo
fuente
8

Tuve este problema al ejecutar pruebas automatizadas desde un servidor de integración continua. Intenté agregar el argumento de VM " -Duser.timezone=GMT" a los parámetros de compilación, pero eso no resolvió el problema. Sin embargo, agregar la variable de entorno " TZ=GMT" lo solucionó.

Mate
fuente
2
La variable de entorno "TZ = GMT" también funcionó para mí. Tenía problemas con un script de shell que configuraba el entorno para ejecutar una herramienta separada que, a su vez, accedía a Oracle.
David Keener
1
Teniendo el mismo problema, yo también tuve que usar "TZ = Europe / Zurich" cuando usé "ant". ¡Funcionó!
Christof Kälin
2
Esta debería ser la mejor respuesta. Todas las demás respuestas no funcionaron.
Alex Dembo
4

ERROR:

ORA-00604: se produjo un error en el nivel 1 de SQL recursivo ORA-01882: no se encontró la región de la zona horaria

Solución: configuración de CIM en Centos.

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

Agregue estos argumentos de Java:

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

En Netbeans,

  1. Haga clic derecho en su proyecto -> Propiedades
  2. Ir a Ejecutar (en Categorías)
  3. Ingrese -Duser.timezone = UTC o -Duser.timezone = GMT en Opciones de VM.

Haga clic en Aceptar, luego vuelva a ejecutar su programa.

Nota: También puede configurar otras piedras de tiempo además de UTC y GMT.

Babatunde Adeyemi
fuente
2

Me encontré con este problema con Tomcat. Establecer lo siguiente en $CATALINA_BASE/bin/setenv.shresolvió el problema:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

Estoy seguro de que usar una de las sugerencias de parámetros de Java de las otras respuestas funcionaría de la misma manera.

bonh
fuente
2

También me enfrenté a un problema similar.

Ambiente:

Linux, proyecto de hibernación, controlador ojdbc6 al consultar la base de datos Oracle 11g.

Resolución

El parámetro TZ no se configuró en la máquina Linux, que básicamente le dice a Oracle sobre la zona horaria. Entonces, después de agregar la declaración de exportación "exportar TZ = UTC" en el momento del inicio de la aplicación, resolví mi problema.

UTC -> Cambiar según su zona horaria.

usuario3721248
fuente
2

Si este problema está en JDeveloper: cambie las propiedades del proyecto tanto para el modelo como para la vista del proyecto -> ejecutar / depurar -> perfil predeterminado -> editar agregue la siguiente opción de ejecución: -Duser.timezone = Asia / Calcutta

Asegúrese de que el valor de la zona horaria anterior se obtenga de su base de datos de la siguiente manera:

select TZNAME from V$TIMEZONE_NAMES;

Junto con eso, querrá verificar la configuración de la zona horaria en su jdev.conf, así como en JDeveloper -> Menú de aplicación -> Propiedades predeterminadas del proyecto -> Ejecutar / Depurar -> Perfil predeterminado -> Opciones de ejecución.

Mukul Rana
fuente
1

Yo también tuve el mismo problema cuando intenté crear una conexión en JDeveloper. Nuestro servidor se encuentra en una zona horaria diferente y, por lo tanto, generó los siguientes errores como:

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found

Hice referencia a muchos foros que pedían incluir la zona horaria en las Opciones de Java (Ejecutar / Depurar / Perfil) de las propiedades del proyecto y las propiedades del proyecto predeterminado como -Duser.timezone="+02:00"b, pero no funcionó para mí. Finalmente, la siguiente solución funcionó para mí.

Agregue la siguiente línea al archivo de configuración de JDeveloper ( jdev.conf ).

AddVMOption -Duser.timezone=UTC+02:00

El archivo se encuentra en "<raíz de instalación de Oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf".

Raj
fuente
1

En mi caso, podría hacer que la consulta funcionara cambiando "TZR" por "TZD" ..

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

Pude resolver el mismo problema configurando la zona horaria en mi sistema Linux (Centos6.5).

Reposicionando desde

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

  1. establecer la zona horaria en, /etc/sysconfig/clockpor ejemplo, establecer en ZONE = "America / Los_Angeles"

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

Para averiguar el valor de la zona horaria, intente

ls /usr/share/zoneinfo

y busque el archivo que representa su zona horaria.

Una vez que haya configurado estos, reinicie la máquina e intente nuevamente.

adi-pradhan
fuente
2
Para mí, asegurarme de que / etc / sysconfig / clock y el enlace / etc / localtime estuvieran configurados correctamente era básicamente un requisito previo para resolver el problema ORA-01882.
David Keener
1

Tuve el mismo problema al intentar hacer una conexión en OBIEE a Oracle db. Cambié mi zona horaria de Windows de (GMT + 01: 00) África Central Occidental a (GMT + 01: 00) Bruselas, Copenhague, Madrid, París. Luego reinicié mi computadora y funcionó bien. Parece que Oracle no pudo reconocer la zona horaria de África central occidental.

yushaa yave
fuente
1

Este problema ocurre porque el código que está intentando conectarse a db tiene una zona horaria que no está en db. También se puede resolver configurando la zona horaria como se muestra a continuación o cualquier zona horaria válida disponible en Oracle db. zona horaria válida que se puede encontrar seleccione * de v $ versión;

System.setProperty ("user.timezone", "America / New_York"); TimeZone.setDefault (nulo);

Uday Singh
fuente
0

Al enfrentar el mismo problema con Eclipse y una base de datos Oracle distante, cambiar la zona horaria de mi sistema para que coincida con la zona horaria del servidor de la base de datos solucionó el problema. Reinicie la máquina después de cambiar la zona horaria del sistema.

Espero que esto pueda ayudar a alguien

S_intg
fuente
0

java.sql.SQLException: ORA-00604: se produjo un error en el nivel 1 de SQL recursivo ORA-01882: no se encontró la región de la zona horaria

Para este tipo de error, simplemente cambie la hora de su sistema al formato GMT estándar de su país

por ejemplo, la zona horaria de la India es chennai, kolkata.

manjunatha H
fuente