ORACLE 11G 維護視窗和自動維護任務

咕嚕咕嚕先生發表於2018-06-12

 

維護視窗是一個連續的時間間隔,用於管理自動維護任務,所謂自動維護視窗是按照預定義一個時間段,比如晚上22:10~04:00就可以稱為一個視窗。自動維護任務是一種按規則自動啟動的資料庫維護操作任務。自動維護任務在維護視窗開啟時自動執行。(就例如鬧鐘響了,該起床了,時間到了,任務自動執行,)

在Oracle Database 11g中,自動維護任務功能依賴於在維護視窗期間啟用的資源管理器。因此,視窗開啟時,會自動啟用與視窗關聯的資源計劃,其目標是防止維護工作消耗過多的系統資源。每個維護視窗都與一個資源計劃關聯;該計劃指定了視窗持續期間的資源分配方式。

 

oracle11g資料庫有三種預定義的自動維護任務:

■ Automatic Optimizer Statistics Collection:

■ Automatic Segment Advisor     

■ Automatic SQL Tuning Advisor(這個是oracle 11g新新增的自動維護任務)


預設情況下,這三個任務配置為在所有維護視窗執行。

維護視窗:維護視窗是oracle 排程視窗,屬於視窗組MAINTENANCE_WINDOW_GROUP。

 控制自動維護任務

“自動維護任務”功能可以確定任務的執行時間和順序。DBA 可以控制以下專案:

? 在維護視窗最終不足以承受維護工作量時,調整維護視窗的持續時間和開始時間。

? 控制在每個視窗期間將資源分配給自動維護任務的資源計劃。

? 啟用或禁用部分或全部維護視窗中的單個任務。

? 在RAC 環境中,透過將維護工作對映到某項服務,將維護工作轉移至一個或多個例項。對例項子集啟用服務會將維護工作轉移至這些例項。

一:配置自動維護任務:

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,     

    window_name => NULL);

END;

這裡client_name引數可以透過資料字典檢視DBA_AUTOTASK_CLIENT來查詢。

sys@ ORA> 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:為某一個維護視窗啟用或禁用維護視窗

預設情況下,所有維護任務在所有預定義的維護視窗都執行。可以對某一個維護視窗啟用或禁用自動化任務。

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'));

--啟用維護視窗     

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   12-JUN-18 12.00.02.039000 PM +08:50

auto space advisor   ORA$AT_SA_SPC_SY_2   12-JUN -18 12.00.02.050000 PM +08:50

sql tuning advisor   ORA$AT_SQ_SQL_SW_3   12-JUN -18 12.00.02.015000 PM +08:50

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

相關文章