Oracle 会话超时设置3:在用户profile文件中设置

简介: Oracle会话超时设置系列的第三篇文章,介绍在用户profile文件中设置会话的超时设置。

      Oracle数据库第三种会话超时管理的办法是在用户的profile文件中设置超时管理,这种方法有一个其它两种办法没有的好处是可以针对每个用户设置单独的超时参数,具有更好的灵活性。

1 用户profile文件

      创建用户时可以为用户指定一个profile文件,在profile文件里可以设置用户的密码策略和资源限制等,其中就包括会话的空闲超时和会话的连接时间限制。通常我们在创建用户时不会指定profile文件,这是用户适用的就是数据库默认的profile文件,名字就叫做DEFAULT。

     profile的资源限制是否生效由一个实例参数决定,这个实例参数的名字是resource_limit,这个参数的默认值如下:

SQL>select NAME,VALUE,DEFAULT_VALUE,ISSYS_MODIFIABLE, DESCRIPTION from v$parameter where name='resource_limit';NAME             VALUE DEFAULT_VALUE  ISSYS_MOD DESCRIPTION
---------------- ----- -------------- --------- ----------------------------------------resource_limit   TRUETRUE           IMMEDIATE master switch for resource limit

      可以看到这个参数的默认值是true,更改后可以立即生效。这个参数的设置对用户的资源限制和会话管理有影响,对用户的密码策略则没有影响,无论这个参数的值是什么,用户的密码策略总是生效的。

      需要考虑的另一点时,在启用用户的profile资源限制时,会对数据库的性能造成轻微的影响,这是因为在每一次连接数据库时,Oracle都要载入profile文件,执行资源策略。

2 在profile文件中执行会话空闲和连接时间限制

      在用户的profile文件中,可以设置会话的空闲超时时间。如果会话跳用之间的空闲时间超过设置时间,会话当前的事务会被回滚,会话被终结,会话占用的资源也会被释放。会话的下一个调用会收到指示它不再连接到实例的错误。这里面要注意的是,在会话空闲超时之后,Oracle的pmon后台进程会执行会话清除工作,在pmon进程完成会话清除之前,进程任然会被显示为活跃进程,并且仍然被计算到会话和用户资源限制之内。

      在用户的profile文件中,也可以设置会话的连接时间限制,如果会话的连接时间超过了限制时间,会话的当前事务被回滚,会话被丢弃,资源占用资源被释放。

      上面的这两个参数的单位都是分钟,有一点需要注意的是,这两个时间都不是精确的,Oracle不会持续监测会话的空闲时间或者是连接时间,不这么做的原因是为了节省资源,以免对性能造成过大的影响。Oracle的做法是每个几分钟进行检查,因此,会话可能会稍微超过一点设置的时间才会被判为超时,这个超过的时间有可能是几分钟。看一下数据库中这两个参数的默认设置:

SQL>select PROFILE,RESOURCE_NAME,LIMITfrom dba_profiles where PROFILE='DEFAULT'and RESOURCE_NAME in('IDLE_TIME','CONNECT_TIME')PROFILE                          RESOURCE_NAME                    LIMIT-------------------------------- -------------------------------- --------------------------------DEFAULT                          IDLE_TIME                        UNLIMITED
DEFAULT                          CONNECT_TIME                     UNLIMITED

     在数据库默认的DEFAULT profile文件中,这两个参数的默认值都是unlimited,即没有限制。

3 实验验证

     先验证一下空闲超时设置,直接更改DEFAULT profile文件中的这个参数值,在profile文件里更改的值只对更改之后的新建的会话有效,对已经登录的会话是无效的。

   

SQL>alter profile DEFAULT limit IDLE_TIME 3;Profile altered.

     更改之后新建一个会话,不执行任何操作,大约3分钟后会话,会话被终结,数据库告警日志里出现了下面的信息。

2023-02-17T15:00:12.939943+08:00KILL SESSION for sid=(110,33842):  Reason = profile limit idle_time
  Mode = KILL SOFT -/-/NO_REPLAY
  Requestor = PMON (orapid =2, ospid =1672, inst =1)  Owner = Process: USER (orapid =47, ospid =3895)  Result = ORA-0

     告警日志里显示被终结会话的sid和serial#,会话被kill的原因,请求kill这个会话的进程是pmon。

     验证完之后恢复DEFAULT profile 中这个文件的默认设置

alter profile DEFAULT limit IDLE_TIME unlimited;

     验证连接超时设置使用单独的profile,为用户创建一个单独的profile,设置会话连接超时时间,先创建一个profile文件

SQL>create profile test_connect limit CONNECT_TIME 3;   Profile created.

    创建用户profile时至少要指定一个参数,其它的参数会采用默认值,如下面看到的

