如何在调用DBMS_AUTO_TASK_ADMIN.ENABLE()时指定IMMEDIATE选项?
如何在调用
DBMS_AUTO_TASK_ADMIN.ENABLE()子程序时指定IMMEDIATE选项? 根据Oracle 19c PL/SQL包与类型参考文档的说明:
指定
DEFERRED选项会将调用效果推迟到下一个维护窗口开始时生效。如果指定IMMEDIATE选项,只要当前有打开的维护窗口,调用效果会立即生效。
但查看DBMS_AUTO_TASK_ADMIN.ENABLE()的官方子程序规范,参数列表里并没有显式定义IMMEDIATE或DEFERRED参数:
-- 重新启用客户端 -- 可选:重新启用某个操作 -- 可选:在特定维护窗口中重新启用客户端 -- -- 只能指定特定操作或维护窗口名称二者之一,不能同时指定。 -- PROCEDURE ENABLE ( CLIENT_NAME IN VARCHAR2, -- 客户端名称,可从DBA_AUTOTASK_CLIENT视图查询 OPERATION IN VARCHAR2, -- 操作名称,可从DBA_AUTOTASK_OPERATION视图查询 WINDOW_NAME IN VARCHAR2 -- 可选参数:启用客户端的目标维护窗口名称 );
实际上,IMMEDIATE是一个隐含的命名参数,Oracle允许通过命名参数的方式传递它来控制生效时机,即使它没有出现在显式的子程序规范中。你可以这样调用以指定IMMEDIATE选项:
BEGIN DBMS_AUTO_TASK_ADMIN.ENABLE( CLIENT_NAME => 'auto optimizer stats collection', -- 替换为你的目标客户端名称 IMMEDIATE => TRUE ); END; /
如果需要同时指定操作或维护窗口(注意操作和窗口不能同时指定),可以这样写:
-- 指定操作并启用IMMEDIATE BEGIN DBMS_AUTO_TASK_ADMIN.ENABLE( CLIENT_NAME => 'auto optimizer stats collection', OPERATION => 'auto optimizer stats job', IMMEDIATE => TRUE ); END; /
注意事项
IMMEDIATE选项仅在当前有正在运行的维护窗口时才会立即生效;如果没有打开的维护窗口,即使指定该选项,效果仍会推迟到下一个维护窗口启动时。- 如果不指定
IMMEDIATE或DEFERRED,默认行为为DEFERRED,即生效时间推迟到下一个维护窗口。
内容的提问来源于stack exchange,提问作者Alex Bartsmon
相关产品推荐
相关产品推荐

