ORA-12505, TNS: слушатель в настоящее время не знает SID после изменения номера порта
Я пытаюсь изменить номер порта оракула tnslsnr по умолчанию на другой порт. После того, как я изменил номер порта для tnslsnr с 1521 на 2000, я начал получать ORA-12505, TNS: слушатель в настоящее время не знает SID от драйвера JDBC. Все работает нормально, пока порт 1521.
Содержимое моего файла listener.ora:
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 2000))
)
)
Содержимое моего файла tnsnames.ora:
TESTDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 2000))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb.localdomain)
)
)
URL JDBC, к которому я пытаюсь подключиться: jdbc: oracle: thin: @testhost: 2000: testdb
Версия базы данных 12c, ОС CentOS 5.8
1 ответ
TNSNAMES - это "абстракция-информация-абстракция". Здесь вы скрываете имена хостов, информацию об отказоустойчивости, номер порта, имя службы и бог знает что.
Почему вы подключаетесь, используя имя хоста, порт и sid?
jdbc:oracle:thin:@testhost:2000:testdb
Привет! Потому что вы не используете TNSNAMES! Ваша строка подключения является HOST-соединением. Хост-соединение идет прямо к хосту и не замечает ваш файл tnsnames.ora. (Вы не дали указание JDBC посмотреть там...)
Далее, не рекомендуется подключаться к базе данных оракула с указанием SID. Скорее укажите SERVICE_NAME. (Для 12c SID больше не должен использоваться)
jdbc:oracle:thin:@testhost:2000/SERVICE_NAME
Чтобы определить service_name вашего экземпляра:
$sqlplus / as sysdba
SQL>show parameter service
Чтобы использовать TNSNAMES для jdbc, посмотрите здесь
Слушатель находится на порте 2000?
#netstat -tulpn | grep :2000
Экземпляр пытается зарегистрироваться в приемнике со значением порта по умолчанию 1521. Это называется динамической регистрацией экземпляра. Регистрация в слушателе не удастся, если используется значение порта по умолчанию. Чтобы отрегулировать это, параметр init LOCAL_LISTENER входит в рисунок следующим образом:
$sqlplus / as sysdba
SQL>alter system set LOCAL_LISTENER='(ADDRESS =(PROTOCOL=TCP)(HOST=localhost)(PORT=2000);
Теперь это будет работать. 100%
Перейдите сюда для подробного объяснения параметра LOCAL_LISTENER