Oracle自動維護任務

bfc99發表於2014-10-22

以下轉自:http://www.linuxidc.com/Linux/2013-03/81678.htm 作者:linux

最近看到alter日誌裡面有VKRM的報錯資訊,所以查詢學習了下。
 
From Oracle 11g, each day has its own windows and each of it has been specified default resource plan.This is something new for me too.So, i think that would be reason for seeing VKRM process in the alert log.
 
 
 
SQL> select WINDOW_NAME,RESOURCE_PLAN from DBA_SCHEDULER_WINDOWS;
 
 
 
WINDOW_NAME                    RESOURCE_PLAN
 
------------------------------ ------------------------------
 
MONDAY_WINDOW                  DEFAULT_MAINTENANCE_PLAN
 
TUESDAY_WINDOW                DEFAULT_MAINTENANCE_PLAN
 
WEDNESDAY_WINDOW              DEFAULT_MAINTENANCE_PLAN
 
THURSDAY_WINDOW                DEFAULT_MAINTENANCE_PLAN
 
FRIDAY_WINDOW                  DEFAULT_MAINTENANCE_PLAN
 
SATURDAY_WINDOW                DEFAULT_MAINTENANCE_PLAN
 
SUNDAY_WINDOW                  DEFAULT_MAINTENANCE_PLAN
 
WEEKNIGHT_WINDOW
 
WEEKEND_WINDOW
 
 
 
SYS@>AppD> SELECT WINDOW_GROUP_NAME,ENABLED,NEXT_START_DATE,COMMENTS FROM DBA_SCHEDULER_WINDOW_GROUPS
 
 
 
WINDOW_GROUP_NAME              ENABL NEXT_START_DATE                          COMMENTS
 
-------------------------- ----------------------------------------  --------------------------------------
 
MAINTENANCE_WINDOW_GROUP      TRUE  14-MAR-11 10.00.00.000000 PM  Window group for Automated Maintenance
 
ORA$AT_WGRP_OS                TRUE  14-MAR-11 10.00.00.000000 PM  auto optimizer stats collection
 
ORA$AT_WGRP_SA                TRUE  14-MAR-11 10.00.00.000000 PM  auto space advisor
 
ORA$AT_WGRP_SQ                TRUE  14-MAR-11 10.00.00.000000 PM  sql tuning advisor
 
 
 
SQL> select client_name ,status from DBA_AUTOTASK_CLIENT;
 
 
 
CLIENT_NAME                                                      STATUS
 
---------------------------------------------------------------- --------
 
auto optimizer stats collection                                  ENABLED
 
auto space advisor                                              ENABLED
 
sql tuning advisor                                              ENABLED
 
 
 
自動維護任務是一種按規則自動啟動的資料庫維護操作任務。比如自動收集為查詢優化器使用的統計資訊。自動維護任務按維護視窗自動執行。所謂自動維護視窗是按照預定義的間隔時間視窗。

Oracle11g資料庫有三種預定義的自動維護任務:
 
1 自動優化器統計收集:為所有方案物件收集陳舊的或缺少的統計資料,所收集的統計資訊將被用來提高sql的執行的效能,任務名是“auto optimizer stats collection”
 
2 自動分段顧問:標識資料庫中的段是否有可以回收的空間,並以此資訊統計為基礎做出怎樣整理段的碎片以節約空間。你也可以手動的執行此job來獲取最新的建議資訊,或者獲取自動段advisor 不檢測的但又可以回收的段的資訊,任務名是“auto space advisor”
 
3 自動SQL調整顧問:自動標識並嘗試調整高負載的SQL,任務名是“sql tuning advisor”
 
 
 
預設情況下,這三個任務配置為在所有維護視窗執行。
 
維護視窗:維護視窗是一個連續的時間間隔,用於管理自動維護任務所用。維護視窗是oracle 排程視窗,屬於視窗組MAINTENANCE_WINDOW_GROUP。
 
 
 
一:配置自動維護任務:
 
1:啟用和禁止維護任務:
 
使用DBMS_AUTO_ADMIN pl/sql包來啟用或禁用任務:
 
禁用任務:
 
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,  www.linuxidc.com 
    window_name => NULL);
 
END;
 
這裡client_name引數可以通過資料字典檢視DBA_AUTOTASK_CLIENT來查詢。
 
 
 
sys@ORCL11> select client_name from dba_autotask_client;
 
CLIENT_NAME
 
------------------------------------------------------------
 
auto optimizer stats collection
 
auto space advisor
 
sql tuning advisor
 
 
 
如果想啟用或禁用所有視窗自動維護任務,呼叫ENABLE或DISABLE過程:
 
EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;
 
 
 
2:為某一個維護視窗啟用或禁用維護視窗www.linuxidc.com
 
預設情況下,所有維護任務在所有預定義的維護視窗都執行。可以對某一個維護視窗啟用或禁用自動化任務。
 
BEGIN
 
dbms_auto_task_admin.disable(
 
client_name => 'sql tuning advisor', 
 
operation  => NULL, 
 
window_name => 'MONDAY_WINDOW');
 
END;
 
上面的例子是對維護視窗monday_window進行禁用sql tuning advisor。

二:配置維護視窗:
 
 可是使用DBMS_SCHEDULER 包來修改視窗屬性。
 
 
 
1:修改維護視窗
 
--先禁用維護視窗
 
BEGIN
 
dbms_scheduler.disable(
 
    name  => 'SATURDAY_WINDOW');
 
--修改維護視窗屬性:
 
dbms_scheduler.set_attribute(
 
    name      => 'SATURDAY_WINDOW',
 
    attribute => 'DURATION',
 
    value    => numtodsinterval(4, 'hour'));
 
--啟用維護視窗  www.linuxidc.com
 
dbms_scheduler.enable(
 
    name => 'SATURDAY_WINDOW');
 
END;
 
/
 
對於當前開啟的視窗,你需要首先禁用,然後修改再啟用,配置立即生效,如果你不通過這三個過程來修改屬性,屬性是不會生效的,直到下一次視窗開啟。
 
 
 
2:建立新視窗:
 
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_window_group_member(
 
    group_name  => 'MAINTENANCE_WINDOW_GROUP',
 
    window_list => 'EARLY_MORNING_WINDOW');
 
END;
 
/
 
 
 
3:刪除視窗:
 
BEGIN
 
DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER(
 
    group_name  => 'MAINTENANCE_WINDOW_GROUP',
 
    window_list => 'EARLY_MORNING_WINDOW');
 
END;   
/
 
 
 
三:跟蹤job執行情況:
 
 
 
可以通過查詢檢視DBA_AUTOTASK_HISTORY追蹤job執行情況:
 
SQL> select client_name,job_name,job_start_time from dba_autotask_job_history;
 
CLIENT_NAME          JOB_NAME            JOB_START_TIME
 
-------------------- -------------------- ------------------------------------
 
auto optimizer stats ORA$AT_OS_OPT_SY_1  09-APR-12 10.00.02.039000 PM +08:00
 
auto space advisor  ORA$AT_SA_SPC_SY_2  09-APR-12 10.00.02.050000 PM +08:00
 
sql tuning advisor  ORA$AT_SQ_SQL_SW_3  09-APR-12 10.00.02.015000 PM +08:00

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22207394/viewspace-1307239/,如需轉載,請註明出處,否則將追究法律責任。

相關文章