天天看点

数据库自动维护任务的管理

数据库自动维护任务的管理(managing automated database maintenance tasks)

以下记录如何用pl/sql包来管理oracle的自动维护任务。

一、自动维护任务

自动维护任务是以一定的时间间隔周期性地对数据库进行维护操作的一个自动任务。

为查询优化器自动收集统计信息就是一个典型的自动维护任务。

自动维护任务是在维护窗口(maintenance windows)运行的,维护窗口需要提前设定,应该设置在一个系统的低负载时段。

你可以根据系统实际情况设置维护窗口,或者关闭特定的默认窗口。还可以创建自己的维护窗口。

oracle有三种预定义的自动维护任务:

1)自动优化信息收集

为数据库中哪些没有统计信息或统计信息过旧的模式对象收集统计信息。

统计信息被查询优化器用于改善sql的执行性能。

2)自动段建议器(automatic segment advisor)

定位到可用空间需要改造(reclamation,可翻译为开垦)的段,并建议取出这些段的碎片。

3)自动sql调优建议器

检查高负载的sql语句的性能,给出如何调整这些语句的建议。

可以将该建议设置为自动在sql profile中执行

(You can configure this advisor to automatically implement SQL profile recommendations.)

默认情况下这些自动维护任务在所有的维护窗口中都会运行

二、维护窗口

维护窗口就是自动维护任务运行的时间段。在oracle日程窗口中属于“MAINTENANCE_WINDOW_GROUP”组。

维护窗口既可以是简单的时间段,也可以是复杂的时间设置。

当维护窗口开启时,oracle为此窗口中的每个维护任务创建一个日程任务。每个任务的任务名在运行时声称。

所有自动维护作业的任务都是以ORA$AT开头的。比如自动段建议器的某个任务可能叫做ORA$AT_SA_SPC_SY_26。

自动维护任务完成后,会从oracle日程任务中删除,但仍可以在任务历史信息中看到。

在维护窗口设置相对比较长的情况下,除自动sql调优建议器外,其他所有自动维护任务都是每小时自动重启的。

该特性确保了维护任务的有规律运行,而不管维护窗口多大。

三、自动维护任务的设置

使用dbms_auto_task_admin包可以启用或禁用维护窗口中的一些子任务。

1.为所有的维护窗口启用和禁用维护任务

BEGIN

dbms_auto_task_admin.disable(

client_name => 'sql tuning advisor',

operation => NULL,

window_name => NULL);

END;

/

2.为特定的维护窗口启用和禁用维护任务

默认情况下所有维护窗口执行所有的维护任务。

你可以在某个特定窗口禁用一个维护任务。如:

BEGIN

dbms_auto_task_admin.disable(

client_name => 'sql tuning advisor',

operation => NULL,

window_name => 'MONDAY_WINDOW');

END;

/

四、维护窗口的设置

1.修改维护窗口

可以使用dbms_scheduler包调整预定义的维护窗口时间。

需要先用dbms_scheduler.disable过程禁用窗口,然后执行以下命令进行修改:

BEGIN

dbms_scheduler.disable(

name => 'SATURDAY_WINDOW');

dbms_scheduler.set_attribute(

name => 'SATURDAY_WINDOW',

attribute => 'DURATION',

value => numtodsinterval(4, 'hour'));

dbms_scheduler.enable(

name => 'SATURDAY_WINDOW');

END;

/

修改完成后再用dbms_scheduler.enable启用窗口。

否则的话,若修改的窗口正在运行,就只能在下次运行时才生效了。

2.创建新的维护窗口

需要先创建日程窗口对象,并将其加入到MAINTANEANCE_WINDOW_GROUP组中。

使用dbms_scheduler.create_wiindow包创建窗口,add_group_member增加新的窗口到窗口组中。

如:

BEGIN

dbms_scheduler.create_window(

window_name => 'EARLY_MORNING_WINDOW',

duration => numtodsinterval(1, 'hour'),

resource_plan => 'DEFAULT_MAINTENANCE_PLAN',

repeat_interval => 'FREQ=DAILY;BYHOUR=5;BYMINUTE=0;BYSECOND=0');

dbms_scheduler.add_group_member(

group_name => 'MAINTENANCE_WINDOW_GROUP',

member => 'EARLY_MORNING_WINDOW');

END;

/

3.删除一个维护窗口

