Использование 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
хорошее объяснение здесь подключение к базе данных oracle через безопасную оболочку SSH что сработало для меня.
откройте putty и на странице сеанса введите имя сервера и убедитесь, что SSH проверен. Сервер может быть любым сервером, который у вас есть имя пользователя и пароль для входа. Я использую один здесь под названием BLUEBIRD как Он принадлежит мне!
на странице соединение - > ssh - >туннели снимите оба параметра вверху ("локальные порты принимают ..."и" удаленные порты делают то же самое").
введите 9999 (или любой порт выше 1024 в качестве исходного порта.
в пункте назначения введите узел базы данных и порт согласно tnsnames. В моем случае это сервер под названием GREENBIRD и порт
введите это как server: port.
поскольку перенаправляемый порт находится на вашем рабочем столе, установите флажок "локальный". Покидать "Авто" также проверено для версии IP.
нажать кнопку "Добавить". Вы увидите l9999 greenbird: 1521 (Ваш будет отличаться) в списке перенаправленных портов.
снова перейдите на страницу сеанса, введите имя сохраненного сеанса и нажмите кнопку Сохранить.
Нажмите кнопку Открыть. Укажите имя пользователя и пароль для сервера (BLUEBIRD в моем случае). Вы войдете в обычный сеанс ssh на сервер с именем СИНЯЯ ПТИЦА.