הרצת לולאה של דוחות AWR (שימוש בסקריפט המקורי, לא ידנית)
בעבר כבר כתבתי על איך להוציא דוחות של AWR בלולאה באמצעות שימוש בפרוצדורה של awr_workload_repository. הפעם נתקוף את העניין מכיוון אחר.
מצורף סקריפט שימושי שמקבל נקודת התחלה, נקודת סיום (שניהם בפורמט של תאריך) ומייצר שני סקריפטים:
- הראשון הוא gen_awr_reports.sql המייצר קבצי awr (פורמט HTML למרות שאפשר לשנות את זה גם לפורמט טקסט) בפרקי זמן של שעה כל פעם, מה שמקל מאוד על הניתוח של הדוחות.
- השני הוא gen_awr_extract.sql המייצר גיבוי של פרק הזמן המדובר לתוך קובץ dump כדי שנוכל לטעון אותו מחדש לבסיס הנתונים למקרה שנרצה לנתח את התקופה הזו מאוחר יותר.
את הסקריפט יש להריץ מתחנה עם Oracle Home של Admin (כלומר, שיש שם ספריית rdbms/admin) או מהשרת.
הסקריפט תומך ב-RAC ומריץ דוח על כל אחד מה-Node-ים באופן אוטומטי. הסקריפט נבדק בסביבת Linux אבל אין סיבה שהוא לא יעבוד גם בסביבות אחרות.
הסקריפט, לשימושכם:
set serveroutput on size unl
set ver off feed off
accept bsnap date for 'mm/dd/yyyy hh24:mi' prompt 'Enter begin time (mm/dd/yyyy hh24:mi): '
accept esnap date for 'mm/dd/yyyy hh24:mi' prompt 'Enter end time (mm/dd/yyyy hh24:mi): '
spool gen_awr_reports.sql
BEGIN
FOR c IN (SELECT DISTINCT d.dbid dbid,
d.name db_name,
i.instance_number inst_num,
i.instance_name inst_name
FROM gv$database d, gv$instance i
ORDER BY 1, 2) LOOP
dbms_output.put_line('-- -- --');
FOR s IN (SELECT perv_snap_id, snap_id
FROM (SELECT TO_CHAR(s.startup_time, 'dd Mon "at" HH24:mi:ss') instart_fmt,
di.instance_name inst_name,
di.db_name db_name,
s.end_interval_time,
lag(s.snap_id) over(order by snap_id) perv_snap_id,
s.snap_id snap_id,
TO_CHAR(s.end_interval_time,
'dd Mon YYYY HH24:mi') snapdat,
s.snap_level lvl
FROM dba_hist_snapshot s,
dba_hist_database_instance di
WHERE s.dbid = c.dbid
AND di.dbid = c.dbid
AND s.instance_number = c.inst_num
AND di.instance_number = c.inst_num
AND di.dbid = s.dbid
AND di.instance_number = s.instance_number
AND di.startup_time = s.startup_time
ORDER BY db_name, instance_name, snap_id) s
WHERE s.end_interval_time >
to_date('&bsnap', 'mm/dd/yyyy hh24:mi')
AND s.end_interval_time <=
to_date('&esnap', 'mm/dd/yyyy hh24:mi') + 1 / 24) LOOP
dbms_output.put_line('define report_type=''html''');
dbms_output.put_line('define num_days = 0');
dbms_output.put_line('define dbid=' || c.dbid);
dbms_output.put_line('define inst_num=' || c.inst_num);
dbms_output.put_line('define begin_snap=' || s.perv_snap_id);
dbms_output.put_line('define end_snap=' || s.snap_id);
dbms_output.put_line('define report_name=awrrpt_' || c.inst_num || '_' ||
s.perv_snap_id || '_' || s.snap_id || '.html');
dbms_output.put_line('@?/rdbms/admin/awrrpti.sql');
END LOOP;
dbms_output.put_line(NULL);
END LOOP;
END;
/
spool off
spool gen_awr_extract.sql
BEGIN
FOR c IN (SELECT DISTINCT d.dbid dbid,
d.name db_name,
i.instance_number inst_num,
i.instance_name inst_name
FROM v$database d, v$instance i
ORDER BY 1, 2) LOOP
dbms_output.put_line('-- -- --');
FOR s IN (SELECT min(perv_snap_id) perv_snap_id, max(snap_id) snap_id
FROM (SELECT TO_CHAR(s.startup_time, 'dd Mon "at" HH24:mi:ss') instart_fmt,
di.instance_name inst_name,
di.db_name db_name,
s.end_interval_time,
lag(s.snap_id) over(order by snap_id) perv_snap_id,
s.snap_id snap_id,
TO_CHAR(s.end_interval_time,
'dd Mon YYYY HH24:mi') snapdat,
s.snap_level lvl
FROM dba_hist_snapshot s,
dba_hist_database_instance di
WHERE s.dbid = c.dbid
AND di.dbid = c.dbid
AND s.instance_number = c.inst_num
AND di.instance_number = c.inst_num
AND di.dbid = s.dbid
AND di.instance_number = s.instance_number
AND di.startup_time = s.startup_time
ORDER BY db_name, instance_name, snap_id) s
WHERE s.end_interval_time >
to_date('&bsnap', 'mm/dd/yyyy hh24:mi')
AND s.end_interval_time <=
to_date('&esnap', 'mm/dd/yyyy hh24:mi') + 1 / 24) LOOP
dbms_output.put_line('define num_days = 0');
dbms_output.put_line('define dbid=' || c.dbid);
dbms_output.put_line('define begin_snap=' || s.perv_snap_id);
dbms_output.put_line('define end_snap=' || s.snap_id);
dbms_output.put_line('@?/rdbms/admin/awrextr.sql');
END LOOP;
dbms_output.put_line(NULL);
END LOOP;
END;
/
spool off
prompt run @gen_awr_reports.sql to generate reports to current directory
prompt run @gen_awr_extract.sql to generate awr extract of snaps

השאירו תגובה
Want to join the discussion?Feel free to contribute!