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

Другие вопросы по тегам