ORA-12505, TNS: o ouvinte atualmente não conhece o SID fornecido no descritor de conexão


154

Eu instalei o Oracle 11g Express Edition Release 2 no meu sistema operacional Windows 7 de 64 bits e tentei executar o programa JDBC, e obtive o seguinte erro:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more

1
Iniciar o OracleServiceXE manualmente a partir dos serviços funcionou para mim.
Sen

Respostas:


184

Corrigi esse problema corrigindo minha string jdbc.

Por exemplo, a cadeia jdbc correta deve ser ...

jdbc:oracle:thin:@myserver:1521/XE

Mas a string jdbs que eu estava usando é ...

jdbc:oracle:thin:@myserver:1521:XE

(Nota: entre 1521e XEdeve ser a /)

Essa string jdbc incorreta também me deu um erro ORA-12505.


53
Se você usa um / it é um nome de serviço de rede, se você usa dois pontos, é um SID.
Eckes

89

Existem algumas coisas que podem causar esse problema, mas antes de iniciar o JDBC, você precisa se conectar ao banco de dados usando o SQL * Plus. Se você não está familiarizado com o SQL * Plus, é uma ferramenta de linha de comando para conectar-se aos bancos de dados Oracle que faz parte do Oracle há muito tempo e está incluída no Oracle XE.

Ao conectar-se a um banco de dados Oracle usando JDBC, você não se conecta diretamente ao banco de dados. Em vez disso, você se conecta a um ouvinte do TNS, que o conecta ao banco de dados. O erro ORA-12505significa que o ouvinte estava ativo e você pode se conectar a ele, mas não foi possível conectá-lo ao banco de dados porque não sabe que esse banco de dados está ativo. Há duas razões para isso:

  • o banco de dados não foi iniciado,
  • o banco de dados não foi registrado com o ouvinte, por exemplo, porque o banco de dados foi iniciado antes do ouvinte. (Quando o banco de dados é iniciado, ele se registra com um ouvinte, se já estiver em execução. Se o ouvinte não estiver em execução, o banco de dados não se registrará e, se o ouvinte iniciar, ele não procurará bancos de dados que possam registre-se.)

ORA-12505 significa que o ouvinte conhece esse banco de dados, mas o ouvinte não recebeu uma notificação do banco de dados de que o banco de dados está ativo. (Se você estivesse tentando se conectar ao banco de dados errado, usando o SID errado, obteria o erro ORA-12154 "TNS: não foi possível resolver o identificador de conexão especificado".)

Quais serviços Oracle estão sendo executados no snap-in Serviços? (Abra isso no Painel de controle> Ferramentas administrativas> Serviços, ou apenas Iniciar> Executar> services.msc.) Você precisa que os serviços OracleServiceXE e OracleXETNSListener estejam em execução.

Se os serviços foram iniciados, você pode se conectar ao banco de dados no SQL * Plus usando qualquer um dos seguintes itens em um prompt de comando? (Presumo que você os esteja executando na máquina em que instalou o Oracle XE.)

sistema sqlplus / senha do sistema @XE
sistema sqlplus / senha do sistema
sqlplus / as sysdba

(Substitua system-passwordpela senha que você definiu para os usuários SYS e SYSTEM durante a instalação do Oracle XE.)

O primeiro desses três se conecta pelo ouvinte TNS, mas os dois se conectam diretamente ao banco de dados sem passar pelo ouvinte e só funcionam se você estiver na mesma máquina que o banco de dados. Se o primeiro falhar, mas os outros dois forem bem-sucedidos, as conexões JDBC também falharão. Nesse caso, conecte-se ao banco de dados usando um dos outros dois e execute ALTER SYSTEM REGISTER. Em seguida, saia do SQL * Plus e tente o primeiro formulário novamente.

Se o terceiro falhar, mas o segundo funcionar, adicione sua conta de usuário ao grupo ora_dba. Faça isso no Painel de controle> Gerenciamento do computador> Usuários e grupos locais.

