ORA-12170: TNS: время ожидания подключения

Я пытался подключиться к базе данных здесь, на своем ноутбуке, используя Oracle Toad, но я продолжал эту ошибку:

ORA-12170: TNS: время ожидания подключения

Каковы возможные причины, по которым я продолжал эту ошибку?

Я обратился к той же базе данных вчера и смог получить к ней доступ.

Ответ 1

[Сбор ответов в комментариях]

Проблема в том, что служба Oracle работает на IP-адресе, а хост настроен с другим IP-адресом.

Чтобы увидеть IP-адрес службы Oracle, выполните команду lsnrctl status и проверьте адрес, указанный (в данном случае 127.0.0.1, localhost):

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

Чтобы увидеть IP-адрес хоста, выполните команду ipconfig (под окнами) или ifconfig (под Linux).

Как только в моей установке служба Oracle не работает, если она установлена ​​на адрес localhost, я должен установить реальный IP-адрес хоста (например, 192.168.10.X).

Чтобы избежать этой проблемы в будущем, не используйте DHCP для назначения IP-адреса хоста, а используйте статический.

Ответ 2

Это связано с конфликтующим SID. Например, в вашем файле Oracle12cBase\app\product\12.1.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora это описание соединения для ORCL:

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

И вы пытаетесь подключиться, используя строку подключения, используя тот же SID, но другой IP, имя пользователя/пароль, например:

sqlplus username/[email protected]: 1521/orcl

Чтобы устранить это, внесите изменения в файл tnsnames.ora:

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.130.52)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

Ответ 3

Проверьте FIREWALL, чтобы разрешить подключение на сервере от вашего клиента. Разрешить доменную сеть или создать правило.

Ответ 4

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

Ответ 5

Я получал ту же ошибку при подключении своего "hr" пользователя ORCLPDB, который является подключаемой базой данных.

Сначала введите имя хоста и номер порта, введя команду lsnrctl status в командной строке Windows. В моем случае это было 127.0.0.1 с номером порта как 1521

Во-вторых, введите следующую команду с именем хоста и номером порта:

sqlplus username/[email protected]:Port Number/PluggableDatabaseName.

Например:

sqlplus hr/[email protected]:1521/ORCLPDB.

Ответ 6

УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ (Doc ID 730066.1)

Ошибки времени ожидания ORA-3135 и ORA-3136 Ошибка таймаута соединения может быть выдана, когда попытка подключения к базе данных не завершает фазы подключения и аутентификации в течение периода времени, допускаемого следующим: SQLNET.INBOUND_CONNECT_TIMEOUT и/или INBOUND_CONNECT_TIMEOUT _.

Начиная с Oracle 10.2, по умолчанию для этих параметров 60 секунд, где в предыдущих выпусках было 0, что означает отсутствие таймаута.

При истечении времени клиентская программа получит ошибку ORA-3135 (или, возможно, TNS-3135):

Связь с ORA-3135 потеряла связь

и в базе данных будет зарегистрирована ошибка ORA-3136 в файле alert.log:

... Сб май 10 02:21:38 2008     ПРЕДУПРЕЖДЕНИЕ: время ожидания входящего соединения (ORA-3136)...

  • Аутентификация SQL

Когда сеанс базы данных находится в фазе проверки подлинности, он выдает последовательность операторов SQL. Аутентификация не завершена до тех пор, пока все они не будут проанализированы, выполнены, полностью извлечены. Некоторые из операторов SQL в этом списке, например. на 10.2:

select value$ from props$ where name = 'GLOBAL_DB_NAME'

select privilege#,level from sysauth$ connect by grantee#=prior privilege# 
and privilege#>0 start with grantee#=:1 and privilege#>0

select SYS_CONTEXT('USERENV', 'SERVER_HOST'), SYS_CONTEXT('USERENV', 'DB_UNIQUE_NAME'),
SYS_CONTEXT('USERENV', 'INSTANCE_NAME'), SYS_CONTEXT('USERENV', 'SERVICE_NAME'), 
INSTANCE_NUMBER, STARTUP_TIME, SYS_CONTEXT('USERENV', 'DB_DOMAIN') 
from v$instance where INSTANCE_NAME=SYS_CONTEXT('USERENV', 'INSTANCE_NAME')

