![](/img/trans.png)
[英]Oracle returns me oci_connect(): ORA-12170: TNS:Connect timeout occurred in oracle 8g
[英]oci_connect() ORA-12170: TNS:Connect timeout occurred
我需要使用oci_connect()连接到远程oracle数据库。 等待几分钟后,我得到此错误。
$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] =>
)
原因:服务器关闭是因为在指定的时间间隔内未能完成与客户端的连接建立或通信。 这可能是网络或系统延迟的结果; 或这可能表明恶意客户端正在尝试对服务器进行拒绝服务攻击。
将sqlnet.ora中的参数SQLNET.INBOUND_CONNECT_TIMEOUT , SQLNET.OUTBOUND_CONNECT_TIMEOUT , SQLNET.SEND_TIMEOUT , SQLNET.RECV_TIMEOUT , TCP.CONNECT_TIMEOUT之一或全部重新配置为更大的值。
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,具有SSL的TCP和IPC传输连接。 SQLNET.INBOUND_CONNECT_TIMEOUT
如果客户端未能在指定的时间内建立连接并完成身份验证,则数据库服务器将终止连接。 此外,数据库服务器还将客户端的IP地址和ORA-12170:TNS:Connect发生超时错误消息记录到sqlnet.log文件中。 客户端收到ORA-12547:TNS:丢失的联系人或ORA-12637:数据包接收失败的错误消息。 TCP.CONNECT_TIMEOUT
指定客户端建立与数据库服务器的TCP连接(TNS连接地址中的PROTOCOL = tcp)的时间(以秒为单位)。 如果在指定的时间内未建立与数据库主机的TCP连接,则连接尝试将终止。 客户端收到ORA-12170:TNS:连接超时发生错误。 超时适用于主机名解析为的每个IP地址。 例如,如果主机名解析为IPv6和IPv4地址,并且如果主机无法通过网络访问,则连接请求将使TCP.CONNECT_TIMEOUT设置超时两倍,因为存在两个IP地址。 在此示例中,默认超时设置为60将导致120秒内超时。 如果怀疑有恶意客户端,请使用sqlnet.log中的地址来标识源并限制访问。 请注意,记录的地址可能不可靠,因为它们可以被伪造(例如在TCP / IP中)。
XXX.XXX.XXX.XXX myhost
sqlnet.ora文件通常位于
UNIX
平台上的$ORACLE_HOME/network/admin
和Windows
操作系统上的%ORACLE_HOME%\\NETWORK\\ADMIN
中。在
Windows OS
,您的主机文件位于%SystemRoot%\\System32\\drivers\\etc\\hosts
,在Unix
,Unix-like
POSIX
,位于/etc/hosts
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.