自动维护任务,执行了多长时间,真的是20h?

10g 11g 12c 的自动维护任务的总结

10g

在10g版本上,主要有2个预定义的维护窗口
weeknight_window : 周一到周五,每天22:00开始,次日06:00结束
weekend_windows : 周六和周日的全天 

预定义的自动系统任务
自动统计信息收集作业: Automatic statistics collection job
自动段指导作业 :automatic segment advisor job 

文档:
Database Administrator's Guide
23 Managing Automatic System Tasks Using the Maintenance Window

11g 
在11g中,预定义了9个维护窗口
周一到周五 每天22:00 ~ 次日02:00;周六和周日 06:00 ~ 次日02:00
MONDAY_WINDOW           : 周一 22:00 ~ 周二 02:00
TUESDAY_WINDOW          : 周二 22:00 ~ 周三 02:00
WEDNESDAY_WINDOW        : 周三 22:00 ~ 周四 02:00
THURSDAY_WINDOW         : 周四 22:00 ~ 周五 02:00
FRIDAY_WINDOW           : 周五 22:00 ~ 周六 02:00
SATURDAY_WINDOW         : 周六 06:00 ~ 周日 02:00
SUNDAY_WINDOW           : 周日 06:00 ~ 周一02:00

为了兼容以前的版本而留下的维护窗口:(默认不使用)
WEEKNIGHT_WINDOW : 周一到周五 每天22:00开始 ~ 次日06:00结束。
WEEKEND_WINDOW   : 周六和周日的全天

预定义的自动维护任务
自动优化器统计信息收集:Automatic Optimizer Statistics Collection
自动段指导:Automatic Segment Advisor
自动 SQL 优化指导:Automatic SQL Tuning Advisor

文档:
Database Administrator’s Guide
26 Managing Automated Database Maintenance Tasks

12c
和11g一样,预定义了9个维护窗口
每天的维护窗口
周一到周五 每天22:00 ~ 次日02:00;周六和周日 06:00 ~ 次日02:00
MONDAY_WINDOW           : 周一 22:00 ~ 周二 02:00
TUESDAY_WINDOW          : 周二 22:00 ~ 周三 02:00
WEDNESDAY_WINDOW        : 周三 22:00 ~ 周四 02:00
THURSDAY_WINDOW         : 周四 22:00 ~ 周五 02:00
FRIDAY_WINDOW           : 周五 22:00 ~ 周六 02:00
SATURDAY_WINDOW         : 周六 06:00 ~ 周日 02:00
SUNDAY_WINDOW           : 周日 06:00 ~ 周一02:00

预定义的自动维护任务
12c增加了SQL计划管理(SPM)进化指导(SPM evolve advisor)
自动优化器统计信息收集:Automatic Optimizer Statistics Collection  
自动段指导:Automatic Segment Advisor 
自动 SQL 优化指导:Automatic SQL Tuning Advisor 
SQL计划管理(SPM)进化指导:SPM Evolve Advisor
 
文档:
Database Administrator’s Guide
26 Managing Automated Database Maintenance Tasks

以下是一些查询,启用及禁用方法

10g
启用方法

EXECUTE DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');
EXECUTE DBMS_SCHEDULER.ENABLE('AUTO_SPACE_ADVISOR_JOB');
禁用方法:
EXECUTE DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
EXECUTE DBMS_SCHEDULER.DISABLE('AUTO_SPACE_ADVISOR_JOB');
确认作业状态
select job_name,enabled 
from dba_scheduler_jobs 
where job_name in ('GATHER_STATS_JOB','AUTO_SPACE_ADVISOR_JOB');

11g&12c
禁用方法:
-- 比如,禁用sql tuning advisor 
BEGIN
  dbms_auto_task_admin.disable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;

启用方法:
BEGIN
  dbms_auto_task_admin.enable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;

其中,client_name为dba_autotask_client表中的任务名
SQL> select client_name from DBA_AUTOTASK_CLIENT;
 
CLIENT_NAME

auto optimizer stats collection
auto space advisor
sql tuning advisor

-- 注意,在12c中,查询client_name的结果和11g是一样的。
只是CLIENT_NAME:sql tuning advisor同时控制着自动 SQL 优化指导(Automatic SQL Tuning Advisor)和SQL计划管理(SPM)进化指导(SPM Evolve Advisor)。

