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

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



相关文章
|
27天前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
3月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle设置 RMAN 环境:
【7月更文挑战第25天】
57 2
|
3月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle结束 RMAN 会话:
【7月更文挑战第25天】
59 1
|
3月前
|
Oracle 关系型数据库 Unix
关系型数据库Oracle设置环境变量:
【7月更文挑战第22天】
286 4
|
3月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
67 0
|
4月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
167 0
|
5月前
|
SQL Oracle 关系型数据库
Oracle SQL*Plus的SET命令:你的数据库会话“调色板”
【4月更文挑战第19天】Oracle SQL*Plus的SET命令是数据库会话的“调色板”,用于设置输出格式、反馈信息和各种偏好。它能调整PAGESIZE和LINESIZE以优化显示,控制ECHO和FEEDBACK开关以定制反馈,以及统计命令执行时间(TIMING)和调试SQL(VERIFY)。更高级的选项如HEADING和COLSEP可改善输出的可读性。通过灵活运用SET命令,能提升工作效率和体验,是数据库管理员和开发者的必备工具。
|
5月前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
5月前
|
运维 Oracle 安全
Oracle的三重奏:密码文件、警告文件与跟踪文件
【4月更文挑战第19天】Oracle数据库的三大守护者:密码文件保护系统免受未经授权访问,如同宝藏的“密码锁”;警告文件似“哨兵”,记录错误信息,助于及时解决问题;跟踪文件扮演“侦探”角色,详尽记录操作,便于性能优化和故障排查。这三份文件共同确保数据王国的安全与稳定。作为管理员,重视并善用它们是关键。