Estou acessando um banco de dados Oracle de um aplicativo java, quando executo meu aplicativo, recebo o seguinte erro:
java.sql.SQLException: ORA-00604: ocorreu um erro no SQL recursivo nível 1 ORA-01882: região de fuso horário não encontrada
Estou acessando um banco de dados Oracle de um aplicativo java, quando executo meu aplicativo, recebo o seguinte erro:
java.sql.SQLException: ORA-00604: ocorreu um erro no SQL recursivo nível 1 ORA-01882: região de fuso horário não encontrada
Respostas:
Você também pode tentar verificar a versão do driver Oracle jdbc e do banco de dados Oracle. Ainda hoje tive esse problema ao usar ojdbc6.jar (versão 11.2.0.3.0) para se conectar a um servidor Oracle 9.2.0.4.0. Substituí-lo pelo ojdbc6.jar versão 11.1.0.7.0 resolveu o problema.
Também consegui fazer o ojdbc6.jar versão 11.2.0.3.0 conectar-se sem erros, adicionando oracle.jdbc.timezoneAsRegion=false
no arquivo oracle / jdbc / defaultConnectionProperties.properties (dentro do jar). Encontrei esta solução aqui
Por último, pode-se adicionar -Doracle.jdbc.timezoneAsRegion=false
à linha de comando ou AddVMOption -Doracle.jdbc.timezoneAsRegion=false
em arquivos de configuração que usam esta notação
Em uma instalação simples do SQL-Developer no Windows, vá para o diretório
C:\Program Files\sqldeveloper\sqldeveloper\bin
e adicione
AddVMOption -Duser.timezone=CET
para arquivar sqldeveloper.conf
.
Erro que recebi:
Erro de db_connection.java - >> java.sql.SQLException: ORA-00604: ocorreu erro no SQL recursivo nível 1 ORA-01882: região de fuso horário não encontrada
ORA-00604: ocorreu um erro no SQL recursivo nível 1ORA-01882: região de fuso horário não encontrada
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;
}
novo 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;
}
agora está funcionando !!
Atualize o arquivo oracle / jdbc / defaultConnectionProperties.properties em qualquer versão da biblioteca (ou seja, dentro do seu jar) que você está usando para conter a linha abaixo:
oracle.jdbc.timezoneAsRegion=false
O que acontece é que o cliente JDBC envia o ID do fuso horário para o servidor. O servidor precisa conhecer essa zona. Você pode verificar com
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
Tenho alguns servidores db que sabem sobre 'Etc / UTC' e 'UTC' (tzfile versão 18), mas outros conhecem apenas 'UTC' (tz versão 11).
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
Também há um comportamento diferente no lado do cliente JDBC. Começando com 11.2, o driver enviará os IDs de zona se forem "conhecidos" pelo Oracle, enquanto antes de enviar o deslocamento de tempo. O problema com esse "envio de IDs conhecidos" é que o cliente não verifica qual versão / conteúdo de fuso horário está presente no servidor, mas tem sua própria lista.
Isso é explicado no Artigo de Suporte da Oracle [ID 1068063.1].
Parece que também depende do SO cliente, é mais provável que Etc / UTC falhe com Ubuntu do que RHEL ou Windows. Acho que isso se deve a alguma normalização, mas ainda não descobri o que exatamente.
no eclipse, vá executar -> execute a configuração
lá, vá para a guia JRE nos painéis do lado direito
na seção de argumentos VM cole isto
-Duser.timezone=GMT
em seguida, Aplicar -> Executar
Tive esse problema ao executar testes automatizados em um servidor de integração contínua. Tentei adicionar o argumento VM " -Duser.timezone=GMT
" aos parâmetros de construção, mas isso não resolveu o problema. No entanto, adicionar a variável de ambiente " TZ=GMT
" corrigiu isso para mim.
ERROR:
ORA-00604: ocorreu um erro no SQL recursivo nível 1 ORA-01882: região de fuso horário não encontrada
Solução: configuração do CIM no Centos.
/opt/oracle/product/ATG/ATG11.2/home/bin/dynamoEnv.sh
Adicione estes argumentos java:
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=EDT"
No Netbeans,
Clique em Ok e execute novamente o programa.
Nota: Você também pode definir para outras datas além de UTC e GMT.
Eu também enfrentei um problema semelhante.
Linux, projeto de hibernação, driver ojdbc6 ao consultar o banco de dados oracle 11g.
O parâmetro TZ não foi configurado na máquina linux, que basicamente informa ao oracle sobre o fuso horário. Então, depois de adicionar a instrução de exportação "export TZ = UTC" no momento do início do aplicativo, resolvi meu problema.
UTC -> Alterar de acordo com seu fuso horário.
Se o problema estiver no JDeveloper: Altere as propriedades do projeto para o modelo e para o projeto de visualização -> executar / depurar -> perfil padrão -> editar, adicione a seguinte opção de execução: -Duser.timezone = Asia / Calcutta
Certifique-se de que o valor de fuso horário acima seja obtido em seu banco de dados da seguinte maneira:
select TZNAME from V$TIMEZONE_NAMES;
Junto com isso, você deseja verificar as configurações de fuso horário em seu jdev.conf, bem como no JDeveloper -> Menu do aplicativo -> Propriedades do projeto padrão -> Executar / Depurar -> Perfil padrão -> Opções de execução.
Eu também tive o mesmo problema quando tentei criar uma conexão no JDeveloper. Nosso servidor está localizado em um fuso horário diferente e, portanto, gerou os erros abaixo como:
ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found
Mencionei muitos fóruns que pediam para incluir o fuso horário nas opções Java (Executar / Depurar / Perfil) das propriedades do projeto e propriedades padrão do projeto como -Duser.timezone="+02:00"
mas não funcionou para mim. Finalmente, a seguinte solução funcionou para mim.
Adicione a seguinte linha ao arquivo de configuração do JDeveloper ( jdev.conf ).
AddVMOption -Duser.timezone=UTC+02:00
O arquivo está localizado em "<raiz de instalação do oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf".
No meu caso, eu poderia fazer a consulta funcionar alterando "TZR" por "TZD".
String query = "select * from table1 to_timestamp_tz(origintime,'dd-mm-yyyy hh24:mi:ss TZD') between ? and ?";
Consegui resolver o mesmo problema configurando o fuso horário no meu sistema Linux (Centos6.5).
Repostagem de
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
definir fuso horário, por /etc/sysconfig/clock
exemplo, definir como ZONE = "America / Los_Angeles"
sudo ln -sf / usr / share / zoneinfo / America / Phoenix / etc / localtime
Para descobrir o valor do fuso horário, tente
ls /usr/share/zoneinfo
e procure o arquivo que representa seu fuso horário.
Depois de configurá-los, reinicie a máquina e tente novamente.
Tive o mesmo problema ao tentar fazer uma conexão no OBIEE ao Oracle db. Mudei meu fuso horário do Windows de (GMT + 01: 00) da África Central Ocidental para (GMT + 01: 00) Bruxelas, Copenhague, Madrid, Paris. Então eu reiniciei meu computador e funcionou perfeitamente. Parece que a Oracle não foi capaz de reconhecer o fuso horário da África Central Ocidental.
Este problema ocorre porque o código que está tentando se conectar ao db tem um fuso horário que não está no db. Ele também pode ser resolvido configurando o fuso horário conforme abaixo ou qualquer fuso horário válido disponível no oracle db. fuso horário válido que pode ser encontrado select * from v $ version;
System.setProperty ("user.timezone", "America / New_York"); TimeZone.setDefault (null);
Enfrentando o mesmo problema usando Eclipse e um banco de dados Oracle distante, alterar o fuso horário do meu sistema para corresponder ao fuso horário do servidor de banco de dados corrigiu o problema. Reinicie a máquina após alterar o fuso horário do sistema.
Espero que isso possa ajudar alguém
java.sql.SQLException: ORA-00604: ocorreu um erro no SQL recursivo nível 1 ORA-01882: região de fuso horário não encontrada
Para este tipo de erro, basta alterar a hora do sistema para o formato GMT padrão do seu país
por exemplo, o fuso horário indiano é chennai, kolkata.