【資料庫管理】資料庫自動維護任務介紹

  • 2020 年 3 月 26 日
  • 筆記

概述

本文介紹資料庫自動維護任務(Automated Maintenance Tasks)相關的基礎知識和總體介紹。

Oracle資料庫通過預定義的維護窗口中,定期自動地運行一些維護任務,用於實現如統計資訊收集、SQL調優顧問等工作,以減少DBA的工作量,使資料庫最優。

自動維護任務的演變

Oracle在10g的版本上最初推出自動維護作業,並在11g版本開始改為自動維護任務, 並在以後的版本上不斷功能加強和追加新的功能。 以下是自動維護任務在各個版本中主要變化:

10g

預定義的維護窗口(Maintenance Windows)

在10g版本上,Oracle主要有2個預定義的維護窗口(Maintenance Windows):

WEEKNIGHT_WINDOW : 周一到周五 每天22:00開始 ~ 次日06:00結束。  WEEKEND_WINDOW   :周六和周日的全天

通過這兩個維護窗口, 組成MAINTENANCEWINDOWGROUP 用於管理維護作業(maintenance jobs)。

預定義的自動系統任務(Predefined Automatic System Tasks)

在10g版本上,主要有以下2個自動系統任務在維護窗口(Maintenance Windows)中運行。

自動統計資訊收集作業(Automatic Statistics Collection Job):   收集資料庫中所有無統計資訊或統計資訊過時的對象的統計資訊,以便提高 SQL 執行的性能。自動段指導作業(Automatic Segment Advisor Job)       :   識別是否有可用回收空間的段,並提出如何消除這些段中的碎片的建議。

關於10g的維護作業的其他詳細內容可以參考以下的在線文檔。

Database Administrator's Guide

>23 Managing Automatic System Tasks Using the Maintenance Window

11g

預定義的維護窗口(Maintenance Windows)

在11g版本上,Oracle預定義了9個維護窗口(Maintenance Windows)。

