הרצת לולאה של דוחות 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!