select privilege# from sysauth$ where (grantee#=:1 or grantee#=1) and privilege#>0

ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN' NLS_TERRITORY= 'AMERICA' NLS_CURRENCY= '$'
NLS_ISO_CURRENCY= 'AMERICA' NLS_NUMERIC_CHARACTERS= '.,' NLS_CALENDAR= 'GREGORIAN'
NLS_DATE_FORMAT= 'DD-MON-RR' NLS_DATE_LANGUAGE= 'AMERICAN' NLS_SORT= 'BINARY' TIME_ZONE= '+02:00'
NLS_COMP= 'BINARY' NLS_DUAL_CURRENCY= '$' NLS_TIME_FORMAT= 'HH.MI.SSXFF AM' NLS_TIMESTAMP_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM' NLS_TIME_TZ_FORMAT= 'HH.MI.SSXFF AM TZR' NLS_TIMESTAMP_TZ_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM TZR'

ПРИМЕЧАНИЕ. Список SQL выше не является полным и не представляет собой упорядочение аутентификации SQL. Различия могут также существовать от выпуска до выпуска.

  • Повреждения во время аутентификации

Вышеприведенные операторы SQL должны быть проанализированы, выполнены и извлечены, как это происходит для всего SQL внутри базы данных Oracle. Из этого следует, что любая проблема, возникающая во время этих фаз, которая появляется как зависание или сильная медленная работа, может привести к таймауту.

Симптомы таких зависаний будут рассматриваться сеансом аутентификации, ожидающим: • курсор: вывод S на X • защелка: объекты кеша строки • блокировка кеша строки Возможны другие типы событий ожидания; этот список может быть неполным.

Проблема здесь в том, что сеанс аутентификации заблокирован в ожидании получения общего ресурса, который хранится другим сеансом внутри базы данных. Этот сеанс блокировки сам занят длительной деятельностью (или собственной зависанием), которая мешает ей своевременно выпускать общий ресурс, необходимый для сеанса аутентификации. Это приводит к тому, что тайм-аут будет отправлен на сеанс аутентификации.

  • Устранение неполадок аутентификации зависает

В таких ситуациях нам нужно выяснить процесс блокировки, содержащий общий ресурс, необходимый для сеанса аутентификации, чтобы увидеть, что с ним происходит.

Типичная диагностика, используемая в таких случаях, такова:

  • Три последовательных дампа системных состояний на уровне 266 за время блокировки одного или нескольких сеансов аутентификации. Вполне вероятно, что сеанс блокировки заставит тайм-ауты более чем одной попытке подключения. Следовательно, системные дампы могут быть полезны, даже если время, необходимое для их создания, превышает период одного таймаута, например. 60 секунд:
      $ sqlplus -prelim '/ as sysdba' 

       oradebug setmypid 
       oradebug unlimit 
       oradebug dump systemstate 266 
       ...wait 90 seconds 
       oradebug dump systemstate 266 
       ...wait 90 seconds 
       oradebug dump systemstate 266 
       quit
  • Отчеты ASH охватывают, например, 10-15 минут периода времени, в течение которого были обнаружены несколько ошибок таймаута.
  • Если возможно, два последовательных запроса в представлении V $LATCHHOLDER для случая, когда ожидающим общий ресурс является защелка. выберите * from v $latchholder; Системные свалки должны помочь в определении сеанса блокиратора. Уровень 266 покажет нам, в каком коде он выполняется, что может помочь найти любую существующую ошибку в качестве основной причины.

Примеры проблем, которые могут привести к аутентификации, зависают

  • Неопубликованная ошибка 6879763 ошибка симулятора общего пула, исправленная исправлением для неопубликованного Bug 6966286 см. Примечание 563149.1
  • Неопубликованный параметр ошибки 7039896 _enable_shared_pool_durations = false см. примечание 7039896.8

  • Другие подходы, чтобы избежать проблемы

В некоторых случаях может быть возможно избежать проблем с аутентификацией SQL путем закрепления таких операторов в общем пуле вскоре после запуска экземпляра, и они будут только что загружены. Вы можете использовать следующую artcile, чтобы сообщить об этом: Документ 726780.1 Как связать курсор в общем пуле с помощью DBMS_SHARED_POOL.KEEP

Привязка предотвратит их сброс из-за неактивности и старения и, следовательно, предотвратит их необходимость в перезагрузке в будущем, т.е. необходимо будет пересмотреть и стать уязвимыми для проблем с проверкой подлинности.