天天看點

【DB筆試面試825】在Oracle中,如何擷取ADDM報告?

題目部分

【DB筆試面試825】在Oracle中,如何擷取ADDM報告?

答案部分

有兩種辦法可以擷取ADDM報告:

(1) 采用addmrpt.sql腳本。運作腳本:@?/rdbms/admin/addmrpt.sql

(2) 采用DBMS_ADVISOR包:

DECLARE
  TASK_NAME VARCHAR2(50) := 'HEALTH_CHECK_BY_LHR';
  TASK_DESC VARCHAR2(50) := 'HEALTH_CHECK_BY_LHR';
  TASK_ID   NUMBER;
BEGIN
  DBMS_ADVISOR.CREATE_TASK('ADDM', TASK_ID, TASK_NAME, TASK_DESC, NULL);
  DBMS_ADVISOR.SET_TASK_PARAMETER(TASK_NAME, 'START_SNAPSHOT', &_SNAP_ID);
  DBMS_ADVISOR.SET_TASK_PARAMETER(TASK_NAME, 'END_SNAPSHOT', &_SNAP_ID1);
  DBMS_ADVISOR.SET_TASK_PARAMETER(TASK_NAME, 'INSTANCE', &_INSTANCE_NUMBER);
  DBMS_ADVISOR.SET_TASK_PARAMETER(TASK_NAME, 'DB_ID', &_DBID);
  DBMS_ADVISOR.EXECUTE_TASK(TASK_NAME);
END;
/
SELECT DBMS_ADVISOR.GET_TASK_REPORT('HEALTH_CHECK_BY_LHR', 'TEXT', 'ALL') ADDM_RESULTS FROM DUAL;

SELECT * FROM DBA_ADDM_TASKS T ORDER BY T.TASK_ID;
SELECT * FROM DBA_ADVISOR_TASKS T ORDER BY T.TASK_ID;
SELECT DBMS_ADVISOR.GET_TASK_REPORT('HEALTH_CHECK_BY_LHR', 'TEXT', 'ALL') ADDM_RESULTS FROM DUAL;
           

複制

其中,存儲過程SET_TASK_PARAMETER是用來設定任務參數的。START_SNAPSHOT是起始快照ID,END_SNAPSHOT是結束快照ID,INSTANCE是執行個體号,對于單執行個體,一般是1,在RAC環境下,可以通過查詢視圖GVINSTANCE得到,DB_ID是資料庫的唯一識别号,可以通過查詢VDATABASE查到。

若普通使用者使用DBMS_ADVISOR包擷取ADDM報告,則必須使用SYS給這個普通使用者賦予如下權限:

GRANT EXECUTE ON DBMS_ADVISOR TO USER_LHR;
GRANT ADVISOR TO USER_LHR;
           

複制

& 說明:

有關ADDM的更多内容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2140642/

本文選自《Oracle程式員面試筆試寶典》,作者:小麥苗