2012-03-13 200 views
1

根據我的理解,創建一個配置文件,其中idle_time設置爲某個值(以分鐘爲單位)並創建一個擁有此配置文件的用戶應該強制該用戶會話的狀態爲SNIPED,以防他閒置長於idle_time。當用戶嘗試執行查詢後,他會收到一條消息,表明他必須再次連接。Oracle:idle_time似乎被忽略

第一個問題:對嗎?如果是這樣,請繼續閱讀:

我運行一個測試腳本在sqlplus(顯然沒有佔位符)如下:

connect system/<password>@<tns> 
CREATE PROFILE test_profile LIMIT idle_time 1; 
CREATE USER test_user PROFILE test_profile IDENTIFIED BY test_user; 
GRANT CREATE SESSION TO test_user; 
GRANT ALTER SESSION TO test_user; 
GRANT SELECT ON <schema>.<table> TO test_user; 
disconnect; 
connect test_user/[email protected]<tns> 
SELECT * FROM <schema>.<table>; 

一切正常了這一點; sqlplus窗口仍然打開。現在我打開其他sqplus窗口,並使用系統帳戶,做其他的東西了一段時間後,運行下面的查詢連接:

SELECT username, status, seconds_in_wait FROM v$session WHERE username = 'test_user'; 

我得到的是這樣的:

USERNAME STATUS SECONDS_IN_WAIT 
--------- -------- --------------- 
TEST_USER INACTIVE   1166 

爲什麼有狀態未被設置爲SNIPED

顯然,如果我從test_user的sqlplus窗口運行另一個查詢,我不會收到一條消息,要求我重新連接。

回答

4

您需要將數據庫的RESOURCE_LIMIT參數設置爲TRUE,以使配置文件中的資源限制生效。假設你使用的spfile(否則省略scope = BOTH部分)

ALTER SYSTEM SET resource_limit = TRUE scope = BOTH 

一旦你這樣做,PMON應該開始狙擊已超過您IDLE_TIME當它醒來每隔幾分鐘會議。