SQLNET.RECV_TIMEOUT & SQLNET.SEND_TIMEOUT
————————————————————————
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秒都無法接收後,報錯,終止資料傳輸
如果設定在客戶端,就是反過來
這兩個引數是處理對端異常終止的情況,沒有發現這個引數有何特殊的影響
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/,如需轉載,請註明出處,否則將追究法律責任。