Назад | Перейти на главную страницу

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

Я пытаюсь изменить номер порта oracle 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.

TNSNAMES - это «абстракция информации о соединении». Здесь вы скрываете имена хостов, информацию об аварийном переключении, номер порта, имя службы и бог знает что.

Почему вы подключаетесь с использованием имени хоста, порта и sid?

 jdbc:oracle:thin:@testhost:2000:testdb

Привет! Потому что вы не используете TNSNAMES! Ваша строка подключения - это HOST-соединение. Хост-соединение идет прямо к хосту и не обращает внимания на ваш файл tnsnames.ora. (Вы не проинструктировали JDBC искать там ...)

Далее, не рекомендуется подключаться к базе данных Oracle с указанием 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. Он вызывается регистрация динамического экземпляра. При использовании значения порта, отличного от значения по умолчанию, регистрация прослушивателя завершится ошибкой. Чтобы настроить это, параметр инициализации LOCAL_LISTENER появляется на картинке следующим образом:

$sqlplus / as sysdba     
SQL>alter system set LOCAL_LISTENER='(ADDRESS =(PROTOCOL=TCP)(HOST=localhost)(PORT=2000);

Теперь будет работать. 100%

Идти Вот для подробного объяснения параметра LOCAL_LISTENER