编辑:添加了Resource Manager,它可以施加更精确的限制,只关注那些阻止其他人的会话......
通过资源管理器:
资源管理器允许定义比配置文件可用的更复杂的策略,并且在您的情况下比后者更合适。
您必须定义计划和与计划关联的用户组,必须指定与计划/组关联的策略,最后必须将用户附加到组。要了解如何执行此操作,您可以重用此示例 @support.oracle.com(此处发布似乎有点太长),但将 替换MAX_IDLE_TIME
为MAX_IDLE_BLOCKER_TIME
.
核心线将是
dbms_resource_manager.create_plan_directive(
plan => 'TEST_PLAN',
group_or_subplan => 'my_limited_throttled_group',
comment => 'Limit blocking idle time to 300 seconds',
MAX_IDLE_BLOCKER_TIME => 300)
;
通过配置文件:
您可以限制那些指定IDLE_TIME
.
创建个人资料:
如果用户超过CONNECT_TIME
或IDLE_TIME
会话资源限制,则数据库回滚当前事务并结束会话。当用户进程下一次发出调用时,数据库返回错误
为此,请指定具有最大空闲时间的配置文件,并将其仅应用于相关用户(这样您就不会影响所有用户或应用程序)
CREATE PROFILE o_record_consumer
LIMIT IDLE_TIME 2; --2 minutes timeout
alter user the_record_consumer profile o_record_consumer;
缺点是此设置是会话范围的,因此如果同一会话应该能够在其他操作过程中保持空闲,则无论如何都会强制执行此策略。
出于兴趣...
也许您已经知道其他会话可能会以多种方式协调他们对同一记录的访问:
最后,您可能正在尝试实现自制的队列基础结构。在这种情况下,请记住,Oracle 已经拥有自己的称为高级队列的队列机制,您只需使用它们就可以事半功倍;请参阅ORACLE-BASE - Oracle 高级队列。