barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком ORA-12505. Показать все сообщения
Показаны сообщения с ярлыком ORA-12505. Показать все сообщения

вторник, 26 сентября 2017 г.

Oracle Database11g Express Edition: "ORA-12505, TNS:listener does not currently know of SID given in connect descriptor"

Установил я Oracle Database11g Express Edition Release 2 на Win 10 x64. Проблемы начались еще при скачивании дистрибутива. Сайт Oracle ругался на Unauthorized Request "In order to download products from Oracle Technology Network you must agree to the OTN license terms", хотя я, естественно, условия лицензии принял. Пришлось качать с rutracker. Наконец поставив, пытаюсь подключиться через JDeveloper по jdbc:oracle:thin:@localhost:1521:XE. Получаю:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
Тоже самое через cmd с помощью:
sqlplus sys/******@XE as sysdba
Вроде бы службы запущены, "Start Database" в меню Пуск я нажимал. Перезапуск служб не помог (хотя вроде бы стартовал в правильном порядке - сначала OracleXETNSListener, потом - OracleServiceXE).
Помогло следующее. Приконнектился с помощью:
sqlplus sys/111111 as sysdba
Выполнил:
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;
alter system register;
exit;
После чего:
lsnrctl stat 
Вуаля, можно коннектится.

воскресенье, 26 января 2014 г.

Pentaho: подключение к БД Oracle по Service Name

При создании "Database connection" в Pentaho при выборе СУБД Oracle нет возможности выбрать, как подключаться к БД - по SID или по Service Name. Есть только единственное поле - "Database". При этом, если ввести в него просто значение Service Name, на некоторых серверах подключение проходит успешно, тогда как на других приводит к ошибке:
2014/01/25 20:06:27 - ERROR (version 4.4.0-stable, build 17588 from 2012-11-21 16.02.21 by buildguy) : Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
2014/01/25 20:06:27 - ERROR (version 4.4.0-stable, build 17588 from 2012-11-21 16.02.21 by buildguy) : Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
Из текста ошибки видно, что СУБД считает, что подключение ведется по SID, а не по Service Name. Почему ошибка возникает лишь на некоторых серверах - не знаю, видимо это зависит от каких-то настроек на стороне сервера.
Почему СУБД считает, что подключение ведется именно по SID, понятно: форматы JDBC-URL'а при подключении по SID и по Service Name различаются. Для SID URL выглядит так (используется thin-драйвер):
jdbc:oracle:thin:@server:1521:mysid
, а для Service Name - так:
jdbc:oracle:thin:@server:1521/myservicename
Pentaho использует первый формат, что и ведет к ошибке. Однако, не все так плохо: если указать в начале значения поля "Database" прямой слеш (перед значением Service Name) подключение проходит успешно. Спасибо http://forums.pentaho.com/archive/index.php/t-87866.html?s=57295456a6292b611f3e46e3fa0ea7d6.