← Redo & Archive Logs
Oracle · Redo & Archive Logs

How to check log switches per hour for the last 7 days in Oracle

Pivot Oracle log switches by hour across every day for the last 7 days, per RAC instance, from GV$LOG_HISTORY.

Tested on11g12c18c19c21c23ai26ai

Count log switches per hour per RAC instance for the last 7 days. Each row is date + instance; columns h0..h23 show the switch count for each hour, plus a total and 24-hour average. Great for redo sizing on a RAC.

SET PAGES 999 LINES 400
COL h0  FORMAT 999
COL h1  FORMAT 999
COL h2  FORMAT 999
COL h3  FORMAT 999
COL h4  FORMAT 999
COL h5  FORMAT 999
COL h6  FORMAT 999
COL h7  FORMAT 999
COL h8  FORMAT 999
COL h9  FORMAT 999
COL h10 FORMAT 999
COL h11 FORMAT 999
COL h12 FORMAT 999
COL h13 FORMAT 999
COL h14 FORMAT 999
COL h15 FORMAT 999
COL h16 FORMAT 999
COL h17 FORMAT 999
COL h18 FORMAT 999
COL h19 FORMAT 999
COL h20 FORMAT 999
COL h21 FORMAT 999
COL h22 FORMAT 999
COL h23 FORMAT 999

SELECT TRUNC(first_time) AS "Date",
       inst_id,
       TO_CHAR(first_time, 'Dy') AS "Day",
       COUNT(1) AS "Total",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '00', 1, 0)) AS "h0",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '01', 1, 0)) AS "h1",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '02', 1, 0)) AS "h2",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '03', 1, 0)) AS "h3",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '04', 1, 0)) AS "h4",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '05', 1, 0)) AS "h5",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '06', 1, 0)) AS "h6",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '07', 1, 0)) AS "h7",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '08', 1, 0)) AS "h8",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '09', 1, 0)) AS "h9",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '10', 1, 0)) AS "h10",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '11', 1, 0)) AS "h11",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '12', 1, 0)) AS "h12",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '13', 1, 0)) AS "h13",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '14', 1, 0)) AS "h14",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '15', 1, 0)) AS "h15",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '16', 1, 0)) AS "h16",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '17', 1, 0)) AS "h17",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '18', 1, 0)) AS "h18",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '19', 1, 0)) AS "h19",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '20', 1, 0)) AS "h20",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '21', 1, 0)) AS "h21",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '22', 1, 0)) AS "h22",
       SUM(DECODE(TO_CHAR(first_time, 'hh24'), '23', 1, 0)) AS "h23",
       ROUND(COUNT(1) / 24, 2) AS "Avg"
FROM   gv$log_history
WHERE  thread#    = inst_id
AND    first_time > SYSDATE - 7
GROUP BY TRUNC(first_time), inst_id, TO_CHAR(first_time, 'Dy')
ORDER BY 1, 2;
redolog switchgv$log_historyrac