Depois de obter as conexões do formulário

sistema sqlplus / senha do sistema @XE

Para funcionar, você deve conseguir se conectar ao Oracle XE via JDBC. (Aliás, você não nos mostrou o código JDBC que está usando para se conectar ao banco de dados, mas eu suspeito que provavelmente esteja correto; haveria outros erros se partes da cadeia de conexão estivessem erradas.)


3
@Raj: Não vejo o que sua edição traz para a resposta, então a excluí. Se você deseja contribuir com uma quantia significativa para uma pergunta, poste sua própria resposta em vez de editar a de outra pessoa.
Luke Woodward

@LukeWoodward Estou recebendo esse erro SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. em todos os 3 #
vaibhavcool20

1
@qtpseleniumSupport: essa mensagem informa que você estava no SQL * Plus e inseriu a linha system/ora...(ou o SQL * Plus leu essa linha em um arquivo que você pediu para ler). As linhas de comando que forneci acima devem ser usadas em uma janela de prompt de comando / shell / Terminal. Se você já estiver executando o SQL * Plus, substitua sqlpluspor connect.
Luke Woodward

"o banco de dados não foi registrado com o ouvinte, por exemplo, porque o banco de dados foi iniciado antes do ouvinte." - foi isso, obrigado!
Ursache 16/04

47

Eu também recebi o mesmo erro, mas quando tentado, todos os três falharam. Se os três acima falharem, tente o status LSNRCTL se encontrar o serviço (XE no meu caso) ausente, tente isso

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

Agora você pode ver o serviço
Mesmo que não veja, experimente este

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

Provavelmente isso deve funcionar ...


2
Você conseguiu, cara! Após definir o local_listener, o ouvinte orcl agora está sendo mostrado em lsnrctl. Graças um milhão!
asgs

Isso fez meu sistema funcionar, mas observe que eu executei o seguinte: ALTER SYSTEM set local-listener = XE;
Daniel Williams

quando digito: 'alter system set local_listener =' (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = both;' Retorna um erro: ORA-65040: operation not allowed from within a pluggable databaseo que isso significa? Não é possível configurar o JDBC: /
Alg_D 3/16/16

1
as duas respostas mais votadas ajudaram, mas esta ajudou mais. Parece que eu não tinha 127.0.0.1 como endereço de ouvinte (eu tinha um com o nome local do meu PC). Assim, adicionando este novo, ele começou a trabalhar
johnbr

alter system set local_listener = ... trabalhou para mim.
Ben Asmussen

31

Quando você está recebendo este erro "ORA-12505, TNS: o ouvinte não conhece o SID fornecido no descritor de conexão"

Solução: abra Serviços e inicie OracleServiceXE, depois tente conectar ...


Eu tive um mesmo problema, mas com a execução do OracleServiceXE. Portanto, reiniciar um serviço OracleServiceXE funcionou para mim. Não sei porque ?!
Hamedz

Ao procurar OracleServiceXE ter em mente que XE corresponde ao SID base de dados de modo a certificar-se de que você está procurando o serviço certo, OracleService [SID]
Sandoval0992

10

Encontrei alguns motivos para essa exceção.

1) O nome do banco de dados XE por padrão.so o URL será " jdbc: oracle: thin: @localhost: 1521: XE ".

2) Verifique se o OracleServiceXE, OracleXETNSListener está em execução. Ele estará no Painel de Controle \ Todos os Itens do Painel de Controle \ Ferramentas Administrativas \ Serviços


8

Resolvi esse problema corrigindo meu código JDBC.

a sequência JDBC correta deve ser ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

Mas a string JDBC que eu estava usando era ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

Portanto, o erro de especificar orcl em vez de xe mostrou esse erro, pois o nome do SID estava errado.


No meu caso conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");funcionou.
Pran Kumar Sarkar

