ORA-12170 при подключении с виртуальной машины Windows к виртуальной машине Linux

#linux #oracle #oracle19c

Вопрос:

У меня есть две локальные виртуальные машины:

  • Виртуальная машина № 1 с именем хоста LINUXVM, работающая в Linux 8 с базой данных Oracle 19c SE2.
  • Виртуальная машина № 2 с именем хоста WINDOWSVM, работающая под управлением Windows 10 с установленным 32-разрядным мгновенным клиентом Oracle.

База данных запущена и работает, и я могу подключиться через sqlplus в виртуальной машине № 1 к своей базе данных с помощью

 sqlplus sys/[PWD]@[INSTANCE] as sysdba
 

Однако, если я попытаюсь сделать то же самое с виртуальной машины № 2, я получу ORA-12170 (TNS:Произошел тайм-аут подключения).

Пинг имени хоста работает с обеих машин (я добавил IP-адрес БД в файлы обоих хостов). Виртуальной машине № 1 был присвоен статический IP-адрес (192.168.1.177)

Прослушиватель настроен следующим образом:

 LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.177)(PORT = 1521))
    )
  )
 

tnsnames.ora настроен для обеих виртуальных машин следующим образом:

 [INSTANCE] =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.177)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = [INSTANCE])
    )
  )
 

На брандмауэре виртуальной машины № 1 я разрешил входящий TCP-трафик на порт 1521:
Правило брандмауэра

ОБНОВЛЕНИЕ: Я применил Wireshark, и, похоже, виртуальная машина № 1 (IP .177) не может отправить обратно на виртуальную машину № 2 (IP .230). Как только я выключаю брандмауэр на виртуальной машине № 1, все работает нормально. Когда я включаю его, я получаю сообщение об ошибке, несмотря на то, что мой брандмауэр на виртуальной машине № 1 принимает весь входящий и исходящий трафик с/на IP .230

Ответ №1:

Вы можете попробовать изменить запись tnsnames.ora, как показано ниже, вместо использования SERVICE_NAME.

[ЭКЗЕМПЛЯР] = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP)(ХОСТ = 192.168.1.177))(ПОРТ = 1521)) (CONNECT_DATA = (ВЫДЕЛЕННЫЙ СЕРВЕР) (SID = [ЭКЗЕМПЛЯР]) )

Кроме того, убедитесь, что клиент, установленный на виртуальной машине № 2, совместим с «Базой данных Oracle 19c SE2».

Комментарии:

1. Я попробовал, как вы предлагали, но это не сработало

2. Лучше всего избегать СВДС — они устарели десять или более лет назад. Используйте имена служб.

3. Хорошо, но это тоже не работает 🙂

4. @MrGrEEN — и почему именно вы думаете, что использование SID вместо ИМЕНИ СЛУЖБЫ приведет к тайм-ауту сетевого подключения?