2017-01-14 12 views
0

Мне нужно подключиться к базе данных оракула с помощью oci_connect(). Подождав несколько минут, я получаю эту ошибку.oci_connect() ORA-12170: TNS: произошел таймаут подключения

$db = 
    '(DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = XXXX)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = citi) 
    ) 
)'; 

$conn = oci_connect('username', 'password', $db); 
if (!$conn) { 
    $e = oci_error(); 
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); 
} 

$stid = oci_parse($conn, 'SELECT * FROM Tmt'); 
oci_execute($stid); 

Я получаю эту следующую ошибку

PHP Warning: oci_connect(): ORA-12170: TNS:Connect timeout occurred in /var/www/curiouslabx.com/public_html/wordpress/projects/test.php on line 14 
Array 
(
    [code] => 12170 
    [message] => ORA-12170: TNS:Connect timeout occurred 
    [offset] => 0 
    [sqltext] => 
) 
+0

посмотрите здесь есть много причин, по этому одному http://www.dba-oracle.com/t_ora_12170_tns_connect_timeout.htm –

ответ

-1

Причина: Сервер выключен, поскольку установление соединения или связи с клиентом не удалось завершить в течение отведенного промежутка времени. Это может быть результатом сетевых или системных задержек; или это может указывать на то, что вредоносный клиент пытается вызвать атаку «Отказ в обслуживании» на сервере.

  • Переконфигурировать один или все параметры SQLNET.INBOUND_CONNECT_TIMEOUT, SQLNET.OUTBOUND_CONNECT_TIMEOUT, SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT, TCP.CONNECT_TIMEOUT в sqlnet.ora до больших значений.

    • SQLNET.RECV_TIMEOUT - Для условий, при которых клиенты иногда выключаются или аномально, рекомендуется установить этот параметр. Если клиент не отправляет какие-либо данные вовремя, то сервер базы данных регистрирует ORA-12535: TNS: время работы и ORA-12609: TNS: время ожидания приема сообщения в файл sqlnet.log. Без этого параметра сервер базы данных может продолжать ждать данных от клиентов, которые могут быть недоступны или испытывают трудности.
    • SQLNET.SEND_TIMEOUT - Если сервер базы данных не может завершить операцию отправки в указанное время, то он регистрирует ORA-12535: TNS: время ожидания работы и ORA-12608: TNS: отправлено сообщение об ошибке в файл sqlnet.log. Без этого параметра сервер базы данных может продолжать отправлять ответы клиентам, которые не могут получать данные из-за сбитого компьютера или состояния занятости.
    • SQLNET.INBOUND_CONNECT_TIMEOUT - Если соединение Oracle Net не установлено в указанное время, попытка подключения прекращается. Клиент получает сообщение ORA-12170: TNS: произошла ошибка таймаута подключения. Интервал тайм-аута исходящего соединения представляет собой надмножество интервала тайм-аута соединения TCP, в котором указано ограничение времени на установление TCP-соединения. Кроме того, интервал тайм-аута исходящего соединения включает время, необходимое для подключения к экземпляру Oracle, предоставляющему запрошенную услугу. Без этого параметра запрос на соединение с клиентом на сервере базы данных может блокировать длительность таймаута TCP-соединения по умолчанию (60 секунд), когда хост-система сервера базы данных недоступна. Интервал тайм-аута исходящего соединения применим только для TCP, TCP с SSL и транспортных соединений IPC.
    • SQLNET.INBOUND_CONNECT_TIMEOUT - Если клиент не смог установить соединение и завершить аутентификацию в указанное время, сервер базы данных завершает соединение. Кроме того, сервер базы данных регистрирует IP-адрес клиента и сообщение ORA-12170: TNS: сообщение об ошибке завершено в файле sqlnet.log. Клиент получает либо ORA-12547: TNS: потерянный контакт, либо сообщение ORA-12637: сообщение об ошибке получения отказа.
    • TCP.CONNECT_TIMEOUT - Чтобы указать время, в секундах, чтобы клиент установил TCP-соединение (PROTOCOL = tcp в адресе подключения TNS) к серверу базы данных. Если TCP-соединение с узлом базы данных не установлено в указанное время, попытка соединения прекращается. Клиент получает сообщение ORA-12170: TNS: произошла ошибка таймаута подключения. Таймаут применяется к каждому IP-адресу, которому разрешено имя хоста. Например, если имя хоста разрешено для IPv6 и IPv4-адреса, и если хост недоступен через сеть, тогда запрос соединения дважды истекает в настройках TCP.CONNECT_TIMEOUT, потому что есть два IP-адреса. В этом примере значение тайм-аута по умолчанию, равное 60, приведет к таймауту через 120 секунд.
  • Если подозрительный клиент подозревается, используйте адрес в sqlnet.log, чтобы определить источник и ограничить доступ. Обратите внимание, что зарегистрированные адреса могут быть ненадежными, поскольку они могут быть подделаны (например, в TCP/IP).

  • Убедитесь, что ваш/и т.д./хост файл имеет запись DNS: пример XXX.XXX.XXX.XXX myhost

Файл sqlnet.ora обычно находится в $ORACLE_HOME/network/admin на UNIX платформах и %ORACLE_HOME%\NETWORK\ADMIN на Windows операционных систем.

В Windows OS, ваш хост-файл находится в %SystemRoot%\System32\drivers\etc\hosts и Unix, Unix-like, POSIX, в /etc/hosts.

Кредиты: ORA-12170: TNS: Connect timeout occurred tips, Parameters for the sqlnet.ora File