新追加的,每天的維護窗口: (周一到周五 每天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   : 周六和周日的全天

通過這九個維護窗口, 組成MAINTENANCEWINDOWGROUP 用於管理維護任務(maintenance tasks)。

預定義自動維護任務(Automated Maintenance Tasks)

在11g版本上,主要有以下3個自動管理維護任務在每天的維護窗口(Maintenance Windows)中運行。

自動優化器統計資訊收集(Automatic Optimizer Statistics Collection):   收集資料庫中所有無統計資訊或統計資訊過時的對象的統計資訊,以便提高 SQL 執行的性能。自動段指導(Automatic Segment Advisor):   識別是否有可用回收空間的段,並提出如何消除這些段中的碎片的建議。自動 SQL 優化指導(Automatic SQL Tuning Advisor):   檢查高負載 SQL 語句的性能,並提出如何優化這些語句的建議。

關於11g的維護任務的其他詳細內容可以參考以下的在線文檔。

Database Administrator's Guide

>26 Managing Automated Database Maintenance Tasks

12c

預定義的維護窗口(Maintenance Windows)

在12c版本上,和11g一樣,Oracle預定義了9個維護窗口(Maintenance Windows)。

包括,每天的維護窗口: (周一到周五 每天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   : 周六和周日的全天

通過這九個維護窗口, 組成MAINTENANCEWINDOWGROUP 用於管理維護任務(maintenance tasks)。

預定義自動維護任務(Automated Maintenance Tasks)

在12c版本上,新追加了一個SQL計劃管理(SPM)進化指導(SPM Evolve Advisor)任務,用於SQL計劃管理計劃(SPM)的進化;所以,主要有以下4個自動管理維護任務在每天的維護窗口(Maintenance Windows)中運行。

自動優化器統計資訊收集(Automatic Optimizer Statistics Collection):   收集資料庫中所有無統計資訊或統計資訊過時的對象的統計資訊,以便提高 SQL 執行的性能。自動段指導(Automatic Segment Advisor):   識別是否有可用回收空間的段,並提出如何消除這些段中的碎片的建議。自動 SQL 優化指導(Automatic SQL Tuning Advisor):   檢查高負載 SQL 語句的性能,並提出如何優化這些語句的建議。SQL計劃管理(SPM)進化指導(SPM Evolve Advisor):   針對新追加的SQL計劃管理計划進行進化。

關於12c的維護任務的其他詳細內容可以參考以下的在線文檔。

Database Administrator's Guide

>26 Managing Automated Database Maintenance Tasks

各版本的主要變化

自動維護任務各版本的主要變化可以參考下表:

自動維護任務的控制(啟用、禁用、更改)

可以通過如下的方法對自動維護任務進行控制。

10g

1.針對特定維護作業的操作

啟用方法:

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

2.確認各個維護作業的狀態:

select job_name,enabled  from dba_scheduler_jobs  where job_name in ( 'GATHER_STATS_JOB', 'AUTO_SPACE_ADVISOR_JOB');
  1. 維護窗口設定更改:

可以通過DBMSSCHEDULER.SETATTRIBUTE程式包對維護窗口進行如運行時間、頻度等設定的修改。如:

--修改周一到周五的維護窗口(WEEKNIGHT_WINDOW)為每天0點開始。  EXECUTE DBMS_SCHEDULER.SET_ATTRIBUTE(    'WEEKNIGHT_WINDOW',    'repeat_interval',    'freq=daily;byday=MON, TUE, WED, THU, FRI;byhour=0;byminute=0;bysecond=0');

參考: Database PL/SQL Packages and Types Reference >93 DBMS_SCHEDULER

11g& 12c

1.針對特定維護任務的操作

禁用方法:

--禁用sql tuning advisor  BEGIN   dbms_auto_task_admin.disable(     client_name => 'sql tuning advisor',     operation   => NULL,     window_name => NULL);  END;  /

啟用方法:

--啟用sql tuning advisor  BEGIN   dbms_auto_task_admin.enable(     client_name => 'sql tuning advisor',     operation   => NULL,     window_name => NULL);  END;  /

其中,clientname可以為DBAAUTOTASKCLIENT表中的任意一個任務名(clientname):

SQL> select client_name from DBA_AUTOTASK_CLIENT;CLIENT_NAME  ----------------------------------------------------------------  auto optimizer stats collection  auto space advisor  sql tuning advisor

另外,需要注意的是在12c的環境中,CLIENT_NAME:sql tuning advisor同時控制著自動 SQL 優化指導(Automatic SQL Tuning Advisor)和SQL計劃管理(SPM)進化指導(SPM Evolve Advisor)。

2.啟用和禁用所有的維護任務:

--禁用  EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;  --啟用  EXECUTE DBMS_AUTO_TASK_ADMIN.ENABLE;

3.確認各個維護任務的狀態

--例:自動 SQL 優化指導(Automatic SQL Tuning Advisor)  COL CLIENT_NAME FORMAT a20  SELECT CLIENT_NAME, STATUS  FROM   DBA_AUTOTASK_CLIENT  WHERE  CLIENT_NAME = 'sql tuning advisor';

4.維護窗口設定更改:

可以通過DBMSSCHEDULER.SETATTRIBUTE程式包對維護窗口進行如運行時間、頻度等設定的修改。如:

--修改SATURDAY_WINDOW窗口的持續時間  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;  /

監視視圖

對於維護任務(作業)調查,相關的一些監視視圖。

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:資源計劃指令資訊

重建資料庫自動維護任務

在某些情況下,如發現資料庫自動維護任務有問題或者想恢復成默認的設定時,你可以通過以下的方法重建資料庫維護窗口和自動維護任務。

conn /as sysdba-- 這個腳本會刪除維護窗口,但是可能會報一些可以忽略的錯誤。  @?/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