Я установил 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
Я исправил эту проблему, исправив строку jdbc.
Например, правильная строка jdbc должна быть...
jdbc:oracle:thin:@myserver:1521/XE
Но строка jdbs, которую я использовал, - это...
jdbc:oracle:thin:@myserver:1521:XE
(Примечание: между 1521
и XE
должен быть /
)
Эта плохая строка jdbc также дает мне ошибку ORA-12505.
Есть несколько вещей, которые могут вызвать эту проблему, но прежде чем вы начнете работу с 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, который вы используете для подключения к базе данных, но я бы предположил, что он, скорее всего, правильный, будут другие другие ошибки, если части строки соединения были неправильными.)
У меня тоже была такая же ошибка, но при попытке все три из них потерпели неудачу.
Если вышеуказанные три не пройдены. Проверьте статус 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
Это должно работать...
local_listener
, то ORCL слушатель в настоящее время показано на lsnrctl
. Бесконечно благодарен!
Когда вы получаете эту ошибку "ORA-12505, TNS: прослушиватель в настоящее время не знает о SID, заданном в дескрипторе соединения"
Решение: откройте службы и запустите OracleServiceXE
, после чего попробуйте подключиться...
Я нашел некоторые причины для этого исключения. Они
1) Имя базы данных XE по умолчанию. Так как url будет " jdbc: oracle: thin: @localhost: 1521: XE".
2) Убедитесь, что OracleServiceXE, OracleXETNSListener запущен. Он будет находиться в Панели управления\Все элементы панели управления\Администрирование\Сервисы
Я решил эту проблему, исправив код 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 было неправильным.
Моя проблема решена, когда я использую приведенный ниже код:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
Oracle: Синтаксис названия службы в тонком стиле
Имена служб Thin-стиля поддерживаются только драйвером JDBC Thin. Синтаксис:
@//имя_хоста: port_number/service_name
http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
i изначально приходил сюда с той же проблемой. У меня был jus установлен Oracle 12c на Windows 8 (64-разрядный), но с тех пор я разрешил его с помощью "TNSPING xe" в командной строке... Если соединение не установлено или имя не найдено, попробуйте имя базы данных, в моем случае это было "orcl"... "TNSPING orcl" еще раз, и если он успешно завершит, вам нужно изменить SID на "orcl" в этом случае (или какое бы имя базы данных не использовалось)...
Столкнувшись с подобной ошибкой, любое из вышеперечисленных решений не помогло.
В файле 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)
Остановлен и база данных
Остановить прослушиватели OracleServiceXE и OracleXETNSListener вручную, поскольку это не остановилось автоматически, перейдя в Панель управления\Все элементы панели управления\Администрирование\Службы. Перезагрузили базу данных, и она работала как шарм.
Одна из возможностей, которую я не видел широко обсуждаемой, заключается в том, что может возникнуть проблема с решением имени хоста на самой главной машине. Если в файле /etc/hosts нет записи для $(hostname), слушатель Oracle становится путаным и не подходит.
Это оказалось моей проблемой, и добавление имени хоста и IP-адреса в /etc/hosts разрешило проблему.
Я столкнулся с той же проблемой и решил перезапустить службу OracleServiceXE. Goto Services.msc, а затем проверьте, что служба "OracleServiceXE" UP и работает
У меня была такая же проблема, поэтому для решения этой проблемы я сначала перенастроил свой прослушиватель, используя netca
, после чего я удалил свою старую базу данных, которая была ORCL, с помощью dbca
, а затем я снова создал новую базу данных, используя dbca
Я тоже столкнулся с той же проблемой. Я установил версию Oracle Express 10g в ОС Windows XP с помощью VMware, и она работает нормально. Поскольку было очень неудобно печатать SQL-запросы в утилите SQL, предоставляемой 10g, и поскольку я привык работать с разработчиком SQL, я установил 32-разрядный SQL-разработчик в XP и попытался подключиться к моему SID "XE" базы данных. Но соединение не удалось с ошибкой-ORA-12505 TNS-прослушиватель в настоящее время не знает о SID, заданном в дескрипторе соединения. Я был в море относительно того, как эта проблема возникла, поскольку она отлично работает с утилитой SQL, и я также создал несколько сопоставлений Informatica, используя то же самое. Я много просматривал этот материал туда и предлагал предложения, предлагаемые мне после того, как он ответил на статус "lsnrctl" на общественных форумах, но безрезультатно. Однако сегодня утром я попытался создать новое соединение снова, и Voila, он работал без проблем. Я угадываю после прочтения в нескольких сообщениях, которые иногда прослушиватель слушает перед подключением БД или чем-то (простите меня за мою грубую ссылку, поскольку я новичок здесь), но я предлагаю просто перезагрузить машину и снова проверить.
У меня была аналогичная проблема в SQL Workbench.
URL:
: оракул JDBC: тонкий: @111.111.111.111:1111: х
не работает.
URL:
: оракул JDBC: тонкий: @111.111.111.111:1111: AsDB
работы.
Это поможет мне в моей конкретной ситуации. Я боюсь, что может существовать множество других причин с различными решениями.
Пожалуйста, проверьте как OracleServiceXE
, так и OracleXETNSListener
статус, начатый при навигации по start->run->services.msc
.
Для моего случая только OracleXETNSListener
был запущен, но OracleServiceXE
не был запущен, когда я начал с right clicking -> start
и проверил соединение, которое оно работает для меня
Получилась одна и та же проблема внезапно после того, как возился с некоторыми cmd. Выключенный ORACLE SERVICE XE прекратил работу. Потребовал мне 2 секунды, чтобы перезапустить его из административных инструментов. TNX!
Проверьте, выполнив tnsping и имя экземпляра на главной машине. Это даст вам tns decription и все большую часть времени имя хоста отличается, что не соответствует.
Я также разрешаю свою проблему
В машине Unix $ tnsping (Enter)
Это дает мне полное описание tns, где я нашел, что имя хоста отличается..:)
Если вы используете Oracle Express Edition, вы должны иметь этот URL
JDBC: оракул: тонкий: @localhost: тысяча пятьсот двадцать один: х
У меня была аналогичная проблема с плагином Liquibase config в pom.xml. И я изменил конфигурацию:
`<configuration>
<driver>oracle.jdbc.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:xe</url>
<defaultSchemaName></defaultSchemaName>
<username>****</username>
<password>****</password>
</configuration>`
Я исправил эту проблему, изменив " SID" на " SERVICE_NAME" в моем файле TNSNAMES.ora.
Посмотрите, запрашивает ли ваша БД SID или SERVICE_NAME.
Приветствия
В моем случае не получилось, наконец, я перезапустил слушателя и слушателя TNS, и все сработало. Боролся 2 дня.
Была аналогичная проблема. Проблема возникла внезапно - у нас есть URL-адрес подключения базы данных с балансировкой нагрузки, но в соединениях jdbc я указывал прямо на один db.
Изменен для загрузки сбалансированного db-url, и он сработал.