Temos um aplicativo em execução localmente, onde estamos enfrentando o seguinte erro:
ORA-12514: TNS: o ouvinte atualmente não conhece o serviço solicitado no descritor de conexão
Testei a conexão usando o TNSPing
que foi resolvido corretamente e tentei SQLPlus
conectar, que falhou com o mesmo erro acima. Eu usei esta sintaxe para SQLPlus
:
sqlplus username/password@addressname[or host name]
Verificamos que:
- o TNS Listener no servidor está em execução.
- O próprio Oracle no servidor está em execução.
Não conhecemos nenhuma alteração feita nesse ambiente. Mais alguma coisa que possamos testar?
Respostas:
Eu tive esse problema e a correção foi para se certificar de
tnsnames.ora
oSERVICE_NAME
é um nome de serviço válido no banco de dados. Para descobrir nomes de serviço válidos, você pode usar a seguinte consulta no oracle:Depois que eu atualizei
tnsnames.ora
para:então eu corri:
Sucesso! O ouvinte está basicamente dizendo que qualquer nome de serviço que você esteja usando não é um serviço válido, de acordo com o banco de dados.
(* Eu estava executando o sqlplus da estação de trabalho do cliente Win7 no banco de dados remoto e culpe os DBAs;) *)
fonte
Eu sei que essa é uma pergunta antiga, mas ainda sem resposta. Levei um dia de pesquisa, mas encontrei a solução mais simples, pelo menos no meu caso (Oracle 11.2 no Windows 2008 R2) e queria compartilhar.
O erro, se analisado diretamente, indica que o ouvinte não reconhece o nome do serviço. Mas onde ele mantém os nomes dos serviços? No
%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
O "SID_LIST" é apenas isso, uma lista de SIDs e nomes de serviço emparelhados em um formato que você pode copiar ou procurar.
Adicionei o problema Nome do serviço e, no painel de controle "Serviços" do Windows, fiz um "Reiniciar" no serviço de ouvinte do Oracle. Agora está tudo bem.
Por exemplo, seu arquivo listener.ora pode inicialmente parecer com:
... E para fazer com que ele reconheça um nome de serviço
orcl
, você pode alterá-lo para:fonte
listener.ora
armazena os nomes. Eu nem tenho umlistener.ora
arquivo. Também estou em uma estação de trabalho cliente executando o SQL Developer e tentando apenas criar um link de banco de dados quando recebo o erro. Não tenho um serviço do Oracle Listener para reiniciar.Eu tive esse problema no Windows Server 2008 R2 e Oracle 11g
Se você não tiver nenhuma entrada para serviços de banco de dados, crie uma e defina o banco de dados global correto
sid
e o oracle home.fonte
Nas minhas circunstâncias, o erro ocorreu devido ao fato de o ouvinte não ter o serviço do banco de dados registrado. Resolvi isso registrando os serviços. Exemplo:
Meu descritor em
tnsnames.ora
:Portanto, procuro registrar o serviço
listener.ora
manualmente:Por fim, reinicie o ouvinte por comando:
Feito!
fonte
Iniciar o OracleServiceXXX a partir do services.msc funcionou para mim no Windows.
fonte
Isso realmente deve ser um comentário à resposta de Brad Rippe , mas infelizmente, não é o suficiente. Essa resposta me levou 90% do caminho até lá. No meu caso, a instalação e a configuração dos bancos de dados colocam entradas no arquivo tnsnames.ora para os bancos de dados que eu estava executando. Primeiro, consegui me conectar ao banco de dados definindo as variáveis de ambiente (Windows):
e depois conectar usando
Em seguida, executando o comando da resposta de Brad Rippe:
mostrou que os nomes não correspondiam exatamente. As entradas criadas usando o Assistente de Configuração de Banco de Dados da Oracle onde originalmente:
O nome do serviço da consulta era apenas um
mydatabase
poucomydatabase.mydomain.com
. Eu editei o arquivo tnsnames.ora apenas para o nome base, sem a parte do domínio, para que parecessem assim:Eu reiniciado o serviço TNS Listener (muitas vezes eu uso
lsnrctl stop
elsnrctl start
de uma janela de comando do administrador [ou o Windows PowerShell] em vez do painel de controle Serviços, mas ambos trabalham.) Depois disso, eu era capaz de se conectar.fonte
Eu tive o mesmo problema. Para mim, apenas escrevendo
fiz o truque, isso faz com que ele se conecte ao nome do serviço padrão, eu acho.
fonte
jdbc:oracle:thin:@//localhost:1521/orcl
. A seqüência de conexão corrigida para eliminar esse erro foi:jdbc:oracle:thin:@localhost:1521
.o que funcionou para mim foi realmente simples, eu só precisava iniciar o serviço manualmente no "Windows Services" (services.msc no cmd trompt). meu nome de serviço é: OracleServiceXXXXX.
fonte
Verifique se o banco de dados está ativo. Efetue logon no servidor, defina a variável de ambiente ORACLE_SID como o SID do banco de dados e execute o SQL * Plus como uma conexão local.
fonte
Este erro pode ocorrer quando um aplicativo faz uma nova conexão para cada interação com o banco de dados ou as conexões não são fechadas corretamente. Uma das ferramentas gratuitas para monitorar e confirmar isso é o desenvolvedor do Oracle Sql (embora essa não seja a única ferramenta que você pode usar para monitorar sessões de banco de dados).
você pode baixar a ferramenta no site da Oracle Sql Developer
Aqui está uma captura de tela de como monitorar suas sessões. (se houver muitas sessões acumuladas para o usuário do aplicativo durante o erro ORA-12514, é uma boa indicação de que você pode ter um problema no conjunto de conexões).
fonte
Resolvi esse problema no meu ambiente Linux atualizando o IP da minha máquina no arquivo / etc / hosts.
Você pode verificar o IP da sua rede (inet end.) Com:
Veja se o seu IP corresponde ao arquivo / etc / hosts:
Edite seu arquivo / etc / hosts, se estiver incorporado:
Tchau.
fonte
Para aqueles que podem estar executando o Oracle em uma VM (como eu), vi esse problema porque minha VM estava ficando sem memória, o que parece ter impedido o OracleDB de iniciar / executar corretamente. Aumentar a memória da VM e reiniciar corrigiu o problema.
fonte
Muitas respostas aqui, mas aqui vem um exemplo de trabalho com código que você pode copiar, colar e testar imediatamente:
Para mim, o erro 12514 foi resolvido após a especificação do SERVICE_NAME correto. Você encontra isso no servidor no arquivo
tnsnames.ora
que vem com 3 nomes de serviço predefinidos (um deles é "XE").HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. Em máquinas de 64 bits, escreva adicionalmente paraHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
apenas 4 MB e é uma DLL gerenciada pura que funciona em processos de 32 e 64 bits também e depende de nenhuma outra DLL e não requer nenhuma entrada do registro.Se
SERVICE_NAME=XE
estiver errado, você receberá o erro 12514. OSERVICE_NAME
é opcional. Você também pode deixá-lo fora.fonte
Eu também enfrentei o mesmo problema e passei 3 dias para desenterrá-lo.
Isso acontece devido à entrada incorreta do serviço TNS.
Primeiro, verifique se você pode se conectar ao banco de dados em espera do banco de dados primário usando sql>
sqlplus sys@orastand as sysdba
(orastand
é um banco de dados em espera).Se você não conseguir se conectar, é um problema com o serviço. Corrija a entrada do nome do serviço no arquivo TNS no final primário.
Verifique o banco de dados em espera da mesma maneira. Faça as alterações aqui também, se necessário.
Verifique se o
log_archive_dest_2
parâmetro tem o nome de serviço correto.fonte
Eu recebi o mesmo erro porque o SID remoto especificado estava errado:
Eu consultei o banco de dados do sistema:
selecione * de global_name;
e encontrei meu SID remoto ("XE").
Então eu poderia me conectar sem nenhum problema.
fonte
No meu caso, o banco de dados ficou sem espaço em disco. O que fez com que não respondesse. Depois de esclarecer essa questão, tudo funcionou novamente.
fonte
Para mim, isso foi causado pelo uso de uma ipadress dinâmica usando a instalação. Reinstalei o Oracle usando uma ipadress estática e tudo estava bem
fonte
Reiniciar a VM funcionou para mim
fonte
Meu problema foi resolvido substituindo o'SID 'no URL por' service name 'e o host correto.
fonte
tnslsnr
está ativo, mas o banco de dados está inativo.Para o novato da Oracle, não é óbvio que o banco de dados esteja inativo enquanto as conexões forem aceitas.
Eu tive que iniciar o banco de dados manualmente assim
E então no console sql
No meu caso, falhei na inicialização, mas recebi outra mensagem de erro e encontrei a fonte de um problema - tive que alterar o nome do host e a inicialização automática do banco de dados estava funcional novamente.
fonte
Eu implementei abaixo a solução alternativa para resolver esse problema.
Eu configurei o ORACLE_HOME usando o prompt de comando (clique com o botão direito do mouse em cmd.exe e em Executar como administrador do sistema).
Usado abaixo do comando
set oracle_home="path to the oracle home"
Vá para Todos os programas -> Oracle -ora home1 -> Ferramentas de migração de configuração -> Net Manager -> Ouvinte
Selecione Serviços de banco de dados no menu suspenso. O nome do banco de dados global e o SID são definidos da mesma forma (ORCL no meu caso). Defina o Oracle Home Directory.
Exemplo de janela do Oracle Net Manager da documentação da Oracle:
fonte
O problema era que o URL da minha string de conexão continha o nome do banco de dados em vez do SID. A substituição do nome do banco de dados pelo SID da conexão com o banco de dados oracle resolveu esse problema.
Para conhecer os SIDs do oracle, você pode procurar no
tnsnames.ora
arquivo.XE
era o SID real, então é assim que minha cadeia de conexão do tomcat se parece agora:A versão do meu servidor era "Oracle 11.2 Express", mas a solução também deve funcionar em outras versões.
fonte
No meu caso, faltavam colchetes ao redor do SERVICE_NAME no arquivo tnsnames.ora .
fonte
Para aqueles que estão usando spring-boot e jdbc para conexão. Você deve ter cuidado ao escrever jdbcUrl em application.properties
Com o SID na conexão com o banco de dados -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
Com o nome do serviço na conexão db
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Isso funcionou para mim :)
fonte