概述
您熟悉 Oracle 数据库 10g 版本中自动化维护任务的概念。这些作业由数据库自动运行以执行维护操作。在 Oracle 数据库 10g 中,您有两个自动维护任务:自动优化器统计信息收集和自动分段顾问程序。在 Oracle 数据库 11g 中,有第三个自动维护任务,名为“自动 SQL 优化顾问”。自动 SQL 优化顾问检查数据库中所有消耗大量资源的 SQL 语句,并提供优化这些语句的建议。如果需要,可以配置数据库,使其自动执行某些类型的建议,如 SQL 配置文件。本文将围绕自动 SQL 优化任务介绍自动维护任务。

自动 SQL 优化顾问每晚在默认系统维护时段内运行,就像其他两个自动维护任务一样。维护时段是 Oracle 计划程序时段,是MAINTENANCE_WINDOW_GROUP的一部分。为维护时段选择较低的系统负载时间间隔时间段。计划程序资源计划指定数据库在窗口期间将如何分配资源。当计划程序窗口打开时,数据库将自动启用与该窗口关联的资源计划。

Predefi ned Maintenance Windows

在 Oracle 数据库 10g 中,您有两个维护时段:weeknight_window和weekend_window。在 Oracle 数据库 11g 中,有七个预定义的日常维护时段,一周中的每一天都有一个。以下是预定义的维护时段及其说明:

 

  • MONDAY_WINDOW周一晚上10点开始,凌晨2点结束。
  • TUESDAY_WINDOW周二晚上10点开始,凌晨2点结束。
  • WEDNESDAY_WINDOW周三晚上10点开始,到凌晨2点结束。
  • THURSDAY_WINDOW周四晚上10点开始,到凌晨2点结束。
  • FRIDAY_WINDOW从星期五晚上10点开始,到凌晨2点结束。
  • SATURDAY_WINDOW 周六早上 6 点开始,凌晨 2 点结束
  • SUNDAY_WINDOW周日早上 6 点开始,凌晨 2 点结束。

请注意,在工作日运行的前五个时段打开 4 小时,两个周末维护时段打开 20 小时。默认情况下,所有七个每日窗口都属于MAINTENANCE_WINDOW_GROUP组。您可以更改每日维护时段的时间和持续时间、创建新的维护时段,或者禁用或删除默认维护时段。

管理自动维护任务

在 Oracle 数据库 10g 中,您必须使用DBMS_SCHEDULER包来启用和禁用自动维护任务。ENABLE 过程允许您启用自动维护作业(如自动收集统计信息作业),而 DISABLE 过程允许您禁用它(如果要手动收集优化程序统计信息)。在 Oracle 数据库 11g 中,使用新的DBMS_AUTO_TASK_ ADMIN 包来管理自动维护任务。您还可以使用企业管理器访问自动维护任务的控件。DBMS_AUTO_TASK_ADMIN包提供了更细粒度的管理功能来控制自动维护任务的操作。

SQL>从dba_autotask_client中选择client_name,
状态,2个属性,window_group,
service_name 3个;
CLIENT_NAME状态属性
-------------------- -------- ------------------------------
自动优化器默认启用开启,易失性,
统计信息收集 安全杀死
自动空间顾问默认启用, 易失性,
安全杀死
SQL 调优顾问启用一次 每个窗口启用一次,默认开启,
易失性, 安全杀死
您可以看到所有三个自动维护任务都已启用。当维护时段打开时,Oracle 计划程序会自动创建自动维护作业并运行它们。如果维护时段很长,Oracle 将每四小时重新启动一次自动优化器统计信息收集和自动分段顾问程序作业。但是,自动 SQL 顾问作业在每个维护时段仅运行一次,该作业的“每个窗口一次”属性就是证明。

SQL>从
dba_autotask_operation中选择client_name,operation_name;
CLIENT_NAME OPERATION_NAME
---------------------- -------------------------
自动优化器 自动优化器统计作业
统计信息集合
自动空间顾问自动空间顾问作业
sql 优化顾问自动 sql 优化任务
启用维护任务

使用DBMS_AUTO_ADMIN。启用以前禁用的客户机、操作、目标类型或单个目标的 ENABLE 过程。在执行此操作之前,必须首先查询DBA_AUTOTASK_CLIENT和“DBA_AUTOTASK_操作”视图,以查找过程的client_name和operation_名称属性的值。

SQL>开始
2 dbms_auto_task_admin.enable
3 (client_name = > “sql 优化顾问”,
4 操作 = > “自动 sql 优化任务”,
5 window_name = > “monday_window”);
6 * 结束;
已成功完成。

禁用维护任务

默认情况下,所有三个维护作业都将在每个维护时段内运行。您可以使用DBMS_AUTO_ADMIN。禁用过程以禁用特定窗口的客户端或操作,如下所示:

SQL>开始
2 dbms_auto_task_admin.禁用(
3 client_name=>“sql调优顾问”,
4个操作=>“自动sql调优任务”,
5 window_name=>“monday_window”);
6结束;
7 /
PL/SQL 过程已成功完成。

