Conte-nos sobre seu ambiente, como você executa seu java?
ABCade
Estou executando o aplicativo Java na linha de comando. Windows 7 de 64 bits, mas o Oracle DB está sendo executado em um servidor Unix remoto.
ndalama
9
tente adicionar "-Duser.timezone = <YOUR_GMT>" ao seu comando, não se esqueça de substituir <YOUR_GMT> pelo seu GMT, ou seja, -Duser.timezone = "+ 05:30"
ABCade
Respostas:
87
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=falseno 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=falseem arquivos de configuração que usam esta notação
Eu também consegui fazer 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: forums.oracle.com/forums/thread.jspa?threadID=1095807
Matteo Steccolini
33
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.
Matteo Steccolini
Obrigado stmsat. Funcionou para mim Mudei meu jar ojdbc para a versão 11.1.0.7.0 no diretório tomcat / lib e ele começou a funcionar :).
mdev
1
Estou usando o maven para construir e empacotar (war) meu projeto e implantar no Cloud Flare, há alguma maneira de definir essa propriedade a partir do arquivo application.properties ou do maven.
Ismail
41
Em uma instalação simples do SQL-Developer no Windows, vá para o diretório
Usando Jetbrains DataGrip e enfrentou o mesmo problema depois de adicionar esta opção VM, o problema foi resolvido
latsha
Obrigado, isso realmente ajudou muito!
Quinton
27
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
Não sei por que não gostou do fuso horário padrão 'Europa / Madrid'. Definir o fuso horário padrão para 'GMT' funciona.
fgui
22
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:
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
SELECTDISTINCT 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.
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.
A variável de ambiente "TZ = GMT" também funcionou para mim. Eu estava tendo problemas com um script de shell que configurava o ambiente para executar uma ferramenta separada que, por sua vez, acessava o Oracle.
David Keener
1
Tendo o mesmo problema, eu também tive que usar "TZ = Europa / Zurique" ao usar "formiga". Funcionou!
Christof Kälin
2
Esta deve ser a melhor resposta. Todas as outras respostas não funcionaram.
Alex Dembo
4
ERROR:
ORA-00604: ocorreu um erro no SQL recursivo nível 1 ORA-01882: região de fuso horário não encontrada
Linux, projeto de hibernação, driver ojdbc6 ao consultar o banco de dados oracle 11g.
Resolução
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.
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".
Para mim, ter certeza de que / etc / sysconfig / clock e o link / etc / localtime foram configurados corretamente foi basicamente um pré-requisito para resolver o problema ORA-01882.
David Keener,
1
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;
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.
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 aquiPor ú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çãofonte
Em uma instalação simples do SQL-Developer no Windows, vá para o diretório
e adicione
para arquivar
sqldeveloper.conf
.fonte
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:
novo Código:
agora está funcionando !!
fonte
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:
fonte
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
Tenho alguns servidores db que sabem sobre 'Etc / UTC' e 'UTC' (tzfile versão 18), mas outros conhecem apenas 'UTC' (tz versão 11).
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.
fonte
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
fonte
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.fonte
ERROR:
Solução: configuração do CIM no Centos.
Adicione estes argumentos java:
fonte
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.
fonte
Eu tive esse problema com o Tomcat. Definir o seguinte
$CATALINA_BASE/bin/setenv.sh
resolveu o problema:Tenho certeza de que usar uma das sugestões de parâmetro Java das outras respostas funcionaria da mesma maneira.
fonte
Eu também enfrentei um problema semelhante.
Meio Ambiente:
Linux, projeto de hibernação, driver ojdbc6 ao consultar o banco de dados oracle 11g.
Resolução
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.
fonte
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:
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.
fonte
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:
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 ).
O arquivo está localizado em "<raiz de instalação do oracle> \ Middleware \ jdeveloper \ jdev \ bin \ jdev.conf".
fonte
No meu caso, eu poderia fazer a consulta funcionar alterando "TZR" por "TZD".
fonte
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
e procure o arquivo que representa seu fuso horário.
Depois de configurá-los, reinicie a máquina e tente novamente.
fonte
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.
fonte
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);
fonte
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
fonte
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.
fonte