איך להריץ דוח AWR כשאין גישה למערכת ההפעלה בשרת
לאחרונה התבקשתי מאחד הלקוחות ליצור ולבדוק כמה דוחות AWR בסביבה שלו. הלקוח הסכים לתת לי גישה ממכונה שהיה בה Client של אורקל אבל לא גישה לשרת עצמו. על פניו זו נשמעת כמו משימה מורכבת אבל בפועל זו משימה פשוטה במיוחד ומיד נראה איך מבצעים אותה.
באופן מעניין, את הסקריפט awrrpt.sql שמייצר דוח AWR ושבדרך כלל מריצים אותו מהשרת ניתן להריץ מכל מקום ולכן אם יש לנו גישה לסקריפט הזה (בגרסה הנכונה) אז אין בכלל בעיה להריץ אותו גם מהתחנה שלנו. כדאי לשים לב שהסקריפט הזה מורכב מהערמה של סקריפטים אחרים ולכן לא מספיק להעתיק רק את awrrpt.sql לתחנה שלנו.
אם מסתכלים קצת לתוך הסקריפטים האלה, ניתן לראות שמה שקורה זה שבסך הכול מופעלות פרוצדורות מתוך package בתוך בסיס הנתונים (dbms_workload_repository). כלומר, אם אין לנו את הסקריפט (כמו שקרה לי אצל הלקוח) ניתן להשתמש באופן ידני בפרוצדורות שבתוך dbms_workload_repository כדי להציג את הדוח למסך או כדי לשמור אותו כקובץ.
באופן מעשי ניתן להשתמש באחת משתי הפרוצדורות – AWR_REPORT_HTML המייצר את הדוח בפורמט HTML או AWR_REPORT_TEXT המייצר את הדוח בפורמט טקסטואלי. הפרוצדורות מקבלות את הפרמטרים הבאים:
FUNCTION AWR_REPORT_HTML RETURNS AWRRPT_HTML_TYPE_TABLE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- L_DBID NUMBER IN L_INST_NUM NUMBER IN L_BID NUMBER IN L_EID NUMBER IN L_OPTIONS NUMBER IN DEFAULT FUNCTION AWR_REPORT_TEXT RETURNS AWRRPT_TEXT_TYPE_TABLE Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- L_DBID NUMBER IN L_INST_NUM NUMBER IN L_BID NUMBER IN L_EID NUMBER IN L_OPTIONS NUMBER IN DEFAULT
כדי לקבל את הפרמטרים שנעביר לפרוצדורת ניתן להשתמש בשליפה הפשוטה הבאה:
SELECT DBID, instance_number, snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot where begin_interval_time > sysdate - 1 ORDER BY snap_id
השליפה הזו תיתן לנו את כל ה-snap_id-ים מהיום האחרון.
בכדי להציג את דוח ה-AWR בצורה "נקייה" ככל האפשר, נפעיל מספר אפשרויות ב-SQLPlus שיבטלו הצגה של כותרות ותוצאות ביניים ונריץ את הפרוצדורה המבוקשת.
להצגה של html:
Set heading off Set trimspool off Set linesize 1500 Set termout on Set feedback off Spool awr_from_console.htm select output from table(dbms_workload_repository.awr_report_html(&dbid, &inst_num, &bid, &eid)); spool off;
להצגה של text:
Set heading off Set trimspool off Set linesize 80 Set feedback off Set termout on Spool awr_from_console.txt select output from table(dbms_workload_repository.awr_report_text(&dbid, &inst_num, &bid, &eid)); spool off;
והתוצאה:
SQL> Set heading off SQL> Set trimspool off SQL> Set linesize 80 SQL> Set termout on SQL> SQL> Spool awr_from_console.txt SQL> select output from table(dbms_workload_repository.awr_report_text(&dbid, &inst_num, &bid, &eid)); Enter value for dbid: 2492639615 Enter value for inst_num: 1 Enter value for bid: 953 Enter value for eid: 954 old 1: select output from table(dbms_workload_repository.awr_report_text(&dbid, &inst_num, &bid, &eid)) new 1: select output from table(dbms_workload_repository.awr_report_text(2492639615, 1, 953, 954)) WORKLOAD REPOSITORY report for DB Name DB Id Instance Inst Num Startup Time Release RAC ------------ ----------- ------------ -------- --------------- ----------- --- GHTEST 2492639615 ghtest 1 15-Aug-11 09:18 11.2.0.1.0 NO […awr report…] SQL> spool off
תודה על הפוסט
בעיה נוספת שפעם נתקלתי בה – איך ליצור מספר דוחות AWR ברצף, לא דרך ה-GUI.
גם כאן משתמשים בפרוצדורות שהזכרת לעיל.
הסברתי את הדרך כאן:
http://www.dbsnaps.com/oracle/automatic-awr-reports/
תודה! עזר לי מאוד.