Почему sqlplus не подключается?
Вопрос
Моя цель - подключиться к экземпляру Oracle 9i с моего компьютера OS X.Я следовал инструкциям по настройке здесь и прошел через них без ошибок (в конце концов).Однако я нахожу, что sqlplus не может подключиться:
[ ethan@gir ~ ]$ sqlplus xxx/yyy@zzz
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Ооооочень долго ждать...
ERROR:
ORA-12170: TNS:Connect timeout occurred
Enter user-name: xxx
Enter password:
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Enter user-name:
Мой tnsnames.ora
файл...
zzz =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = dbhost)
(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zzz)
)
)
Может быть, есть переменная env, которую нужно установить?
Обновить
Возможность пинговать хост-машину базы данных без проблем.
Пытался...
sqlplus xxx/yyy@//dbhost/zzz
Получил...
ERROR:
ORA-12170: TNS:Connect timeout occurred
Пробовал использовать SID
вместо того , чтобы SERVICE_NAME
в tnsnames.ora.Похоже, это не изменило результат.Вернулся обратно к SERVICE_NAME
.
Последняя пара записей в sqlnet.log...
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for MacOS X Server: Version 10.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
Time: 17-APR-2009 10:33:06
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
nt secondary err code: 60
nt OS err code: 0
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for MacOS X Server: Version 10.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
Time: 17-APR-2009 11:24:08
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
nt secondary err code: 60
nt OS err code: 0
ЧАСТИЧНЫЙ ОТВЕТ
Спасибо всем за ваши ответы.Они были полезны.Я обнаружил, что возникла проблема с DNS.Я смог выполнить пинг по имени хоста, поэтому подумал, что это должно сработать нормально.Я также попробовал I.P.адрес.Оказалось, что мне нужен был внутренний "10.1.x.x" I.P.адрес, чтобы он работал на этом компьютере с OS X (но имя хоста подходит для Windows).
На данный момент я могу связаться с...
sqlplus xxx/yyy@//INTERNAL_IP/zzz
Однако с этими значениями, введенными в tnsnames.ora, это по-прежнему не работает...
sqlplus xxx/yyy@zzz
...
ORA-12154: TNS:could not resolve the connect identifier specified
Я искал образец файла tnsnames.ora, который был близок к тому, что мне было нужно, и скопировал содержимое в свой файл.Изменил параметры, и теперь все работает.Не уверен, почему мой не работал.
Решение
Поскольку вы используете 10g
клиенту, желательно использовать Easy Connect
синтаксис вместо этого:
export TWO_TASK=//dbhost/zzz
sqlplus xxx/yyy
, или только это:
sqlplus 'xxx/yyy@//dnhost/zzz'
Также проверьте свой ORACLE_HOME
указывает на нужную папку: tnsnames.ora
ищется в $ORACLE_HOME/network/admin/tnsnames.ora
Другие советы
Ваши скобки кажутся правильными.
Попробуйте использовать SID:
Ниже приведен пример файла tnsnames.ora:
IDENTIFIER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
)
(CONNECT_DATA = (SID = odb))
)
Вы можете использовать
sqlplus user/password@servicename_host
если вы не можете подключиться, вы можете использовать
sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))
если вы используете linux, другую ОС * Nix, вам нужно использовать кавычки, иначе функция () интерпретируется оболочкой
например, g
sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
Вероятно, в вашем рабочем каталоге создается файл sqlnet.log.Это может помочь вам или, если вы опубликуете его содержимое, это может дать нам больше информации.
В вашем примере вы пробуете две разные вещи.В командной строке вы использовали "xxx/yyy@zzz".Похоже, что это нахождение записи "zzz" в tnsnames.запуск выполнен успешно, но время ожидания указывает на то, что он не получает никакого ответа вообще от сервера.Можете ли вы успешно выполнить пинг dbhost?
Со второй попытки вы просто ввели "xxx" в качестве имени пользователя;что имеет смысл, если вы не привыкли к SQLPlus, но, как вы можете видеть, нет никакого момента, когда он запрашивает у вас имя базы данных.Таким образом, в данном случае он пытался подключиться к "xxx / yyy" без имени службы, что привело ко второй ошибке.Это просто означает, что у вас не настроено имя службы по умолчанию.Таким образом, эта ошибка возникает из-за неполного ввода.(Вы должны ввести "xxx@zzz" в качестве имени пользователя, чтобы указать имя службы в этом запросе.На самом деле вы можете ввести всю строку подключения "xxx /yyy@zzz" в запросе имени пользователя, если вы не возражаете, чтобы пароль был виден.)
Вы пробовали использовать telnet для доступа к открытому порту, чтобы убедиться, что брандмауэр вас не блокирует?возможно, стоит попробовать telnet port-num host
Настроили ли вы свою среду с помощью ораэнв сценарий?
Вы пробовали tnsping
?
$ tnsping $ORACLE_SID
Возможно, это поможет сравнить выходные данные на машине, которая подключается, с выходными данными на машине, которая не подключается.По крайней мере, это то, что я делаю непосредственно перед тем, как связаться с нашим администратором базы данных.
Вы можете получить немного более подробную информацию о том, что такое ошибка с oerr
команда:
$ oerr ora 12170
12170, 00000, "TNS:Connect timeout occurred"
// *Cause: The server shut down because connection establishment or
// communication with a client failed to complete within the allotted time
// interval. This may be a result of network or system delays; or this may
// indicate that a malicious client is trying to cause a Denial of Service
// attack on the server.
// *Action: If the error occurred because of a slow network or system,
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT,
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
// If a malicious client is suspected, use the address in sqlnet.log to
// identify the source and restrict access. Note that logged addresses may
// not be reliable as they can be forged (e.g. in TCP/IP).
У меня была похожая проблема, и, похоже, проблема была в Oracle sqlplus!
Подключение, подобное любой из этих работ:
> sqlplus MyUsername/MyPassword@MyHostname:1521/MyServiceName
> sqlplus MyUsername/MyPassword@//MyHostname:1521/MyServiceName
(// является необязательным перед именем хоста).Однако при отключении пароля или обоих пользователей / пропусков происходит сбой, подобный этому:
sqlplus @//MyHostname:1521/MyServiceName
SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql"
Enter user-name: MyUsername
Enter password: MyPassword
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Таким образом, даже если sqlplus запросит у вас имя пользователя / пароль, он тупо завершится ошибкой с поддельным сообщением об ошибке, если вы введете их в командной строке.Это работает только в том случае, если вы разместите их (оба!) в начале строки подключения.
Глупый Оракул!!!
Подписаться ЭТО ССЫЛКА ДЛЯ ПОШАГОВОЙ УСТАНОВКИ И МЕТОДОВ ПОСЛЕ УСТАНОВКИ..БУДЬТЕ ОСТОРОЖНЫ С ЭТИМ.
И для подключения с помощью sql plus:
- ИМЯ ПОЛЬЗОВАТЕЛЯ БУДЕТ системным В СООТВЕТСТВИИ С ИНСТРУКЦИЕЙ, ПРИВЕДЕННОЙ В ПРИВЕДЕННОЙ ВЫШЕ ССЫЛКЕ
- ваш пароль ДОЛЖЕН БЫТЬ НЕ tiger, а тот, который вы установили в начале установки
P.S:не паникуйте, если вы обнаружите проблему (несовместимость браузера) при подключении Oracle Enterprise Manager во время тестирования установки, если вашим браузером является Google Chrome.нажмите на стрелки "Назад" и "Следующая страница", чтобы согласиться с условиями и нажать "ок".
Я решил эту проблему на своем компьютере за один день..но для вас это будет вопрос пары закусок.
сорусы:я инженер по информатике, в основном пишу на Java
У меня была такая же ошибка (ORA-12162:TNS: неверно указано имя сетевой службы), но по другой причине (в 64-разрядной версии Windows 7 Enterprise).Надеюсь, это кому-то поможет:
I.T.на моей работе был установлен 32-битный и 64-битный Oracle, и на основе моей переменной PATH оболочка искала 64-битный путь для SQLPLUS.exe по сравнению с 32-битным путем.
Разные пути используют разные файлы TNSNAMES.ora, и у меня не было моей строки подключения в 64-разрядном пути:
Oracle\продукт\11.1.0\client_1_64bit\сеть\администратор NSNAMES.ora
У меня была только строка подключения в 32-разрядном TNSNAMES.ora:Oracle\продукт\11.1.0\client_1_32bit\сеть\администратор NSNAMES.ora
Кроме того, поскольку было установлено несколько ORACLE, мне пришлось удалить переменную среды ORACLE_HOME, чтобы обе установки могли использовать разные домашние каталоги.