ORA-12514 TNS: o ouvinte atualmente não sabe do serviço solicitado no descritor de conexão

Temos um aplicativo em execução localmente onde estamos com o seguinte erro:

ORA-12514: TNS: o ouvinte atualmente não sabe do serviço solicitado no descritor de conexão

Eu testei a conexão usando TNSPing que resolveu corretamente e tentei SQLPlus para tentar conectar, que falhou com o mesmo erro acima. Eu usei essa syntax para o SQLPlus :

 sqlplus username/password@addressname[or host name] 

Nós verificamos que:

  • o ouvinte TNS no servidor está sendo executado.
  • O próprio Oracle no servidor está em execução.

Não sabemos de nenhuma alteração feita nesse ambiente. Mais alguma coisa que podemos testar?

Eu tive esse problema e a correção foi ter certeza em tnsnames.ora o SERVICE_NAME é um nome de serviço válido em seu database. Para descobrir nomes de serviço válidos, você pode usar a seguinte consulta no oracle:

 select value from v$parameter where name='service_names' 

Uma vez eu atualizei o tnsnames.ora para:

 TEST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = **)(PORT = **)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = **) ) ) 

então eu corri:

 sqlplus user@TEST 

Sucesso! O ouvinte basicamente informa que qualquer serviço que você esteja usando não é um serviço válido de acordo com o database.

(* Eu estava rodando o sqlplus da estação de trabalho do cliente Win7 no database remoto e culpo os DBAs;) *)

Eu sei que esta é uma questão antiga, mas ainda sem resposta. Demorei 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 nomes de serviço? Em %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.

Eu adicionei o problema Service Name, em seguida, no painel de controle do Windows “Serviços”, eu fiz um “Restart” no serviço de ouvinte da Oracle. Agora tudo está bem.

Eu tive esse problema no Windows Server 2008 R2 e Oracle 11g

vá para Gerenciador de Rede> Listener> selecione serviços de database da combox> “Nome do Banco de Dados Global” deve ser o mesmo que “SID” e “Diretório Inicial do Oracle” devem estar corretos.

Se você não tiver nenhuma input para serviços de database, crie um e configure o database global, sid e oracle home corretos.

Iniciar o OracleServiceXXX do services.msc funcionou para mim no Windows.

Na minha opinião, o erro foi devido ao fato do ouvinte não ter o serviço do database registrado. Eu resolvi isso registrando os serviços. Exemplo:

Meu descritor em tnsnames.ora :

 LOCALDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = LOCALDB) ) ) 

Então, procuro registrar o serviço no listener.ora manualmente:

 SID_LIST_LISTENER = (SID_DESC = (GLOBAL_DBNAME = LOCALDB) (ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1) (SID_NAME = LOCALDB) ) ) 

Finalmente, reinicie o ouvinte pelo comando:

 > lsnrctl stop > lsnrctl start 

Feito!

Isso realmente deve ser um comentário para a resposta de Brad Rippe , mas, infelizmente, não é suficiente. Essa resposta me deu 90% do caminho até lá. No meu caso, a instalação e configuração dos bancos de dados colocam inputs no arquivo tnsnames.ora para os bancos de dados que eu estava executando. Primeiro, consegui me conectar ao database definindo as variables ​​de ambiente (Windows):

 set ORACLE_SID=mydatabase set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1 

e depois conectando usando

 sqlplus / as sysdba 

Em seguida, executando o comando da resposta de Brad Rippe:

 select value from v$parameter where name='service_names'; 

mostrou que os nomes não combinavam exatamente. As inputs criadas usando o Assistente de Configuração do Banco de Dados da Oracle, onde originalmente:

 MYDATABASE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mydatabase.mydomain.com) ) ) 

O nome do serviço da consulta era apenas mydatabase vez de mydatabase.mydomain.com . Eu editei o arquivo tnsnames.ora para apenas o nome base sem a parte do domínio, então eles ficaram assim:

 MYDATABASE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mydatabase) ) ) 

Eu reiniciei o serviço TNS Listener (geralmente uso lsnrctl stop e lsnrctl start de uma janela de comando do administrador [ou Windows Powershell] em vez do painel de controle Services, mas ambos funcionam.) Depois disso, consegui me conectar.

Verifique se o database está ativo. Faça logon no servidor, defina a variável de ambiente ORACLE_SID para seu SID do database e execute o SQL * Plus como uma conexão local.

Esse erro pode ocorrer quando um aplicativo faz uma nova conexão para cada interação do database ou as conexões não são fechadas corretamente. Uma das ferramentas gratuitas para monitorar e confirmar isso é o desenvolvedor Oracle Sql (embora essa não seja a única ferramenta que você pode usar para monitorar as sessões de database).

você pode baixar a ferramenta do site oracle Sql Developer

Aqui está uma captura de canvas de como monitorar suas sessões. (Se você vir muitas sessões se acumulando para o usuário do seu aplicativo durante a exibição do erro ORA-12514, é uma boa indicação de que você pode ter um problema no pool de conexão).

insira a descrição da imagem aqui

Eu também tinha enfrentado o mesmo problema e passou 3 dias para desenterrá-lo. Isso acontece por causa da sua input errada no serviço TNS. Primeiro verifique se você é capaz de se conectar ao database em espera do database principal usando sql> sqlplus sys @ orastand como sysdba (orastand é database em espera), se você não conseguir conectar, então é problema com o serviço. Corrija a input do nome do serviço no arquivo TNS na extremidade principal. Verifique da mesma forma no database de espera, se requer fazer as alterações aqui também. e Certifique-se de que o parâmetro log_archive_dest_2 tenha o nome correto do serviço.