维护时段配置

在配置窗口属性之前,您需要通过查询DBA_SCHEDULER_WINDOWS视图来获取当前窗口属性。

SQL> 从DBA_SCHEDULER_WINDOWS 3中选择WINDOW_NAME,持续时间

2,其中WINDOW_NAME=“TUESDAY_WINDOW”;
WINDOW_NAME持续时间
---------------- --------------------
TUESDAY_WINDOW +000 03:00:00

要配置窗口属性,可以使用以下命令:

SQL> 开始
2 DBMS_SCHEDULER.set_attribute(
3 个名称 = > “TUESDAY_WINDOW”,
4 个属性 = > “持续时间”,
5 个值 = > 个数字间隔 (120,'分钟'));
6 结束;
7 /
PL/SQL 过程已成功完成。

SQL> 从DBA_SCHEDULER_WINDOWS 3中选择WINDOW_NAME,持续时间

2,其中WINDOW_NAME=“TUESDAY_WINDOW”;
WINDOW_NAME持续时间
---------------- --------------------
TUESDAY_WINDOW +000 02:00:00

您可以从下图中找到其他窗口属性。

Name

Description

​comments​

An optional comment about the window.

​duration​

The duration of the window.

​end_date​

The date after which the window will no longer open. If this is set, ​​schedule_name​​​ must be ​​NULL​​.

​repeat_interval​

A string using the calendaring syntax. PL/SQL date functions are not allowed. If this is set, ​​schedule_name​​​ must be ​​NULL​​​. See ​​"Calendaring Syntax"​​ for more information.

​resource_plan​

The resource plan to be associated with a window. When the window opens, the system will switch to this resource plan. When the window closes, the original resource plan will be restored. If a resource plan has been made active with the ​​force​​ option, no resource plan switch will occur.

Only one resource plan can be associated with a window. It may be ​​NULL​​​ or the empty string (""). When it is ​​NULL​​, the resource plan that is in effect when the window opens stays in effect for the duration of the window. When it is the empty string, the resource manager is disabled for the duration of the window.

​schedule_name​

The name of a schedule to use with this window. If this is set, ​​start_date​​​, ​​end_date​​​, and ​​repeat_interval​​​ must all be ​​NULL​​.

​start_date​

The next date and time on which this window is scheduled to open. If this is set, ​​schedule_name​​​ must be ​​NULL​​.

​window_priority​

The priority of the window. Must be one of '​​LOW​​​' (default) or '​​HIGH​​'.

 

实现自动维护任务

数据库不会将任何永久性计划程序作业分配给三个自动维护任务。因此,您无法使用通常的DBMS_计划程序包来管理作业。请改用新的DBMS_AUTO_TASK_ADMIN包来管理自动维护任务。新的后台进程自动任务后台进程 (ABP) 实现了自动维护任务。ABP 在存储库中维护所有自动维护任务执行的历史记录,并在 SYSAUX 表空间中维护这些历史记录。另一个后台进程 MMON 生成(通常在维护时段打开时)、监视并重新启动 ABP 进程。ABP 负责将任务转换为计划程序作业。

为自动任务配置资源分配

您可以控制在给定维护时段内分配给维护任务的资源百分比。每个预定义维护时段的默认资源计划是DEFAULT_MAINTENANCE_PLAN。当维护时段打开时,将激活DEFAULT_MAINTENANCE_PLAN以控制各种自动维护任务使用的 CPU 量。三个默认维护任务在 ORA$AUTOTASK_SUB_PLAN 下运行,ORA$AUTOTASK_SUB_PLAN 是DEFAULT_MAINTENANCE_PLAN的子计划,所有三个计划平均共享资源。ORA$AUTOTASK_SUB_PLAN 在优先级 2 中获取 25% 的资源。使用者组SYS_GROUP在DEFAULT_MAINTENANCE_PLAN资源计划中优先,获取DEFAULT_MAINTENANCE_PLAN 1 级资源的 100%。如果要更改特定窗口中自动任务的资源分配,则必须在该窗口的资源计划中将资源分配更改为子计划 ORA$AUTOTASK_SUB_PLAN。

通过在维护时段内运行的各种任务(总共三个任务)的优先级是通过为DEFAULT_ MAINTENANCE_PLAN分配不同的使用者组来确定的。例如,新的自动 SQL 优化任务将分配给 ORA$AUTOTASK_SQL_GROUP 使用者组。优化程序统计信息收集任务是 ORA$AUTOTASK_STATS_GROUP的一部分,段顾问程序任务属于 ORA$AUTOTASK_SPACE_GROUP。

 

参考至:《McGraw.Hill.OCP.Oracle.Database.11g.New.Features.for.Administrators.Exam.Guide.Apr.2008》

http://www.oracle-base.com/articles/11g/awr-baseline-enhancements-11gr1.php

http://www.oracle-base.com/articles/11g/automated-database-maintenance-task-management-11gr1.php

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sched.htm#CIHDAIIH

本文原创,转载请注明出处、作者

如有错误,欢迎指正