ORA-12505, TNS: слушатель в настоящее время не знает о SID, заданном в дескрипторе соединения

Я установил Oracle 11g Express Edition Release 2 в свою 64-разрядную ОС Windows 7 и попытался выполнить JDBC-программу, после чего я получил следующую ошибку:

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

Я исправил эту проблему, исправив строку jdbc.

Например, правильная строка jdbc должна быть...

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

Но строка jdbs, которую я использовал, - это...

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

(Примечание: между 1521 и XE должен быть /)

Эта плохая строка jdbc также дает мне ошибку ORA-12505.

Ответ 2

Есть несколько вещей, которые могут вызвать эту проблему, но прежде чем вы начнете работу с JDBC, вы должны быть уверены, что можете подключиться к базе данных с помощью SQL * Plus. Если вы не знакомы с SQL * Plus, это инструмент командной строки для подключения к базам данных Oracle, который долгое время являлся стандартной частью Oracle и включен в Oracle XE.

При подключении к базе данных Oracle с помощью JDBC вы не подключаетесь непосредственно к базе данных. Вместо этого вы подключаетесь к слушателю TNS, который затем соединяет вас с базой данных. Ошибка ORA-12505 означает, что слушатель встал и вы могли подключиться к нему, но он не смог подключить вас к базе данных, потому что он не знает, что эта база данных. Для этого есть две причины:

  • база данных не запущена,
  • база данных не была зарегистрирована у слушателя, например. потому что база данных была запущена перед слушателем. (Когда база данных начинается, она регистрируется при прослушивании, если она уже запущена. Если слушатель не запущен, база данных не регистрируется, и если слушатель запускается, он не ищет базы данных, которые могут зарегистрируйтесь в нем.)

ORA-12505 означает, что слушатель знает об этой базе данных, но слушатель не получил уведомление из базы данных, что база данных. (Если вы пытались подключиться к неправильной базе данных, используя неправильный идентификатор SID, вы получили бы ошибку ORA-12154 "TNS: не удалось разрешить указанный идентификатор подключения".)

Какие службы Oracle работают в оснастке "Службы"? (Откройте это из панели управления > "Администрирование" > "Службы" или просто "Пуск" > "Выполнить" > services.msc.) Вам нужны службы OracleServiceXE и OracleXETNSListener для запуска.

Если службы были запущены, можете ли вы подключиться к базе данных в SQL * Plus, используя любое из приведенных ниже команд в командной строке? (Я предполагаю, что вы запускаете их на машине, на которой установлен Oracle XE.)

sqlplus system/system-password@XE
sqlplus system/system-password
sqlplus / as sysdba

(Замените system-password паролем, который вы установили для пользователей SYS и SYSTEM во время установки Oracle XE.)

Первый из этих трех подключается через прослушиватель TNS, а второй два напрямую подключаются к базе данных, не проходя через прослушиватель, и работают только в том случае, если вы находитесь на том же компьютере, что и база данных. Если первый не удастся, но два других успеха, то соединения JDBC также потерпят неудачу. Если это так, подключитесь к базе данных с помощью одного из двух других и запустите ALTER SYSTEM REGISTER. Затем выйдите из SQL * Plus и снова попробуйте первую форму.

Если третий не работает, а второй работает, добавьте свою учетную запись в группу ora_dba. Сделайте это в панели управления > Управление компьютером > Локальные пользователи и группы.

Как только вы сможете получить соединения формы

sqlplus system/system-password@XE

вы должны иметь возможность подключаться к Oracle XE через JDBC. (Кстати, вы не указали нам код JDBC, который вы используете для подключения к базе данных, но я бы предположил, что он, скорее всего, правильный, будут другие другие ошибки, если части строки соединения были неправильными.)

Ответ 3

У меня тоже была такая же ошибка, но при попытке все три из них потерпели неудачу.  Если вышеуказанные три не пройдены. Проверьте статус LSNRCTL, если вы обнаружите, что служба (XE в моем случае) отсутствует, попробуйте это sqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...

