Oracle:idle_time似乎被忽略了

时间:2012-03-13 15:51:51

标签: oracle session session-timeout

根据我的理解,创建将idle_time设置为特定值(以分钟为单位)并使用此配置文件创建用户的配置文件应该强制该用户会话的SNIPED状态,以防他是闲置时间超过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/test_user@<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窗口运行另一个查询,我没有收到要求我重新连接的消息。

1 个答案:

答案 0 :(得分:4)

您需要将数据库的RESOURCE_LIMIT参数设置为TRUE,以使配置文件中的资源限制生效。假设你使用spfile(否则省略scope = BOTH部分)

ALTER SYSTEM SET resource_limit = TRUE scope = BOTH 

一旦你这样做,PMON应该开始狙击每隔几分钟醒来时超过IDLE_TIME的会话。