启用和禁用所有的维护任务
--禁用
EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;
--启用
EXECUTE DBMS_AUTO_TASK_ADMIN.ENABLE;

一些视图:
10g
DBA_SCHEDULER_JOBS:数据库内所有作业的相关详细内容
DBA_SCHEDULER_JOB_LOG:作业的执行日志
DBA_SCHEDULER_JOB_RUN_DETAILS:作业的执行详细 
DBA_SCHEDULER_WINGROUP_MEMBERS:维护窗口的详细
DBA_SCHEDULER_WINDOWS:数据库内所有窗口的相关内容 
DBA_SCHEDULER_JOB_CLASSES:Resource Plan相关信息

11g&12c
DBA_AUTOTASK_CLIENT:查看各个维护任务客户端的相关内容
DBA_AUTOTASK_TASK:查看各个维护任务的相关内容 
DBA_AUTOTASK_JOB_HISTORY:维护任务作业的执行历史
DBA_AUTOTASK_SCHEDULE:今后32天内的各个Client的执行计划
DBA_AUTOTASK_OPERATION:各个Client的执行操作
DBA_AUTOTASK_WINDOW_HISTORY:各个维护窗口的执行历史 
DBA_AUTOTASK_WINDOW_CLIENTS:属于各个维护窗口客户端的维护任务的状态
DBA_SCHEDULER_WINDOWS:数据库内所有窗口的相关内容
DBA_SCHEDULER_WINDOW_GROUPS:数据库内所有窗口组的相关内容 
DBA_RSRC_PLANS:数据库中所有的资源计划(Resource Plan)信息
DBA_RSRC_PLAN_DIRECTIVES:资源计划指令信息

-- 重建数据库自动维护任务

-- 重建维护窗口 ,可能会报一些可以忽略的错误 br/>@?/rdbms/admin/catnomwn.sql 
 
-- 也可以通过手动删除维护窗口代替catnomwn.sql。
execute dbms_scheduler.drop_window('MONDAY_WINDOW');
execute dbms_scheduler.drop_window('TUESDAY_WINDOW');
execute dbms_scheduler.drop_window('WEDNESDAY_WINDOW');
execute dbms_scheduler.drop_window('THURSDAY_WINDOW');
execute dbms_scheduler.drop_window('FRIDAY_WINDOW');
execute dbms_scheduler.drop_window('SATURDAY_WINDOW');
execute dbms_scheduler.drop_window('SUNDAY_WINDOW');
 
-- 重建维护窗口和维护作业(任务)
@?/rdbms/admin/catmwin.sql

1)查看自动维护任务窗口信息,即定义从几点开始,执行多长时间:
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
ENABLED VARCHAR2(5) Indicates whether the window is enabled (TRUE) or disabled (FALSE)
ACTIVE VARCHAR2(5) Indicates whether the window is open (TRUE) or not (FALSE)
enable字段说明了默认剩余两个窗口不启用。即为了兼容以前的版本而留下的维护窗口:(默认不使用)
active字段说明现在是否正在运行这个窗口。

自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
现在是disable,可以配置
自动维护任务,执行了多长时间,真的是20h?
从上图可以看出,控制某个自动维护任务的开关有3个,控制实现的粒度不同。
有全局配置开启,还有单个开启。
“全局状态”开关允许你为所有自动任务开启或禁用维护窗口。
DBMS_AUTO_TASK_ADMIN包的ENABLE和DISABLE存储过程能够实现同样的效果(不要任何参数)
SQL> exec dbms_auto_task_admin.disable;

PL/SQL procedure successfully completed.

SQL> exec dbms_auto_task_admin.enable;

PL/SQL procedure successfully completed.

“任务设置”部分允许你单独将某个维护任务窗口开启或禁用。
同样,这也可以使用DBMS_AUTO_TASK_ADMIN包中的ENABLE和DISABLE存储过程实现,在CLIENT_NAME参数中指定相应的任务名:

BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => 'auto space advisor',
operation => NULL,
window_name => NULL);
END;
/
BEGIN
DBMS_AUTO_TASK_ADMIN.enable(
client_name => 'auto space advisor',
operation => NULL,
window_name => NULL);
END;
/
BEGIN
dbms_auto_task_admin.enable(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
END;

“维护窗口组分配”部分提供了细粒度的控制,允许在单个维护窗口上移除或添加任务。
同样,这也可以使用DBMS_AUTO_TASK_ADMIN包中的ENABLE和DISABLE存储过程实现,只需要为CLIENT_NAME和WINDOW_NAME参数指定相应的值即可:

BEGIN
dbms_auto_task_admin.disable(client_name => 'auto optimizer stats collection', operation => NULL, window_name => 'TUESDAY_WINDOW');
dbms_auto_task_admin.disable(client_name => 'auto optimizer stats collection', operation => NULL, window_name => 'WEDNESDAY_WINDOW');
END;
BEGIN
dbms_auto_task_admin.enable(client_name => 'auto optimizer stats collection', operation => NULL, window_name => 'TUESDAY_WINDOW');
dbms_auto_task_admin.enable(client_name => 'auto optimizer stats collection', operation => NULL, window_name => 'WEDNESDAY_WINDOW');
END;
上面如果要开启,把disable换成enable即可。
测试下:
上面的都是disable,我们可以enable
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
下面我们验证下这3个粒度控制开关地方的优先级:
自动维护任务,执行了多长时间,真的是20h?
3个地方都打开
自动维护任务,执行了多长时间,真的是20h?
任务是开启的。

任务设置的disable掉:
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
虽然全局开关是enable,但是任务设置为disable,总的任务是disable。所以task的优先级高于global。
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
虽然全局开关是disable,但是sql tune的任务设置时enable,总的任务时enable的。
对应的视图:
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
DBA_AUTOTASK_TASK
STATUS VARCHAR2(8) Status of the task:
DISABLED
DEFERRED
ENABLED
DBA_AUTOTASK_CLIENT
STATUS VARCHAR2(8) Job status:
ENABLED
DISABLED

DBA_AUTOTASK_OPERATION
STATUS VARCHAR2(8) Job status:
ENABLED
DISABLED
一般,查询DBA_AUTOTASK_CLIENT.status 就可以查询出,上面em里面任务设置的开关状态。
全局的开关状态,命令行还没找出来怎么查询。
自动维护任务,执行了多长时间,真的是20h?
全局是disable的时候,不管是任务设置,还是维护窗口组分配,按钮都是灰色的,设置不了。
sqlplus可以试下。
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
可以设置成功。所以em不能设置的,sqlplus可以设置

自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
虽然全局开关和任务设置都为enable,但是维护窗口组分配,都为false,任务整体状态为关闭。所以维护窗口组分配的优先级大于上述两个。
自动维护任务,执行了多长时间,真的是20h?
DBA_AUTOTASK_WINDOW_CLIENTS
OPTIMIZER_STATS VARCHAR2(8) Status of optimizer statistics gathering:
ENABLED
DISABLED
SEGMENT_ADVISOR VARCHAR2(8) Status of Segment Advisor:
ENABLED
DISABLED
SQL_TUNE_ADVISOR VARCHAR2(8) Status of SQL Tuning Advisor:
ENABLED
DISABLED
查看维护窗口组分配状态,就看上面三个字段。
任务参数配置
“自动维护任务配置”下的“任务配置”部分包括两个“配置”按钮。
点击“优化器统计收集”后的“配置”按钮,显示“全局统计收集选项”屏幕。
这些设置都可以使用DBMS_STATS包中的SET_GLOBAL_PREFS存储过程进行修改,参考
EXEC DBMS_STATS.alter_stats_history_retention(90);
EXEC DBMS_STATS.set_global_prefs('estimate_percent', '5');
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
BEGIN
dbms_stats.set_global_prefs('estimate_percent', 'DBMS_STATS.AUTO_SAMPLE_SIZE');
dbms_stats.set_global_prefs('granularity', 'AUTO');
dbms_stats.set_global_prefs('no_invalidate', 'DBMS_STATS.AUTO_INVALIDATE');
END;

再看几个视图
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
自动维护任务,执行了多长时间,真的是20h?
注意区分window_duration和job_duration,要结合JOBS_CREATED,JOBS_STARTED,JOBS_COMPLETED去看,DBA_AUTOTASK_CLIENT_HISTORY视图里面是总的合并后的结果,总时长。DBA_AUTOTASK_JOB_HISTORY是每个job的耗时,有可能一次任务会执行好几次。

猜你喜欢

转载自blog.51cto.com/zhuozhuo/2487739