Теперь вы можете увидеть сервис Даже если вы не видите этого sqlplus /nolog
conn system
... password ... connected.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;
... system altered ...
alter system register;
exit
lsnrctl stat

Это должно работать...

Ответ 4

Когда вы получаете эту ошибку "ORA-12505, TNS: прослушиватель в настоящее время не знает о SID, заданном в дескрипторе соединения"

Решение: откройте службы и запустите OracleServiceXE, после чего попробуйте подключиться...

Ответ 5

Я нашел некоторые причины для этого исключения. Они

1) Имя базы данных XE по умолчанию. Так как url ​​будет " jdbc: oracle: thin: @localhost: 1521: XE".

2) Убедитесь, что OracleServiceXE, OracleXETNSListener запущен. Он будет находиться в Панели управления\Все элементы панели управления\Администрирование\Сервисы

Ответ 6

Я решил эту проблему, исправив код JDBC.

правильная строка JDBC должна быть...

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

Но строка JDBC, которую я использовал, была...

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

Итак, ошибка указания orcl вместо xe показала эту ошибку, поскольку имя SID было неправильным.

Ответ 7

Моя проблема решена, когда я использую приведенный ниже код:

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

Ответ 8

Столкнулся с подобной ошибкой, ни одно из вышеперечисленных решений не помогло. Возникла проблема в файле listner.ora. По ошибке я добавил SID из SID_LIST см. Ниже (раздел между звездами *).

 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)

Исправлена эта ошибка, как показано ниже:

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)

Остановился и база данных enter image description here

Остановил прослушиватели OracleServiceXE и OracleXETNSListener вручную, так как он не остановился автоматически, перейдя в Панель управления\Все элементы панели управления\Администрирование\Сервисы. Перезапустил базу данных, и она работала как шарм.

Ответ 9

i изначально приходил сюда с той же проблемой. У меня был jus установлен Oracle 12c на Windows 8 (64-разрядный), но с тех пор я разрешил его с помощью "TNSPING xe" в командной строке... Если соединение не установлено или имя не найдено, попробуйте имя базы данных, в моем случае это было "orcl"... "TNSPING orcl" еще раз, и если он успешно завершит, вам нужно изменить SID на "orcl" в этом случае (или какое бы имя базы данных не использовалось)...

Ответ 10

Одна из возможностей, которую я не видел широко обсуждаемой, заключается в том, что может возникнуть проблема с решением имени хоста на самой главной машине. Если в файле /etc/hosts нет записи для $(hostname), слушатель Oracle становится путаным и не подходит.

Это оказалось моей проблемой, и добавление имени хоста и IP-адреса в /etc/hosts разрешило проблему.

Ответ 11

Oracle: Синтаксис названия службы в тонком стиле

Имена служб Thin-стиля поддерживаются только драйвером JDBC Thin. Синтаксис:

@//имя_хоста: port_number/service_name

http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

Ответ 12

Я тоже столкнулся с той же проблемой. Я установил версию Oracle Express 10g в ОС Windows XP с помощью VMware, и она работает нормально. Поскольку было очень неудобно печатать SQL-запросы в утилите SQL, предоставляемой 10g, и поскольку я привык работать с разработчиком SQL, я установил 32-разрядный SQL-разработчик в XP и попытался подключиться к моему SID "XE" базы данных. Но соединение не удалось с ошибкой-ORA-12505 TNS-прослушиватель в настоящее время не знает о SID, заданном в дескрипторе соединения. Я был в море относительно того, как эта проблема возникла, поскольку она отлично работает с утилитой SQL, и я также создал несколько сопоставлений Informatica, используя то же самое. Я много просматривал этот материал туда и предлагал предложения, предлагаемые мне после того, как он ответил на статус "lsnrctl" на общественных форумах, но безрезультатно. Однако сегодня утром я попытался создать новое соединение снова, и Voila, он работал без проблем. Я угадываю после прочтения в нескольких сообщениях, которые иногда прослушиватель слушает перед подключением БД или чем-то (простите меня за мою грубую ссылку, поскольку я новичок здесь), но я предлагаю просто перезагрузить машину и снова проверить.

Ответ 13

