Home >Database >Mysql Tutorial >使用Oracle PROFILE控制会话空闲时间

使用Oracle PROFILE控制会话空闲时间

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 16:00:131417browse

Oracle推荐PROFILE和SQLNET.EXPIRE_TIME一起使用,但由于PL/SQL工具本身的特点,它会在SESSION的状态变成SNIPED(PROFILE IDLE_TI

客户想实现对会话空闲时间的控制,下面是做的一个例子。
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分钟。
 
配置文件已创建
 
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之后查看数据库会话信息:

使用Oracle PROFILE控制会话空闲时间

成功登陆后在数据库里面看到创建了两个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的情况:

使用Oracle PROFILE控制会话空闲时间

11:37:26登陆成功后,为SQLPLUS创建了一个SESSION,

1分钟没操作后会话变成了SNIPED状态。

再次到该会话操作时,收到如下报错:

使用Oracle PROFILE控制会话空闲时间

从上一张图片可以看出,从后台看SQLPLUS的SESSION已经被KILL。

由此可以判断,PROFILE IDLE_TIME对SQLPLUS有效,对PL/SQL无效跟客户端有很大关系。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn