Привет, у меня есть проблема с доступом к Oracle DB из нашего центра обработки данных через туннель.Использование оракула db через туннель ssh. Ошибка «ORA-12541: TNS: нет слушателя»
У нас есть довольно стандартный центр обработки данных с одной машиной, доступной снаружи (я помещаю его в файл/etc/hosts как dc) и внутри базы данных Oracle. IP-адрес нашего оракула базы данных по внутренней сети 192.168.1.7
Чтобы создать туннель, я использую команду:
ssh -L 1521:192.168.1.7:1521 [email protected]
и, конечно, он работает (иногда я также добавить некоторые отладки -vv чтобы увидеть, проходит ли что-то).
Теперь сложная часть - подключение к Oracle. Я установил instantclient 11.2. и мой tnsnames.ora выглядит следующим образом:
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbname)
)
)
И когда я пытаюсь подключиться с помощью команды:
./sqlplus username/[email protected]
Он начинает подключаться через туннель (я вижу его в SSH отладки), но затем он не рассказывающие:
./sqlplus username/[email protected]
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 ш e имеют 192.168.1.7, а не localhost).
Я также попытался использовать простую команду:
./sqlplus username/[email protected]//localhost:1521/testdb
или альтернативно
./sqlplus username/[email protected]//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=([email protected])(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 мой локальный имя пользователя. Почему он отправляется на другую сторону?
UPDATE:
После изучения немного больше внутри центров обработки данных, и это выглядит так: - первое подключение происходит к порту 1521 - но затем SQLPLUS перенаправляется на номер порта> 3300 , который отличается каждый раз и увеличивается на 3 (по крайней мере, несколько попыток, которые у меня были) - когда мы пытаемся подключиться через туннель, sqlplus попытается подключиться к локальному хосту, и он, очевидно, потерпит неудачу
Итак, ошибка «Нет прослушивателя» «происходит, вероятно, из-за того, что мы не перенаправляем se портов. Есть ли способ (возможно, некоторый вариант в файле tnsnames.ora), чтобы заставить использовать определенный порт?
Что такое операционная система сервера баз данных? Если это Windows, Google USE_SHARED_SOCKET –
Удар по этому поводу; Вы когда-нибудь находили решение? –
Чтобы уточнить: я подключаюсь к Oracle RAC, и я не в состоянии перенастроить прослушиватель с другой стороны (например, установить его для использования совместно используемого сокета). sqlplus подключается один раз каждые несколько попыток подключения, мое приложение никогда не удается подключиться. –