最近遇到些空閒連線超時相關的問題,查了下主要有以下與超時相關引數,整理記錄含義及區別。
expire_time 用於死連線檢測。設定該引數為非零值,12c前會定期給空閒連線傳送探測包檢查客戶端是否已異常斷開(12c開始則利用作業系統keepalive引數進行檢測)。一旦發現異常連線,最多會重傳作業系統引數tcp_retries2指定次數。如果超過最大重試次數仍重傳失敗,將返回錯誤並通知oracle pmon程序清除對應的server process。
值得注意的是,根據文件 doc id 395505.1,如果在1個sqlnet.expire_time之內客戶端有資料報傳送,在sqlnet.expire_time時間到來時,oracle不會再傳送探測資料報給客戶端,這樣有可能出現最大2*sqlnet.expire_time時間端內,沒有傳送探測包給客戶端的情況。
比如設定sqlnet.expire_time=10,最大空閒時間則可能為2*600=1200秒,如果防火牆空閒超時為910秒,完全可能出現在探測包傳送之前,空閒連線就已經被斷開的情況。
空閒超時時間。指定已建立的連線在不傳輸資料的情況下可以保持活動狀態的時間。
oracle預設情況下不會關閉非活躍連線(idle_timeout=0),但非活躍連線過長時間不退出可能導致連線數過高,浪費資料庫資源。將idle_timeout設定為大於0的值(單位為秒)指定會話空閒超時時間,到達超時時間後會話會被資料庫中斷。
通常防火牆會有kill空閒連線的配置,可以看看是否有必要重複設定。如果要設,idle_timeout指定的時間應該小於防火牆指定的空閒時間。
expire_time 與 idle_timeout的區別:
指定使用者會話允許的最長時間(以秒為單位)。很明顯這個引數要更進一步,無論使用者會話是不是空閒,到了session_timeout指定就會被中斷。
預設值為0,表示禁用該功能。
表示等待使用者認證超時的時間。單位是秒,預設60秒,如果客戶端在指定的時間內沒有連線上資料庫(例如使用者認證超時),會在listener.log中會出現 tns-12535: tns:operation timed out,在alert日誌中記錄 warning: inbound connection timed out (ora-3136) 和 tns-12535。
另外在listener.ora中也有乙個inbound_connect_timeout引數,名為:inbound_connect_timeout_***名。如果建立監聽後在設定的時間內沒有反應將會斷開連線,單位是秒,預設60秒。如果連線請求超時,listener.log中會出現 tns-12525: tns:listener has not received client's request in time allowed。
關於兩者之間的關係,官方文件建議
inbound_connect_timeout_listener_name的值低於sqlnet.inbound_connect_timeout。
前面幾個引數都是系統級的,下面來看可以在使用者級指定的超時引數。
使用者級的空閒超時時間。單位是分鐘,預設是unlimited,連線始終不會被斷開,這就占用了連線數資源。
配置步驟如下,注意設定後對已經連上的會話不生效,對新連上的會話才生效。
select username, b.*
from dba_users a, dba_profiles b
where a.profile = b.profile and username='username';
-- 更改該profile的idle_time
-- 使修改的資源生效,需要設定resource_limit設定為true
alter system set resource_limit=true;
如果使用者空閒超過指定時間,會報錯ora-02396:exceeded maximum idle time, please connect again
使用者級的會話超時時間(類似前面session_timeout),單位是分鐘,預設是unlimited。使用者會話在到達設定的時候後不能再繼續操作(無論期間是不是空閒)。
設定方法跟前面類似
select username, b.*
from dba_users a, dba_profiles b
where a.profile = b.profile and username='username';
-- 更改該profile的connect_time
-- 使修改的資源生效,需要設定resource_limit設定為true
alter system set resource_limit=true;
如果是設定1分鐘,會在將近2分鐘的時候提醒你重新登入,ora-02399: exceeded maximum connect time, you are being logged off。
參考
oracle 遠端連線超時問題
1 檢查你的伺服器oracle監聽是否啟動 lsnrctl status 如果沒有建立監聽或者沒有啟動,遠端是訪問不到的。2 檢查你的客戶端能否連到伺服器1521埠 telnet 伺服器ip 1521 因為有可能區域網內遮蔽了該ip的該埠的鏈結 3 檢查你的客戶端鏈結oracle配置是否正常,看看鏈...
Oracle連線超時 連線數限制
連線資訊 select from v session 主要列含義 username 連線使用者名稱 program 應用程式名 machine 機器名 osuser 作業系統使用者 logon time 登入時間 status session狀態 achtive 正執行sql語句,inactive ...
ORACLE資料庫連線超時設定
方法 一 直接修改資源配置檔案 分三個步驟在sqlplus環境下完成。第一步,查詢資源檔案,找到connect time所在的profile名。select resource name,profile from dba profiles 第二步,用alter命令修改profile中的值 alter ...