SQLNET.RECV_TIMEOUT & SQLNET.SEND_TIMEOUT

westzq1984發表於2013-08-05
————————————————————————
SQLNET.RECV_TIMEOUT
————————————————————————
客戶端設定的作用是,其發起的請求,必須在設定值內有返回,否則報錯中斷
該引數不是限制執行時間,而是限制返回包的時間

如果執行一個SQL抽取資料,由於每秒都有資料返回,所以不會報錯
如果執行一個存過,由於請求是傳送到資料庫端執行的,如果在設定值內無法執行完成並返回,將報錯
另外,只是中斷執行的語句,不是殺掉程式

如下測試是SQLNET.RECV_TIMEOUT=5時的情況

SQL> exec dbms_lock.sleep(4);

PL/SQL procedure successfully completed.

SQL>  exec dbms_lock.sleep(5);
BEGIN dbms_lock.sleep(5); END;

*
ERROR at line 1:
ORA-12609: TNS: Receive timeout occurred


SQL> exec dbms_lock.sleep(4);

PL/SQL procedure successfully completed.

SQL> select count(*) from dba_objects,dba_objects;
select count(*) from dba_objects,dba_objects
*
ERROR at line 1:
ORA-12609: TNS: Receive timeout occurred


Elapsed: 00:00:05.02

SQL> exec P_test(1);    

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.01
SQL>  exec P_test(2);

PL/SQL procedure successfully completed.

Elapsed: 00:00:04.01
SQL> exec P_test(3);
BEGIN P_test(3); END;

*
ERROR at line 1:
ORA-12609: TNS: Receive timeout occurred


Elapsed: 00:00:05.01
SQL>

SQL> select * from dba_objects;

70288 rows selected.

Elapsed: 00:02:02.20

伺服器端設定的作用是,
伺服器端收到客戶端請求的時間,和上一個請求的時間之間,間隔不能超過3秒
如果超過3秒,就在ALERT中報告ORA-12609

如下測試是在伺服器端設定sqlnet.recv_timeout=3

09:47:50 SQL> /
select * from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 5103
Session ID: 140 Serial number: 41


09:47:51 SQL> /

D
-
X

09:47:53 SQL> /

D
-
X

09:47:57 SQL> /
select * from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 5105
Session ID: 140 Serial number: 43


09:47:58 SQL> /

D
-
X

————————————————————————
SQLNET.SEND_TIMEOUT
————————————————————————
如果設定在伺服器端,那麼作用是
當一個取數的客戶端程式異常終止後,在伺服器端發現其死亡前,oracle端傳送資料的伺服器程式將繼續傳送資料,在其檢測到客戶端3秒都無法接收後,報錯,終止資料傳輸
如果設定在客戶端,就是反過來

這兩個引數是處理對端異常終止的情況,沒有發現這個引數有何特殊的影響

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-767790/,如需轉載,請註明出處,否則將追究法律責任。