SQL>select PROFILE,RESOURCE_NAME,LIMITfrom dba_profiles where PROFILE='TEST_CONNECT';PROFILE              RESOURCE_NAME                    LIMIT-------------------- -------------------------------- --------------------TEST_CONNECT         COMPOSITE_LIMIT                  DEFAULT
TEST_CONNECT         SESSIONS_PER_USER                DEFAULT
TEST_CONNECT         CPU_PER_SESSION                  DEFAULT
TEST_CONNECT         CPU_PER_CALL                     DEFAULT
TEST_CONNECT         LOGICAL_READS_PER_SESSION        DEFAULT
TEST_CONNECT         LOGICAL_READS_PER_CALL           DEFAULT
TEST_CONNECT         IDLE_TIME                        DEFAULT
TEST_CONNECT         CONNECT_TIME                     3TEST_CONNECT         PRIVATE_SGA                      DEFAULT
TEST_CONNECT         FAILED_LOGIN_ATTEMPTS            DEFAULT
TEST_CONNECT         PASSWORD_LIFE_TIME               DEFAULT
TEST_CONNECT         PASSWORD_REUSE_TIME              DEFAULT
TEST_CONNECT         PASSWORD_REUSE_MAX               DEFAULT
TEST_CONNECT         PASSWORD_VERIFY_FUNCTION         DEFAULT
TEST_CONNECT         PASSWORD_LOCK_TIME               DEFAULT
TEST_CONNECT         PASSWORD_GRACE_TIME              DEFAULT
TEST_CONNECT         INACTIVE_ACCOUNT_TIME            DEFAULT

设置测试用户的profile为这个文件

SQL>alter user test profile test_connect;User altered.

     开启一个会话

SQL>/SYSDATE
-------------------2023-02-1715:13:02SQL>/SYSDATE
-------------------2023-02-1715:13:04SQL>/select sysdate from dual
*ERROR at line 1:ORA-02399: exceeded maximum connect time, you are being logged off

 会话超时后,显示的是超过最大连接时间,会话被注销。



相关文章
|
3月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
42 2
|
2月前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
12 0
|
5月前
|
Oracle 关系型数据库 Linux
Oracle设置监听之Navicat的锅
Oracle设置监听之Navicat的锅
38 0
|
7月前
|
Oracle 关系型数据库 数据库
9-4 Oracle管理表空间和数据文件
9-4 Oracle管理表空间和数据文件
|
18天前
|
运维 Oracle 安全
Oracle的三重奏:密码文件、警告文件与跟踪文件
【4月更文挑战第19天】Oracle数据库的三大守护者:密码文件保护系统免受未经授权访问,如同宝藏的“密码锁”;警告文件似“哨兵”,记录错误信息,助于及时解决问题;跟踪文件扮演“侦探”角色,详尽记录操作,便于性能优化和故障排查。这三份文件共同确保数据王国的安全与稳定。作为管理员,重视并善用它们是关键。
|
18天前
|
运维 Oracle 关系型数据库
Oracle服务器参数文件:数据王国的“调控大师”
【4月更文挑战第19天】Oracle服务器参数文件,数据库的“调控大师”,掌控着内存管理、进程调度等关键设置。通过参数调整如SGA_MAX_SIZE和PROCESSES,实现性能优化和故障防控。虽然挑战重重,但成功的性能调优带来无尽成就感。它在备份恢复中也扮演重要角色,保障数据一致性与可用性。成为真正的“调控大师”,为数据王国效力!
|
18天前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
18天前
|
存储 Oracle 安全
Oracle控制文件:数据王国的导航仪
【4月更文挑战第19天】Oracle控制文件是数据库的关键组件,存储结构信息和元数据,用于数据库启动、恢复。它指引数据库找到所需文件,保证数据完整性。控制文件的多重备份和定期更新确保其安全可靠。作为数据库导航仪,它对管理员理解和维护数据库至关重要,为数据存储和恢复提供关键支持。
|
18天前
|
存储 监控 Oracle
Oracle数据文件:数据王国的秘密藏宝图
【4月更文挑战第19天】Oracle数据文件是数据库物理存储的核心,存储实际数据,犹如数据王国的宝藏。它们对数据库性能至关重要,影响数据分布和访问效率。有效管理数据文件涉及合理规划大小、数量,监控使用情况,利用自动扩展功能,并能实现跨磁盘存储和高可靠性。理解数据文件原理有助于优化数据库性能和资源利用,发掘更多数据潜力。
|
4月前
|
SQL 存储 Oracle
oracle如何定期备份数据库sql文件
【1月更文挑战第7天】oracle如何定期备份数据库sql文件
58 8

推荐镜像

更多