Как использовать переадресацию портов для подключения к базе данных Oracle с использованием netsh? - PullRequest
1 голос
/ 27 марта 2020

У меня есть машина (A), которая имеет доступ к хосту, на котором работает прослушиватель Oracle. Я могу подключиться к нему, используя SQL Developer.

У меня есть другая машина (B), которой я также хотел бы подключиться к той же базе данных, но она не имеет прямого доступа к работающему хосту. слушатель. Тем не менее, он имеет доступ к машине (A).

Я хотел бы перенаправить порт на машине A на хост-приемник Oracle, который прослушивает порт 1521.

Затем я должен иметь возможность установить соединение с базой данных с компьютера B на компьютер A, а затем перенаправить порт на хост с прослушивателем Oracle. Что-то вроде мужчины посередине.

Однако у меня проблемы. Я даже не могу подключиться к базе данных Oracle с компьютера B, используя перенаправленный порт. У меня есть опыт использования туннелей s sh, чтобы сделать то же самое. В этом случае я не использую s sh и не понимаю, почему это не сработает. Ниже приведена процедура, которую я прохожу: Войдите на компьютер B - Oracle клиент установлен. SQL Разработчик установлен. Open SQL Developer - выберите соединение TNS. Введите в учетные данные. Запись об успешном соединении TNS Names:

CRYSTAL=(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=yes)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=testhost.com)(PORT=1521)))(CONNECT_DATA=(service_name=svc1)))

Теперь настройте переадресацию:

C:\Windows\system32>netsh interface portproxy add v4tov4 listenaddress=127.0.0.1
 listenport=1521 connectaddress=testhost.com connectport=1521
protocol=tcp

Если я lnet localhost 1521, он сможет установить соединение. В качестве простого теста я могу подключиться к компьютеру B с помощью SQL Developer. Но на этот раз я установил расширенный тип подключения, чтобы я мог ввести jdb c url.Note, я использую 127.0.01 вместо testhost.com, потому что он будет перенаправлен на testhost.com

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=yes)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(service_name=svc1)))

Не удается установить соединение с «ORA-12516, TNS: слушателю не удалось найти доступный обработчик с соответствующим стеком протоколов»

Я проверил проблемы с брандмауэром и убедился, что порт 1521 открыт.

Есть идеи, что я могу упустить или кто-то еще успешно перенаправил порт на Oracle слушателя?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Благодаря комментарию от psaraj12 я знал, что мой подход должен работать. У меня была проблема с именем хоста, который мне дали для подключения к базе данных. Он отлично работает, если вы введете его в SQL Developer как есть. Однако, когда я использовал его в переадресации портов, я не мог подключиться к базе данных, используя SQL Developer, используя имя хоста localhost. У имени хоста, которое мне дали, было "scan" в имени. Я думаю, что это виртуальный IP. Мы используем Oracle RA C - технологию кластеризации. Поэтому я подозревал, что VIP выбрал узел в кластере, и сервер пересылки не смог его обработать. Вот как я решил эту проблему:

  • Установлен Wireshark.
  • Начните запись пакетов.
  • Используется SQL Разработчик для соединения с VIP - Успех
  • В Wireshark найдите поток TCP, который содержит что-то уникальное в соединении. В этом случае имя службы Oracle. Вы должны увидеть IP VIP. Что-то вроде:

    ......... 6.,. A ... O ........: .............. ................ (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = 11.3.68.171) (PORT = 1521)) (CONNECT_DATA = (ИДС = (ПРОГРАММА = SQL Разработчик) (HOST = jdb c) (USER = adp c)) (SERVICE_NAME = svc1) (CID = (PROGRAM = SQL Разработчик) (HOST = jdb c) (USER = adp c)))) ................. 6.,. A ... O ...... ..: .............................. (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = 11.3.68.171 ) (PORT = 1521)) (CONNECT_DATA = (CID = (PROGRAM = SQL Разработчик) (HOST = jdb c) (USER = adp c)) (SERVICE_NAME = svc1) ( CID = (PROGRAM = SQL Разработчик) (HOST = jdb c) (USER = adp c)))). ....... 6.A ........ ..........................

  • Теперь go вернемся к пакету и выясним, что такое "настоящий" адрес. Вот пример: Информация о пакете проводной акулы. Это IP-адрес назначения, где Oracle listener.
  • Теперь используйте это для переадресации порта. netsh interface portproxy add v4tov4 listenport = 1521 адрес подключения = 11.3.68.135 connectport = Протокол 1521 = tcp
  • Теперь, когда вы входите в систему с использованием SQL Developer Basi c Тип подключения, вы можете использовать localhost вместо VIP, и вы сможете подключиться.
  • Теперь go на другой машине, которая имеет доступ к машине, которую вы только что настроили, и вы сможете подключиться к базе данных оттуда, а также по IP-адресу машины, на которой у вас настроена переадресация портов.
0 голосов
/ 30 марта 2020

Одно и то же прямое соединение работает нормально как в базовом c, так и в расширенном соединении в SQL проявителе на моей машине.

Единственное отличие состоит в том, что машины A, B и База данных находятся в одной сети, в моем случае, где B также может напрямую подключаться к базе данных

Шаги

1) У вас есть настроить переадресацию на машине A с IP-адресом машины A в качестве адреса прослушивания

2) Используйте IP-адрес машины A в TNS для подключения к базе данных на машине B

Если вы все еще сталкиваетесь проблемы, затем вы можете попробовать включить файлы журналов и трассировки для выявления проблемы, как указано в этих статьях

Oracle База данных 10g Отладка Проблемы с подключением 1

Oracle База данных 10g Отладка Проблемы с подключением 2

...