![](/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.