Eu tive o mesmo problema, só de escrever

 sqlplus myusername/mypassword@localhost 

fez o truque, isso faz com que ele se conecte ao nome do serviço padrão, eu acho.

Para aqueles que podem estar executando o Oracle em uma VM (como eu), vi esse problema porque minha VM estava ficando sem memory, o que parece ter impedido o OracleDB de iniciar / executar corretamente. Aumentar a memory da VM e reiniciar o problema.

No meu caso, o database ficou sem espaço em disco. O que fez com que não respondesse. Depois que eu esclareci essa questão, tudo funcionou novamente.

Eu resolvi este problema no meu ambiente linux atualizando o IP da minha máquina no arquivo / etc / hosts.

Você pode verificar seu IP de rede (inet end.) Com:

 $ifconfig 

Veja se o seu IP combina com o arquivo / etc / hosts:

 $cat /etc/hosts 

Edite seu arquivo / etc / hosts, se necessário:

 $sudo gedit /etc/hosts 

Tchau.

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.

Muitas respostas aqui, mas aqui vem um exemplo de trabalho com código que você pode copiar e colar e testar imediatamente:

Para mim, o erro 12514 foi resolvido depois de especificar o SERVICE_NAME correto. Você encontra isso no servidor no arquivo tnsnames.ora que vem com 3 nomes de serviço predefinidos (um deles é “XE”).

  1. Instalei o database Oracle Express OracleXE112, que já vem com algumas tabelas de demonstração pré-instaladas.
  2. Quando você inicia o instalador, é solicitada uma senha. Eu digitei “xxx” como senha. (não usado na produção)
  3. Meu servidor é executado na máquina 192.168.1.158
  4. No servidor, você deve permitir explicitamente o access ao processo TNSLSNR.exe no Firewall do Windows. Este processo escuta na porta 1521.
  5. OPÇÃO A: Para C # (.NET2 ou .NET4) você pode baixar o ODAC11 , a partir do qual você precisa adicionar o Oracle.DataAccess.dll ao seu projeto. Esta DLL depende ainda: OraOps11w.dll, oci.dll, oraociei11.dll (130MB!), Msvcr80.dll. Essas DLLs devem estar no mesmo diretório que o EXE ou você deve especificar o caminho da DLL em: HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath . Em máquinas de 64 bits, escreva adicionalmente para HKLM\SOFTWARE\Wow6432Node\Oracle\...
  6. OPÇÃO B: Se você tiver baixado ODAC12 você precisa Oracle.DataAccess.dll, OraOps12w.dll, oci.dll, oraociei12.dll (160MB!), Oraons.dll, msvcr100.dll. O caminho do Registro é HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
  7. OPÇÃO C: Se você não quiser grandes DLLs de mais de 100 MB você deve baixar ODP.NET_Managed12.xxxxxxxx.zip no qual você encontra o Oracle.ManagedDataAccess.dll que tem apenas 4 MB e é uma DLL gerenciada pura que funciona em 32 Processos bit e 64 bit também e não dependem de nenhuma outra DLL e não requerem nenhuma input de registro.
  8. O seguinte código C # funciona para mim sem qualquer configuração no lado do servidor (apenas a instalação padrão):
 usando Oracle.DataAccess.Client;
 ou
 usando Oracle.ManagedDataAccess.Client;

 ....

 string oradb = "Fonte de Dados = (DESCRIPTION ="
     + "(ADDRESS_LIST = (ENDEREÇO ​​= (PROTOCOL = TCP) (HOST = 192.168.1.158) (PORT = 1521)))"
     + "(CONNECT_DATA = (SERVIDOR = DEDICADO) (SERVICE_NAME = XE)));"
     + "User Id = SYSTEM; Password = xxx;";

 usando (OracleConnection conn = new OracleConnection (oradb)) 
 {
     conn.Open ();
     usando (OracleCommand cmd = new OracleCommand ())
     {
         cmd.Connection = conn;
         cmd.CommandText = "selecione TABLESPACE_NAME de DBA_DATA_FILES";

         usando (OracleDataReader dr = cmd.ExecuteReader ())
         {
             while (dr.Read ())
             {
                 listBox.Items.Add (dr ["TABLESPACE_NAME"]));
             }
         }
     }
 } 

Se o SERVICE_NAME=XE estiver errado, você receberá o erro 12514. O SERVICE_NAME é opcional. Você também pode deixar isso de lado.

Eu recebi o mesmo erro porque o SID remoto especificado estava errado:

  > sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID 

Eu consultei o database do sistema:

selecione * de global_name;

e encontrei meu SID remoto (“XE”).

Então eu poderia conectar sem nenhum problema.

Para mim isso foi causado usando um ipadress dynamic usando a instalação. Eu reinstalei o Oracle usando um ipadress estático e, em seguida, tudo estava bem

Eu fiz o trabalho abaixo para resolver esse problema.

  1. Eu configurei o oracle_home no prompt do cmd (clique com o botão direito do mouse em cmd.exe e clique em Executar como administrador do sistema). usado abaixo do comando

    set oracle_home = “caminho para o oracle home”

Eu tinha oracle instalado na minha unidade D :.

  1. E vá para Todos os programas -> Oracle -ora home1 -> Ferramentas de migration de configuração Gerenciador de Rede -> Listener -> selecione Serviços de database no menu suspenso -> Nome do database global e SID ambos são definidos como iguais no meu caso ORCL, defina o diretório oracle_home. Clique em Arquivo e salve a configuração da rede.