ORA-01882: regione del fuso orario non trovata


102

Sto accedendo a un database Oracle da un'applicazione java, quando eseguo la mia applicazione ottengo il seguente errore:

java.sql.SQLException: ORA-00604: si è verificato un errore a livello SQL ricorsivo 1 ORA-01882: regione del fuso orario non trovata


Parlaci del tuo ambiente, come gestisci il tuo java?
ABC,

Sto eseguendo l'applicazione Java sulla riga di comando. Windows 7 a 64 bit, ma Oracle DB è in esecuzione su un server Unix remoto.
ndalama

9
prova ad aggiungere "-Duser.timezone = <YOUR_GMT>" al tuo comando, non dimenticare di sostituire <YOUR_GMT> con il tuo GMT, ovvero -Duser.timezone = "+ 05:30"
ABC dal

Risposte:


87

Puoi anche provare a controllare la versione del driver jdbc Oracle e del database Oracle. Proprio oggi ho riscontrato questo problema utilizzando ojdbc6.jar (versione 11.2.0.3.0) per connettermi a un server Oracle 9.2.0.4.0. Sostituirlo con ojdbc6.jar versione 11.1.0.7.0 ha risolto il problema.

Sono anche riuscito a connettere ojdbc6.jar versione 11.2.0.3.0 senza errori, aggiungendo oracle.jdbc.timezoneAsRegion=falsenel file oracle / jdbc / defaultConnectionProperties.properties (all'interno del jar). Ho trovato questa soluzione qui

Infine, è possibile aggiungere -Doracle.jdbc.timezoneAsRegion=falsealla riga di comando o AddVMOption -Doracle.jdbc.timezoneAsRegion=falsenei file di configurazione che utilizzano questa notazione


24
Sono anche riuscito a fare in modo che ojdbc6.jar versione 11.2.0.3.0 si connetta senza errori, aggiungendo oracle.jdbc.timezoneAsRegion = false nel file oracle / jdbc / defaultConnectionProperties.properties (all'interno del jar). Ho trovato questa soluzione qui: forums.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini

33
Infine, si può aggiungere -Doracle.jdbc.timezoneAsRegion = false alla riga di comando, o AddVMOption -Doracle.jdbc.timezoneAsRegion = false nei file di configurazione che utilizzano questa notazione.
Matteo Steccolini

Grazie stmsat. Ha funzionato per me. Ho cambiato il mio jar ojdbc alla versione 11.1.0.7.0 nella directory tomcat / lib e ha iniziato a funzionare :).
mdev

1
Sto usando Maven per creare e confezionare (war) il mio progetto e distribuirlo in Cloud Flare, esiste un modo per impostare questa proprietà dal file application.properties o da Maven.
Ismail

41

In una semplice installazione di SQL-Developer in Windows vai alla directory

C:\Program Files\sqldeveloper\sqldeveloper\bin

e aggiungi

AddVMOption -Duser.timezone=CET

archiviare sqldeveloper.conf.


Utilizzando Jetbrains DataGrip e affrontato lo stesso problema dopo aver aggiunto questa opzione VM, il problema è stato risolto
latsha

Grazie, questo mi ha davvero aiutato molto!
Quinton

27

Errore che ho ricevuto:

Errore da db_connection.java - >> java.sql.SQLException: ORA-00604: si è verificato un errore a livello SQL ricorsivo 1 ORA-01882: regione del fuso orario non trovata

ORA-00604: si è verificato un errore a livello SQL ricorsivo 1ORA-01882: regione del fuso orario non trovata

Codice precedente:

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

nuovo codice:

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

ora funziona !!


Grazie, è esattamente quello di cui avevo bisogno!
Alan Thompson

Non so perché non gli piaceva il fuso orario predefinito "Europa / Madrid". L'impostazione del fuso orario predefinito su "GMT" funziona.
fgui

22

Aggiorna il file oracle / jdbc / defaultConnectionProperties.properties in qualsiasi versione della libreria (cioè all'interno del tuo jar) che stai utilizzando per contenere la riga seguente:

oracle.jdbc.timezoneAsRegion=false

19

Quello che succede è che il client JDBC invia l'ID del fuso orario al server. Il server deve conoscere quella zona. Puoi controllare con

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

Ho alcuni server db che conoscono "Etc / UTC" e "UTC" (tzfile versione 18) ma altri conoscono solo "UTC" (tz versione 11).

SELECT FILENAME,VERSION from V$TIMEZONE_FILE;

C'è anche un comportamento diverso sul lato client JDBC. A partire dalla 11.2 il driver invierà gli ID di zona se è "noto" a Oracle, mentre prima inviava il time offset. Il problema con questo "invio di ID conosciuti" è che il client non controlla quale versione / contenuto del fuso orario è presente sul server ma ha un proprio elenco.

Ciò è spiegato nell'articolo di supporto Oracle [ID 1068063.1].

Sembra che dipenda anche dal sistema operativo client, era più probabile che Etc / UTC fallisse con Ubuntu rispetto a RHEL o Windows. Immagino che ciò sia dovuto a una certa normalizzazione, ma non ho capito cosa esattamente.


14
  1. in eclipse vai corri -> esegui configurazione

  2. lì vai alla scheda JRE nei pannelli laterali di destra

  3. nella sezione Argomenti VM incolla questo

    -Duser.timezone=GMT

  4. quindi Applica -> Esegui


8

Ho avuto questo problema durante l'esecuzione di test automatizzati da un server di integrazione continua. Ho provato ad aggiungere l'argomento VM " -Duser.timezone=GMT" ai parametri di build, ma questo non ha risolto il problema. Tuttavia, l'aggiunta della variabile di ambiente " TZ=GMT" ha risolto il problema per me.


2
Anche la variabile d'ambiente "TZ = GMT" ha funzionato per me. Avevo problemi con uno script di shell che impostava l'ambiente per l'esecuzione di uno strumento separato che, a sua volta, accedeva a Oracle.
David Keener

1
Avendo lo stesso problema, anch'io ho dovuto usare "TZ = Europe / Zurich" quando usavo "ant". Ha funzionato!
Christof Kälin

2
Questa dovrebbe essere la risposta migliore. Tutte le altre risposte non hanno funzionato.
Alex Dembo

4

ERRORE:

ORA-00604: si è verificato un errore a livello SQL ricorsivo 1 ORA-01882: regione del fuso orario non trovata

Soluzione: configurazione CIM in Centos.

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

Aggiungi questi argomenti java:

JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"

3

In Netbeans,

  1. Fare clic con il pulsante destro del mouse sul progetto -> Proprietà
  2. Vai a Esegui (in Categorie)
  3. Immettere -Duser.timezone = UTC o -Duser.timezone = GMT in Opzioni VM.

Fare clic su OK, quindi eseguire nuovamente il programma.

Nota: puoi anche impostare altri tempi oltre a UTC e GMT.


2

Mi sono imbattuto in questo problema con Tomcat. L'impostazione di quanto segue ha $CATALINA_BASE/bin/setenv.shrisolto il problema:

JAVA_OPTS=-Doracle.jdbc.timezoneAsRegion=false

Sono sicuro che l'utilizzo di uno dei suggerimenti sui parametri Java dalle altre risposte funzionerebbe allo stesso modo.


2

Ho anche affrontato un problema simile.

Ambiente:

Linux, progetto di ibernazione, driver ojdbc6 durante l'interrogazione del database oracle 11g.

Risoluzione

Il parametro TZ non è stato impostato nella macchina Linux, che fondamentalmente dice a Oracle del fuso orario. Quindi, dopo aver aggiunto l'istruzione di esportazione "export TZ = UTC" al momento dell'inizio dell'applicazione, il problema è stato risolto.

UTC -> Cambia in base al tuo fuso orario.


2

Se questo problema è in JDeveloper: Modifica le proprietà del progetto sia per il modello che per il progetto di visualizzazione -> esegui / debug -> profilo predefinito -> modifica aggiungi la seguente opzione di esecuzione: -Duser.timezone = Asia / Calcutta

Assicurati che il valore del fuso orario sopra riportato venga recuperato dal tuo database come segue:

select TZNAME from V$TIMEZONE_NAMES;

Oltre a ciò, dovresti controllare le impostazioni del fuso orario nel tuo jdev.conf così come nel JDeveloper -> Menu applicazione -> Proprietà del progetto predefinito -> Esegui / Debug -> Profilo predefinito -> Opzioni di esecuzione.


1

Anch'io ho avuto lo stesso problema quando ho provato a creare una connessione in JDeveloper. Il nostro server si trova in un fuso orario diverso e quindi ha generato i seguenti errori come:

ORA-00604: error occurred at recursive SQL level 1 

ORA-01882: timezone region not found

Ho fatto riferimento a molti forum che chiedevano di includere il fuso orario nelle Opzioni Java (Esegui / Debug / Profilo) delle proprietà del progetto e delle proprietà del progetto predefinito, -Duser.timezone="+02:00"ma non ha funzionato per me. Finalmente la seguente soluzione ha funzionato per me.

Aggiungere la seguente riga al file di configurazione di JDeveloper ( jdev.conf ).

AddVMOption -Duser.timezone=UTC+02:00

Il file si trova in "<root installazione Oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf".


1

Nel mio caso potrei far funzionare la query cambiando "TZR" con "TZD" ..

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

1

Sono stato in grado di risolvere lo stesso problema impostando il fuso orario nel mio sistema Linux (Centos6.5).

Ripubblicare da

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

  1. imposta il fuso orario ad /etc/sysconfig/clockes. impostato su ZONE = "America / Los_Angeles"

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

Per capire il valore del fuso orario, prova a

ls /usr/share/zoneinfo

e cerca il file che rappresenta il tuo fuso orario.

Una volta impostati, riavvia la macchina e riprova.


2
Per me, assicurarmi che / etc / sysconfig / clock e il collegamento / etc / localtime fossero impostati correttamente era fondamentalmente un prerequisito per risolvere il problema ORA-01882.
David Keener

1

Ho avuto lo stesso problema durante il tentativo di connessione su OBIEE a Oracle db. Ho cambiato il fuso orario di Windows da (GMT + 01: 00) Africa centrale occidentale a (GMT + 01: 00) Bruxelles, Copenaghen, Madrid, Parigi. Poi ho riavviato il mio computer e ha funzionato bene. Sembra che Oracle non sia stata in grado di riconoscere il fuso orario dell'Africa centro-occidentale.


1

Questo problema si verifica quando il codice che sta tentando di connettersi a db ha un fuso orario che non è in db. Può anche essere risolto impostando il fuso orario come di seguito o qualsiasi fuso orario valido disponibile in Oracle db. fuso orario valido che può essere trovato selezionare * dalla versione v $;

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


0

Affrontare lo stesso problema utilizzando Eclipse e un database Oracle distante, cambiando il fuso orario del mio sistema in modo che corrisponda al fuso orario del server di database ha risolto il problema. Riavviare la macchina dopo aver modificato il fuso orario del sistema.

Spero che questo possa aiutare qualcuno


0

java.sql.SQLException: ORA-00604: si è verificato un errore a livello SQL ricorsivo 1 ORA-01882: regione del fuso orario non trovata

Per questo tipo di errore, cambia semplicemente l'ora di sistema nel formato GMT standard del tuo paese

ad esempio, il fuso orario indiano è chennai, kolkata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.