【问题标题】:Oracle: idle_time appears to be ignoredOracle:idle_time 似乎被忽略了
【发布时间】:2012-03-13 15:51:51
【问题描述】:

据我了解,创建一个将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 窗口运行另一个查询,我不会收到要求我重新连接的消息。

【问题讨论】:

    标签: oracle session session-timeout


    【解决方案1】:

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

    ALTER SYSTEM SET resource_limit = TRUE scope = BOTH 
    

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

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2016-09-30
      • 2012-03-11
      • 1970-01-01
      • 2017-12-05
      • 2012-03-08
      • 2015-12-11
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多