Вопрос

Моя цель - подключиться к экземпляру 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:

  1. ИМЯ ПОЛЬЗОВАТЕЛЯ БУДЕТ системным В СООТВЕТСТВИИ С ИНСТРУКЦИЕЙ, ПРИВЕДЕННОЙ В ПРИВЕДЕННОЙ ВЫШЕ ССЫЛКЕ
  2. ваш пароль ДОЛЖЕН БЫТЬ НЕ 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, чтобы обе установки могли использовать разные домашние каталоги.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top