ORA-12170: TNS: произошло время ожидания подключения
7 ответов
[сбор ответов в комментариях]
проблема в том, что Служба 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
(под windows) или ifconfig
(под linux) команда.
Howewer, в моей установке, служба Oracle не работает если установлен на localhost адрес, я должен установить реальный IP-адрес хоста (например 192.168.10.X).
чтобы избежать этой проблемы в будущем, не используйте DHCP для назначения IP-адреса хоста, а используйте статический.
это из-за конфликтующего 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/password@192.168.130.52:1521/orcl
чтобы решить эту проблему, внесите изменения в файл tnsnames.Ора файл:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.130.52)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
Проверьте брандмауэр, чтобы разрешить подключение на сервере от вашего клиента. Разрешив доменную сеть или создав правило.
проблема, потому что установление соединения или связь с клиентом не удалось завершить в течение отведенного интервала времени. Это может быть результатом сетевых или системных задержек.
я получал ту же ошибку при подключении моего пользователя "hr" ORCLPDB, который является подключаемой базой данных.
во-первых, получить имя хоста и номер порта, введите команду lsnrctl status
в командной строке Windows. В моем случае, это был 127.0.0.1 и номер порта, как 1521
во-вторых, введите команду ниже с именем хоста и номером порта:
sqlplus username/password@HostName:Port Number/PluggableDatabaseName.
например:
sqlplus hr/hr@127.0.0.1:1521/ORCLPDB.
ШАГИ ПО УСТРАНЕНИЮ НЕПОЛАДОК (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 в своем предупреждении.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. Из этого следует, что любая проблема, возникшая на этих этапах, которая выглядит как зависание или серьезная низкая производительность, может привести к таймауту.
симптомы таких зависаний будут видны сеансом аутентификации как ожидания для: * курсор: pin s ждать на X * защелка: объекты кэша строк * блокировка кэша строк Возможны другие типы событий ожидания; этот список может быть неполным.
проблема здесь в том, что сеанс аутентификации заблокирован, ожидая получения общего ресурса, который удерживается другим сеансом внутри базы данных. Этот сеанс блокатора сам занят длительным действием (или его собственным зависанием), которое не позволяет ему освободить общий ресурс, необходимый сеансу аутентификации в своевременная мода. В результате время ожидания в итоге сообщили аутентификации сессии.
- Устранение неполадок аутентификации зависает
в таких ситуациях нам нужно выяснить процесс блокатора, содержащий общий ресурс, необходимый сеансу аутентификации, чтобы увидеть, что с ним происходит.
типичные диагностики используемые в таких случаях следующие:
- три раза подряд systemstate сбрасывает на уровне 266 во время блокировки одного или нескольких сеансов проверки подлинности. Вполне вероятно, что сеанс блокировки приведет к тайм-аутам более чем одной попытки подключения. Следовательно, дампы systemstate могут быть полезны, даже если время, необходимое для их создания, превышает период одного таймаута, например 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 view для случая, когда ожидаемый общий ресурс является защелкой. выбрать * из V$latchholder; Дампы systemstate должны помочь в идентификации сеанса блокатора. Уровень 266 покажет нам, в каком коде он выполняется, что может помочь в поиске любой существующей ошибки в качестве основной причины.
примеры проблем, которые могут привести к зависанию аутентификации
- неопубликованные Ошибка 6879763 shared pool simulator ошибка исправлена патчем для неопубликованной ошибки 6966286 см. Примечание 563149.1
неопубликованная ошибка 7039896 обходной параметр _enable_shared_pool_durations=false см. Примечание 7039896.8
другие подходы, чтобы избежать проблем
в некоторых случаях можно избежать проблем с аутентификацией SQL, закрепив такие операторы в общем пуле вскоре после экземпляра запускается и они свежеиспеченные. Вы можете использовать следующие статья для: Документ 726780.1 как закрепить Курсор в общем пуле с помощью DBMS_SHARED_POOL.KEEP
закрепление предотвратит их вымывание из-за бездействия и старения и, следовательно, предотвратит их необходимость перезагрузки в будущем, т. е. необходимость повторного ремонта и подверженности проблемам с аутентификацией.
open sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.INBOUND_CONNECT_TIMEOUT=360
SQLNET.RECV_TIMEOUT=10
SQLNET.SEND_TIMEOUT=10
http://docs.oracle.com/cd/B19306_01/network.102/b14213/sqlnet.htm