2012-03-13 199 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当它醒来每隔几分钟会议。