v$diag_alert_ext 뷰 동작 관련

안녕하세요 surmin입니다.
오늘은 v$diag_alert_ext 관련 내용을 공유드립니다. 이 내용이 참고하시는데 도움이 되셨으면 좋겠습니다 🙂

info

  • v$diag_alert_ext 뷰는 메모리 기반이 아닌 디스크 기반으로 동작합니다. Oracle 공식 문서에서 명시하기를 “V$DIAG_ALERT_EXT를 쿼리할 때, Oracle은 log.xml 파일을 읽고 데이터를 파싱하여 행으로 반환

Test

HRDEV:/oracle/diag/rdbms/hrdev/HRDEV/alert @HRDEV] vi log.xml
HRDEV:/oracle/diag/rdbms/hrdev/HRDEV/alert @HRDEV] mv log.xml /tmp/log.xml

#mv 후 조회안됨 확인
SELECT
  df.tablespace_name,
  df.file_name,
  COUNT(*) AS resize_count,
  ROUND(SUM(
    TO_NUMBER(REGEXP_SUBSTR(v.message_text, 'new size ([0-9]+)', 1, 1, NULL, 1)) -
    TO_NUMBER(REGEXP_SUBSTR(v.message_text, 'old size ([0-9]+)', 1, 1, NULL, 1))
  ) / 1024, 2) AS increase_mb
FROM v$diag_alert_ext v
JOIN (
    SELECT file_id, file_name, tablespace_name FROM dba_data_files
    UNION ALL
    SELECT file_id, file_name, tablespace_name FROM dba_temp_files
) df
  ON REGEXP_SUBSTR(v.message_text, 'file# ([0-9]+)', 1, 1, NULL, 1) = TO_CHAR(df.file_id)
WHERE v.message_text LIKE '%Resize operation completed%'
GROUP BY df.tablespace_name, df.file_name
ORDER BY df.file_name;
  • 원복 후 확인
HRDEV:/oracle/diag/rdbms/hrdev/HRDEV/alert @HRDEV] ls
log.xml

SQL> /

TABLESPACE_NAME      FILE_NAME                                          RESIZE_COUNT INCREASE_MB
-------------------- -------------------------------------------------- ------------ -----------
SYSAUX               /oracle/oradata/HRDEV/sysaux01.dbf                            4          60
UNDOTBS1             /oracle/oradata/HRDEV/undotbs01.dbf                           8          40
USERS                /oracle/oradata/HRDEV/users01.dbf                             1         995

정리

v$diag_alert_ext와 물리적 alert log 파일의 관계

Oracle은 alert log의 두 가지 버전을 동시에 유지합니다:

  1. XML 포맷 버전: <ADR_HOME>/alert/log.xml (v$diag_alert_ext 뷰용)
  2. 텍스트 포맷 버전: <ADR_HOME>/trace/alert_<SID>.log

감사합니다.

위로 스크롤