8

Meu problema foi resolvido quando eu uso o código abaixo:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");

7

Diante de um erro semelhante, qualquer uma das soluções acima não ajudou. Houve um problema no arquivo listner.ora. Por engano, eu adicionei SIDo texto SID_LISTabaixo (seção entre as estrelas *).

 SID_LIST_LISTENER =
      (SID_LIST =

        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

Corrigido este erro como abaixo:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
     )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

Parado e o banco de dados insira a descrição da imagem aqui

Parou os listeners OracleServiceXE e OracleXETNSListener manualmente, pois não parava automaticamente, indo para Painel de Controle \ Todos os Itens do Painel de Controle \ Ferramentas Administrativas \ Serviços. Reiniciou o banco de dados e funcionou como um encanto.


4

Eu inicialmente vim aqui com o mesmo problema. Eu já tinha instalado o Oracle 12c no Windows 8 (64 bits), mas já o resolvi com 'TNSPING xe' na linha de comando ... Se a conexão não for estabelecida ou o nome não for encontrado, tente o nome do banco de dados, no meu caso, era 'orcl' ... 'TNSPING orcl' novamente e se ele pingar com êxito, então você precisará alterar o SID para 'orcl' nesse caso (ou qualquer nome de banco de dados usado) ...


4

Uma possibilidade que eu não vi amplamente discutida é que pode haver um problema ao resolver o nome do host na própria máquina host. Se não houver entrada para $ (nome do host) em / etc / hosts, o ouvinte do Oracle ficará confuso e não será exibido.

Esse foi o meu problema, e adicionar o nome do host e o endereço IP em / etc / hosts resolveu o problema.



4

Se você possui uma conexão operacional no Oracle SQL Developer, use as informações no menu de conexão para criar seu URL, conforme descrito na imagem a seguir:

insira a descrição da imagem aqui

No exemplo acima, o URL seria: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Observe que, se você estiver usando um SID, haverá dois pontos (":") em vez de uma barra ("/") após o nome do host.


2

Eu também enfrentei o mesmo problema. Instalei o Oracle Express edição 10g no Windows XP OS usando o VMware e estava funcionando bem. Como era muito difícil digitar consultas SQL no utilitário SQL fornecido pela 10g e como eu estava acostumado a trabalhar com o desenvolvedor SQL, instalei o desenvolvedor SQL de 32 bits no XP e tentei conectar-me ao meu DB SID "XE". Mas a conexão falhou com o ouvinte de erro-ORA-12505 TNS atualmente não conhece o SID fornecido no descritor de conexão. Eu estava no mar sobre como esse problema ocorreu, pois estava funcionando bem com o utilitário SQL e também criei alguns mapeamentos da Informatica usando o mesmo. Pesquisei bastante sobre esse assunto aqui e apliquei as sugestões oferecidas depois de executar o ping do status de "lsnrctl" em fóruns públicos, mas sem sucesso. No entanto, nesta manhã, tentei criar uma nova conexão novamente, e Voila, funcionou sem problemas. Acho que, depois de ler em algumas postagens, às vezes o ouvinte ouve antes do banco de dados se conectar ou algo assim (perdoe-me por minha referência grosseira como sou novato aqui), mas sugiro que reinicie a máquina e verifique novamente.


2

Eu tive o mesmo problema, portanto, para resolvê-lo, reconfigurei meu ouvinte primeiro, netcadepois excluí meu banco de dados antigo que era ORCL usando dbcae, em seguida, criei o novo banco de dados novamente usandodbca


2

Eu enfrentei o mesmo problema e resolvi reiniciando o serviço OracleServiceXE. Vá para Services.msc e verifique se o serviço 'OracleServiceXE' está ativo e em execução


2

Corrigi esse problema alterando " SID " para " SERVICE_NAME " no meu arquivo TNSNAMES.ora.

Veja se seu banco de dados solicita SID ou SERVICE_NAME.