BEGIN

DBMS_SCHEDULER.REMOVE_GROUP_MEMBER(

group_name => 'MAINTENANCE_WINDOW_GROUP',

member => 'EARLY_MORNING_WINDOW');

END;

/

五、为自动维护任务分配资源

1.概述

默认情况下所有预定义的维护窗口使用default_maintenance_plan的资源计划。

自动资源计划在ora$autotask_sub_plan计划下运行。

default_maintenance_plan定义了以下的资源分配计划:

Consumer Group/subplan  Level 1  Level 2  Maximum Utilization Limit

ORA$AUTOTASK_SUB_PLAN   -     25%    90

ORA$DIAGNOSTICS      -     5%    90

OTHER_GROUPS        -     70%

SYS_GROUP         75%    -                           

也就是说,sys_group组的优先级最高(该组中的会话都是sys或system账号创建的会话)。

sys_group不用的资源分配给其他的组和子计划。

在这些剩余资源中,25%用于自动维护任务,5%用于后台进程的诊断选项,70%用于用户的会话。

ORA$AUTOTASK_SUB_PLAN和ORA$DIAGNOSTICS的最大使用限制为90。

这样,即使cpu是空闲的,该组或计划也不能分配90%以上的cpu资源。

可以通过调整default_maintenance_plan来改变自动维护任务的资源分配。

对于资源计划而言,为某个消耗组或者子计划分配的份额若没有使用,就可以被其他的消耗组或子计划使用。

数据库的资源管理器不会根据资源计划来限制资源分配,除非cpu使用率达到了100%。

2.为自动维护任务修改资源分配

通过修改ora$autotask_sub_plan子计划占用的资源,就可以修改自动维护任务的资源分配。

六、自动维护任务参考信息

1.预定义的维护窗口

SQL> select WINDOW_NAME from DBA_AUTOTASK_WINDOW_CLIENTS;

WINDOW_NAME

------------------------------

MONDAY_WINDOW

TUESDAY_WINDOW

WEDNESDAY_WINDOW

THURSDAY_WINDOW

FRIDAY_WINDOW

SATURDAY_WINDOW

SUNDAY_WINDOW

7 rows selected

各个窗口的默认时间:

周一到周五分别是当日的22点到次日2点

周六、周日为6点至20点

==============================================================

[[email protected] ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jun 5 06:34:34 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn /as sysdba

Connected.

--查看哪些表存储自动任务相关信息:

SQL> select tname from tab where tname like 'DBA_AUTOTASK%';

TNAME

------------------------------

DBA_AUTOTASK_WINDOW_HISTORY

DBA_AUTOTASK_WINDOW_CLIENTS

DBA_AUTOTASK_TASK

DBA_AUTOTASK_SCHEDULE         --存储了系统中有自动运行任务的运行历史信息

DBA_AUTOTASK_OPERATION

DBA_AUTOTASK_JOB_HISTORY

DBA_AUTOTASK_CLIENT_JOB       --当前运行的有自动维护任务创建的任务

DBA_AUTOTASK_CLIENT_HISTORY

DBA_AUTOTASK_CLIENT           --存储了系统中有哪些自动运行的任务

9 rows selected.

--查看自动运行的任务:

SQL> select a.client_name,a.consumer_group,a.client_tag,

  2  a.priority_override,a.attributes,a.window_group from dba_autotask_client a;

CLIENT_NAME                     CONSUMER_GROUP           CLIENT_TAG PRIORITY_OVERRIDE ATTRIBUTES                                             WINDOW_GROUP

------------------------------- ------------------------ ---------- ----------------- ------------------------------------------------------ --------------

auto optimizer stats collection ORA$AUTOTASK_STATS_GROUP OS         INVALID           ON BY DEFAULT, VOLATILE, SAFE TO KILL                  ORA$AT_WGRP_OS

auto space advisor              ORA$AUTOTASK_SPACE_GROUP SA         INVALID           ON BY DEFAULT, VOLATILE, SAFE TO KILL                  ORA$AT_WGRP_SA

sql tuning advisor              ORA$AUTOTASK_SQL_GROUP   SQ         INVALID           ONCE PER WINDOW, ON BY DEFAULT, VOLATILE, SAFE TO KILL ORA$AT_WGRP_SQ

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451536/viewspace-766212/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26451536/viewspace-766212/