使用Oracle PROFILE控制會話空閒時間
客戶想實現對會話空閒時間的控制,下面是做的一個例子。
Microsoft Windows [版本 6.1.7601]
版權所有 (c) 2009 Microsoft Corporation。保留所有權利。
C:\Users\LIUBINGLIN>sqlplus sys/oracle123@localhost:1521/hello as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期二 4月 14 08:42:55 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
連線到:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create profile test_profile limit idle_time 1; <<<< 1表示允許的空閒時間為1分鐘。
配置檔案已建立
SQL> set linesize 200
SQL> select * from dba_profiles where profile='TEST_PROFILE';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
TEST_PROFILE COMPOSITE_LIMIT KERNEL DEFAULT
TEST_PROFILE SESSIONS_PER_USER KERNEL DEFAULT
TEST_PROFILE CPU_PER_SESSION KERNEL DEFAULT
TEST_PROFILE CPU_PER_CALL KERNEL DEFAULT
TEST_PROFILE LOGICAL_READS_PER_SESSION KERNEL DEFAULT
TEST_PROFILE LOGICAL_READS_PER_CALL KERNEL DEFAULT
TEST_PROFILE IDLE_TIME KERNEL 1
TEST_PROFILE CONNECT_TIME KERNEL DEFAULT
TEST_PROFILE PRIVATE_SGA KERNEL DEFAULT
TEST_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT
TEST_PROFILE PASSWORD_LIFE_TIME PASSWORD DEFAULT
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
TEST_PROFILE PASSWORD_REUSE_TIME PASSWORD DEFAULT
TEST_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT
TEST_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
TEST_PROFILE PASSWORD_LOCK_TIME PASSWORD DEFAULT
TEST_PROFILE PASSWORD_GRACE_TIME PASSWORD DEFAULT
已選擇16行。
SQL> show parameter resource
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean FALSE
resource_manager_cpu_allocation integer 4
resource_manager_plan string
SQL> alter system set resource_limit =true; <<<< 對PROFILE中KERNEL型別的專案進行控制需要將該引數設定為TRUE,PASSWORD型別的專案不受此引數限制。
系統已更改。
SQL> create user test111 identified by test111 default tablespace users temporary tablespace temp profile test_profile;
使用者已建立。
SQL> grant connect,resource to test111;
授權成功。
另外視窗開一個會話:
C:\Users\LIUBINGLIN>sqlplus test111/test111@localhost:1521/hello
SQL*Plus: Release 11.2.0.3.0 Production on 星期二 4月 14 08:55:49 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
連線到:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create table test (id number);
create table test (id number)
*
第 1 行出現錯誤:
ORA-02396: 超出最大空閒時間, 請重新連線
空閒一分鐘後再操作就會收到上面的報錯。
但是客戶說以上的方法只是適用於SQLPLUS,對PL/SQL工具無效,下面討論一下為什麼對PL/SQL無效。
使用test111登陸PL/SQL之後檢視資料庫會話資訊:
成功登陸後在資料庫裡面看到建立了兩個session,可以看到session的login時間是11:17:09和11:17:28兩個時間點。由於沒有執行任何SQL,登陸成功後的session狀態是INACTIVE的。
IDLE_TIME設定的為1分鐘,1分鐘後兩個會話的狀態變成了SNIPED,表示會話已經過期。
當在PL/SQL中執行任何SQL語句的時候,PL/SQL沒有報錯,成功執行。
但是從後臺看,登陸時間變成了11:20:47和11:20:51,狀態又變成了INACTIVE。
說明在PL/SQL執行SQL語句的時候自動的重新登陸了。
下面是SQLPLUS的情況:
11:37:26登陸成功後,為SQLPLUS建立了一個SESSION,
1分鐘沒操作後會話變成了SNIPED狀態。
再次到該會話操作時,收到如下報錯:
從上一張圖片可以看出,從後臺看SQLPLUS的SESSION已經被KILL。
由此可以判斷,PROFILE IDLE_TIME對SQLPLUS有效,對PL/SQL無效跟客戶端有很大關係。
通過這個實驗還可以發現一點,會話過期後,會話的狀態會變成SNIPED,該會話不會被立即KILL,直到會話對應的客戶端下次執行SQL時被KILL,說明這段時間會話對應的伺服器程式一直存在,如果這樣的會話很多,且SNIPED存在的狀態持續較長時間,那麼資料庫可能超過PROCESSES初始化引數的限制。
另外這裡解釋一下sqlnet.ora配置檔案中配置SQLNET.EXPIRE_TIME引數的含義:
SQLNET.EXPIRE_TIME=1表示每過1分鐘都向客戶端發出一個測試連線的包,客戶端收到後會給出響應,如果連線正常,這個連線是不會被殺掉的。
這個引數是用於解決客戶端無故關閉,網路出現故障,再指定的時間內殺掉伺服器程式。
Oracle推薦PROFILE和SQLNET.EXPIRE_TIME一起使用,但由於PL/SQL工具本身的特點,它會在SESSION的狀態變成SNIPED(PROFILE IDLE_TIME超時)後,第一次操作的時候自動重新連線,所以這兩種方法都控制不了它。
Oracle提出一種方法,就是在Oracle伺服器端部署定時殺掉SNIPED狀態會話的指令碼。但是為了處理少量的PL/SQL客戶端,未免有點大費周章了。
--end--
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-1622190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Runloop有效利用空閒時間OOP
- Oracle 查詢佔用臨時表空間大的歷史會話和SQLOracle會話SQL
- ?ORACLE會話超時Oracle會話
- 【TUNE_ORACLE】檢視Oracle的壞塊在空閒空間中還是在已用空間中的SQL參考OracleSQL
- 使用Spring Security控制會話Spring會話
- oracle臨時表空間相關Oracle
- oracle11g 查詢臨時表空間的使用率和正在使用臨時表空間的使用者Oracle
- Oracle RMAN備份為什麼會大量使用temp表空間?Oracle
- oracle建立使用者,表空間,臨時表空間,分配許可權步驟詳解Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- Oracle表空間Oracle
- oracle 表空間Oracle
- oracle 建立表空間和使用者Oracle
- Oracle新建使用者、表空間、表Oracle
- Oracle建立表空間和使用者Oracle
- Oracle中新建表空間、使用者Oracle
- oracle表空間使用率查詢Oracle
- 增加oracle表空間Oracle
- oracle temp 表空間Oracle
- oracle 臨時表空間的增刪改查Oracle
- windows計劃任務的“等待空閒時間”已棄用Windows
- 讓 sudo 會話時間隨心所欲會話
- 當使用者無限制使用表空間配額且表空間有足夠空間時出現超出表空間的空間限額
- [轉]如何關閉一個不活動的或者空閒的 SSH 會話會話
- 想利用上班空閒時間學習自動化測試
- oracle新建使用者,表空間,並授權Oracle
- Oracle 19C 建立使用者&表空間Oracle
- Oracle新建表空間、使用者及授權Oracle
- Oracle 建立表空間和使用者指令碼Oracle指令碼
- Oracle 擴充磁碟空間Oracle
- oracle表空間的整理Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- oracle 檢視錶空間Oracle
- Oracle OCP(29):PROFILEOracle
- 臨時表空間和回滾表空間使用率查詢
- 檢視oracle臨時表空間佔用率的檢視Oracle
- [20180302]sql profile能減少分析時間嗎?SQL