Использование oracle db через ssh-туннель. Ошибка " ORA-12541: TNS: нет слушателя"

Привет у меня проблема с доступом к Oracle DB из нашего центра обработки данных через туннель.

у нас есть довольно стандартный центр обработки данных с одной машиной, доступной извне (Я помещаю его IP в файл/etc / hosts как dc) и Oracle DB внутри. IP-адрес нашей базы данных oracle во внутренней сети-192.168.1.7

для создания туннеля я использую команду:

 ssh -L 1521:192.168.1.7:1521 root@dc

и, конечно, он работает (иногда я также добавляю некоторые debug-vv, чтобы увидеть если что-то проходит).

теперь сложная часть - подключение к Oracle. Я установил instantclient 11.2. и мой файл tnsnames.Ора выглядит так:

testdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbname)
    )
  )

и когда я пытаюсь подключиться с помощью команды:

./sqlplus username/pass@testdb

он начинает подключение через туннель (я вижу его в отладке ssh), но затем он терпит неудачу рассказываю:

./sqlplus username/pass@testdb

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 13 20:46:07 2010

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12541: TNS:no listener


Enter user-name: 

когда я пытаюсь выполнить эту же команду, когда я нахожусь в интрасети, она работает (очевидно, единственная разница в том, что в tnsnames.Ora HOST у нас есть 192.168.1.7, а не localhost).

Я также попытался использовать простую командную строку:

./sqlplus username/pass@//localhost:1521/testdb

или

./sqlplus username/pass@//localhost:1521/testdb

но ничего не помогало :)

буду признателен за любую помощь или предложения. Мне не хватает флага ssh, чтобы сделать это возможным?

вероятно, файл журнала:

***********************************************************************

Fatal NI connect error 12541, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DBNAME)(CID=(PROGRAM=sqlplus@velvet)(HOST=velvet)(USER=johndoe))))

  VERSION INFORMATION:
    TNS for Linux: Version 11.2.0.1.0 - Production
    TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 13-JAN-2010 20:48:42
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12541

TNS-12541: Message 12541 not found; No message file for product=network, facility=TNS
    ns secondary err code: 12560
    nt main err code: 511

TNS-00511: Message 511 not found; No message file for product=network, facility=TNS
    nt secondary err code: 111
    nt OS err code: 0

где бархат моего местного хоста и johndoe в мое местное имя. Почему? отправили на другую сторону?

обновление:

после исследования немного больше изнутри центра обработки данных, и это выглядит так: - первое соединение идет к порту 1521 - но затем sqlplus перенаправляется на номер порта > 3300, который отличается каждый раз и увеличивается на 3 (по крайней мере, несколько попыток у меня было) - когда мы пытаемся подключиться через туннель sqlplus попытается подключиться к localhost, и это, очевидно, не удастся

поэтому ошибка "Нет слушателя", вероятно, происходит из-за того, что мы не перенаправляем эти порты. Есть ли способ (возможно, какой-то вариант в tnsnames.Ora file), чтобы заставить какой-то конкретный порт использоваться?

6 ответов


посмотрите в Metalink ID 361284.1 (Edit: эффективно не публичный, но найти информацию здесь)

похоже, что Oracle Connection Manager будет вашим вариантом. Он в основном обрабатывает перенаправления портов внутри брандмауэра. Я не использовал его раньше, поэтому не могу посоветовать вам дальше.


обновление: другой способ пойти было бы использовать МТС, настроить диспетчеров с определенными портами и открыть эти порты в брандмауэр. Для этого не нужно устанавливать дополнительное программное обеспечение, но подключение через общий сервер может потребовать увеличения LARGE_POOL_SIZE, среди прочих соображений. Таким образом, вам все равно понадобится роль DBA для изменения параметра DISPATCHERS. Вам также придется отскочить от DB.


обычно это должно работать. Я не хотела использовать порт по умолчанию, как запись для SSH, но это не должно быть проблемой. Я бы также не использовал учетную запись root для создания ssh-соединения, предпочтительно выделенную обычную учетную запись. Вы используете общие серверы или база данных является базой данных RAC с конфигурацией баланса нагрузки? Хорошее объяснение здесь Как я могу подключиться к ORACLE DB через ssh tunnel chain (двойной туннель, сервер в компании сеть)?, все немного сложнее .....

обновление оформить заказ DbVisualizer, теперь он интегрировал SSH-туннелирование. Думаю, стоит хотя бы попробовать. Это не бесплатно, но хорошо. Multi платформа и multi база данных и очень гибкий.


можете ли вы попытаться сделать трассировку, чтобы точно определить, что происходит:

  • для трассировки сервера, попробовать здесь (будьте осторожны! весь новый запрос будет прослежен, и сервер может быть свернут).
  • для трассировки клиента, в кассу здесь.

MJ! Ваш туннель предназначен только для начального tcp-соединения, ваш собственный порт прослушивания не туннелируется и, вероятно, не реализован. Брандмауэр должен разрешить подключение к вам, аналогично активному FTP. Все порты для Oracle задокументированы довольно широко, начиная со страницы 670 "создание брандмауэров Интернета" 2 / E Глава 23, параграф: Oracle SQL * Net и Net8. Вы можете просмотреть его на SafariBooksOnline.com

ISBN 1565928718


возможно, ваш слушатель еще не запущен. Попробуйте выполнить"lsnrctrl пуск команда".


хорошее объяснение здесь подключение к базе данных oracle через безопасную оболочку SSH что сработало для меня.

  1. откройте putty и на странице сеанса введите имя сервера и убедитесь, что SSH проверен. Сервер может быть любым сервером, который у вас есть имя пользователя и пароль для входа. Я использую один здесь под названием BLUEBIRD как Он принадлежит мне!

  2. на странице соединение - > ssh - >туннели снимите оба параметра вверху ("локальные порты принимают ..."и" удаленные порты делают то же самое").

  3. введите 9999 (или любой порт выше 1024 в качестве исходного порта.

  4. в пункте назначения введите узел базы данных и порт согласно tnsnames. В моем случае это сервер под названием GREENBIRD и порт

  5. введите это как server: port.

  6. поскольку перенаправляемый порт находится на вашем рабочем столе, установите флажок "локальный". Покидать "Авто" также проверено для версии IP.

  7. нажать кнопку "Добавить". Вы увидите l9999 greenbird: 1521 (Ваш будет отличаться) в списке перенаправленных портов.

  8. снова перейдите на страницу сеанса, введите имя сохраненного сеанса и нажмите кнопку Сохранить.

  9. Нажмите кнопку Открыть. Укажите имя пользователя и пароль для сервера (BLUEBIRD в моем случае). Вы войдете в обычный сеанс ssh на сервер с именем СИНЯЯ ПТИЦА.