У меня была такая же проблема, поэтому для решения этой проблемы я сначала перенастроил свой прослушиватель, используя netca, после чего я удалил свою старую базу данных, которая была ORCL, с помощью dbca, а затем я снова создал новую базу данных, используя dbca

Ответ 14

Я столкнулся с той же проблемой и решил перезапустить службу OracleServiceXE. Goto Services.msc, а затем проверьте, что служба "OracleServiceXE" UP и работает

Ответ 15

Если вы используете Oracle Express Edition, вы должны иметь этот URL

JDBC: оракул: тонкий: @localhost: 1521: XE или JDBC: оракул: тонкий: @localhost: 1521/XE

У меня была похожая проблема с плагином конфигурации liquibase в pom.xml. И я изменил свою конфигурацию:

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

Ответ 16

Проверьте, выполнив tnsping и имя экземпляра на главной машине. Это даст вам tns decription и все большую часть времени имя хоста отличается, что не соответствует.

Я также разрешаю свою проблему

В машине Unix $ tnsping (Enter)

Это дает мне полное описание tns, где я нашел, что имя хоста отличается..:)

Ответ 17

Получилась одна и та же проблема внезапно после того, как возился с некоторыми cmd. Выключенный ORACLE SERVICE XE прекратил работу. Потребовал мне 2 секунды, чтобы перезапустить его из административных инструментов. TNX!

Ответ 18

Пожалуйста, проверьте как OracleServiceXE, так и OracleXETNSListener статус, начатый при навигации по start->run->services.msc.

Для моего случая только OracleXETNSListener был запущен, но OracleServiceXE не был запущен, когда я начал с right clicking -> start и проверил соединение, которое оно работает для меня

Ответ 19

Я исправил эту проблему, изменив " SID" на " SERVICE_NAME" в моем файле TNSNAMES.ora.

Посмотрите, запрашивает ли ваша БД SID или SERVICE_NAME.

Приветствия

Ответ 20

У меня была аналогичная проблема в SQL Workbench.

URL:

: оракул JDBC: тонкий: @111.111.111.111:1111: х

не работает.

URL:

: оракул JDBC: тонкий: @111.111.111.111:1111: AsDB

работы.

Это поможет мне в моей конкретной ситуации. Я боюсь, что может существовать множество других причин с различными решениями.

Ответ 21

Соединение con = DriverManager.getConnection("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tiger");

Ошибка, которую я получил:

java.sql.SQLException: слушатель отклонил соединение со следующей ошибкой: ORA-12505, TNS: слушатель в настоящее время не знает SID, указанный в дескрипторе соединения. Дескриптор соединения, используемый клиентом, был: localhost: 1521: xe

Как я это решил:

Соединение con = DriverManager.getConnection("jdbc: oracle: thin: localhost: 1521: xe", "scott", "tiger");

(Удалить @)

Не знаю почему, но это работает сейчас...

Ответ 22

Была аналогичная проблема. Проблема возникла внезапно - у нас есть URL-адрес подключения базы данных с балансировкой нагрузки, но в соединениях jdbc я указывал прямо на один db.

Изменен для загрузки сбалансированного db-url, и он сработал.

Ответ 23

В моем случае не получилось, наконец, я перезапустил слушателя и слушателя TNS, и все сработало. Боролся 2 дня.

Ответ 24

Я получил эту ошибку ORA-12505, TNS: слушатель в настоящее время не знает SID, указанный в дескрипторе соединения, когда я пытался подключиться к Oracle DB с помощью разработчика SQL.

Использовалась строка JDBC : jdbc: oracle: thin: @myserver: 1521/XE, очевидно, правильная и две обязательные службы Oracle: OracleServiceXE, OracleXETNSListener были запущены и работали.

То, как я решил эту проблему (в 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.

Ответ 25

Помимо запуска сервисов (OracleServiceXE, OracleXETNSListener) существует вероятность того, что антивирусное программное обеспечение/брандмауэр все еще может их блокировать. Просто убедитесь, что они не заблокированы. enter image description here

Ответ 26

Я просто исправил это путем перезапуска/запуска oracleService в сервисах