天天看点

【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程序员面试笔试宝典》,作者:小麦苗