Felicidades


2

Se você usa o Oracle Express Edition, deve ter este URL

jdbc: oracle: thin: @localhost: 1521: xe ou jdbc: oracle: thin: @localhost: 1521 / XE

Eu tive um problema semelhante com o plugin de configuração liquibase no pom.xml. E eu mudei minha configuração:

`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`

2

Conexão con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tigre");

Erro que recebi:

java.sql.SQLException: o ouvinte recusou a conexão com o seguinte erro: ORA-12505, TNS: o ouvinte atualmente não conhece o SID fornecido no descritor de conexão O descritor de conexão usado pelo cliente era: localhost: 1521: xe

Como eu resolvi isso:

Conexão con = DriverManager.getConnection ("jdbc: oracle: thin: localhost: 1521: xe", "scott", "tigre");

(Remover @)

Não sei por que, mas está funcionando agora ...


1

Verifique executando tnsping e nome da instância na máquina host. Ele fornecerá a descrição do tns e, na maioria das vezes, o nome do host é diferente, o que não corresponde.

Resolvo meu problema da mesma forma

Na máquina Unix, $ tnsping (Enter)

Dá-me uma descrição completa do tns onde descobri que o nome do host é diferente .. :)


1

Verifique os dois OracleServiceXEe OracleXETNSListenerinicie o status ao navegar start->run->services.msc.

Para o meu caso, apenas OracleXETNSListenerfoi iniciado, mas OracleServiceXEnão foi iniciado, quando iniciei right clicking -> starte verifiquei a conexão que está funcionando para mim


1

Eu tive um problema semelhante no SQL Workbench.

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: xe

não funciona

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: asdb

trabalho.

Isso me ajuda na minha situação concreta. Receio, que poderia existir muitas outras razões com diferentes soluções.


0

Teve um problema semelhante. O problema começou a ocorrer repentinamente - estamos tendo um URL de conexão de banco de dados com balanceamento de carga, mas nas conexões jdbc eu estava apontando diretamente para um único banco de dados.

Mudou para carregar url db balanceado e funcionou.


2
Recomendamos o uso da URL da string de conexão totalmente qualificada, como mostrado jdbc: oracle: thin: @ (DESCRIPTION = (ADDRESS = (HOST = myhost) (PORT = 1521) (PROTOCOL = tcp)) (CONNECT_DATA = (SERVICE_NAME = myorcldbservicename)))
Nirmala

0

No meu caso não estava dando certo, finalmente reiniciei meu oracle e TNS ouvinte e tudo funcionou. Estava lutando por 2 dias.


0

Eu recebi esse erro ORA-12505, TNS: o ouvinte atualmente não conhece o SID fornecido no descritor de conexão quando tentei conectar-me ao oracle DB usando o desenvolvedor do SQL.

A cadeia JDBC usada foi jdbc: oracle: thin: @myserver: 1521 / XE , obviamente a correta e os dois serviços obrigatórios do Oracle OracleServiceXE, OracleXETNSListener estavam funcionando .

A maneira como resolvi esse problema (no Windows 10)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.

0

Além da execução de serviços (OracleServiceXE, OracleXETNSListener), existe a chance de o seu software / firewall antivírus ainda poder bloqueá-los. Apenas verifique se eles não estão bloqueados.insira a descrição da imagem aqui



0

Meu oracle parou de funcionar e eu estava recebendo esse erro. Eu reiniciei minha máquina e também tentei as soluções acima. Por fim, abri os serviços de componentes e reiniciei os serviços da Oracle e tudo começou a funcionar. Espero que isso ajude alguém.


0

Eu estava apenas criando o link do banco de dados incorretamente.

A solução simples para mim foi simplesmente alterar 'SID' para SERVICE_NAME

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

Mudando

SID=theNameOfTheDatabase

para

SERVICE_NAME=theNameOfTheDatabase 

resolveu meu problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.