미스터 역마살
ORACLE AWR 리포트 출력 방법 본문
Oracle DB의 상태의 진단할 때 많이 사용하는 정보가 AWR Report 입니다.
(AWR : Automatic Workload Repository)
원래 AWR 레포트를 사용하는 것 자체가 EM의 진단팩(Diagnostic Pack)을 사용하는 것이므로, EM 라이센스가 필요하다고 합니다. 하지만, ㅎㅎ 대부분 그냥 막 씁니다.
AWR 레포트 뽑는 방법은 매우 간단합니다.
진짜 어려운건 그 레포트를 보고 뭐가 문제인지 찾아내는 것이 어렵죠.
AWR 리포트를 출력하는 방법은 2가지가 있습니다.
1. SQL PLUS 명령어로 단계별로 진행하기
2. 쿼리를 SQL PLUS에서 실행시켜서 한번에 진행하기
전 이 두가지 방법중 1번을 주로 많이 사용하는데 일단은 2가지다 알려드릴게요.
1. SQL PLUS 명령어로 단계별로 진행하기
$ORACLE_HOME/rdbms/admin 디렉토리에 가보면, 아래와 같이 awr 로 시작하는 2개의 파일이 있습니다.
둘다 같은 놈인데, 뒤에 i 가 붙은 awrrpti.sql 은 RAC 에서 다른 노드(DB서버)의 레포트도 출력할 수 있는 점이 다릅니다.
awrrpt.sql 을 실행하면, 그냥 현재 로컬 DB 에서 awr report 를 출력하고,
awrrpti.sql 을 실행하면, 하는 방식은 awrrpt.sql 과 똑같은데, DB노드 선택하는 부분이 추가로 있습니다.
아래는 awrrpt.sql 실행하는 방법입니다.
AWR Report 를 출력할 디렉토리로 이동합니다.
현재 디렉토리에 AWR Report 파일을 만들기 때문에 $ORACLE_HOME/rdbms/admin 폴더에서 실행하면 거기에 파일이 만들어집니다. 거기는 오라클 파일님들이 거하시는 성스러운 곳이니 다른 장소에 만드는게 좋겠죠?
다른 TEMP 폴더 같은 곳으로 이동해서 sys 계정으로 sqlplus 접속합니다.
AWR Report 를 출력하기 위해서는 sys 나 system 계정 접속이 필요합니다.
@?/rdbms/admin/awrrpt.sql 와 같이 실행시켜 줍니다.
@는 run(실행) 의 의미입니다.
? (물음표)는 Oracle Home 디렉토리를 가리킵니다.
실행하면 현재 DB정보가 간단하게 나오고, report_type 을 물어봅니다.
html 과 text 가 있는데, text 는 보면 눈아프니까 다들 html 로 선택해서 PC로 옮겨서 브라우저로 보는 것이 일반적입니다.
num_days 값을 입력합니다. 표시할 스냅샷 일자를 말합니다.
기본으로 8일 입니다만, 수정할 수 있습니다.
8일치만 보관되어 있다해도 더 큰 값을 넣는다고 에러 안납니다.
있으면 나오고, 없으면 있는것만 나옵니다. 저는 30일 입력...
그러면, AWR 레포트 출력가능한 스냅샷 일자들이 쭈~욱 표시됩니다.
여기서 레포트를 출력할 시작일자(begin_snap)와 종료일자(end_snap)의 스냅샷 번호를 입력해줍니다.
저는 2019.07.22일 09:00 ~ 18:00 까지로 선택했습니다. 289~298
마지막으로 레포트 이름을 지정합니다.
특별히 입력해주지 않으면, 디폴트 이름 (awrrpt_1_289_298.html) 으로 파일이 만들어집니다.
저는 "TESTDB_awrpt_20190723.html" 이라고 이름을 주었습니다.
엔터를 치면 html 텍스트가 화면에 쭈~욱 출력되는데, 무시합니다.
같은 내용이 현재디렉토리에 파일로 만들어집니다.
sqlplus 를 종료하고 나오면, 현재 디렉토리에 만들어진 html 파일을 확인할 수 있습니다.
이 파일을 내 PC로 ftp 등으로 옮긴후, 브라우저에서 열어주면 아래와 같은 AWR Report 를 확인할 수 있습니다.
2. 쿼리를 SQL PLUS에서 실행시켜서 한번에 진행하기
/*
** 아래 SQL의 수행결과를 SQL Plus에 붙여넣을 것.
*/
WITH WTH_HIST_SNAPSHOT
AS (
SELECT B.DBID
, A.STRT_SNAP_ID
, A.END_SNAP_ID
FROM (
SELECT /*+ NO_MERGE */
MIN(SNAP_ID) AS STRT_SNAP_ID
, MAX(SNAP_ID) AS END_SNAP_ID
FROM DBA_HIST_SNAPSHOT
WHERE INSTANCE_NUMBER = 1
AND BEGIN_INTERVAL_TIME >= TRUNC( TO_DATE(:tr_dt) + 0 ) + 7/24
AND END_INTERVAL_TIME <= TRUNC( TO_DATE(:tr_dt) + 1 ) + 9/24
) A
, V$DATABASE B
)
SELECT 'spool C:\Temp\awr_' || :tr_dt || '_inst' || B.INST_ID || '.txt' || CHR(10) || CHR(10) ||
'set heading off' || CHR(10) || CHR(10) ||
'SELECT /* v$database 및 dba_hist_snapshot 에서 필요한 정보 조회할 것 */' || CHR(10) ||
' output' || CHR(10) ||
'FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(' || A.DBID || ', ' || B.INST_ID || ', ' || A.STRT_SNAP_ID || ', ' || A.END_SNAP_ID || ') );' || CHR(10) || CHR(10) ||
'spool off' || CHR(10)
FROM WTH_HIST_SNAPSHOT A
,(SELECT LEVEL AS INST_ID
FROM DUAL
CONNECT BY
LEVEL <= 3
) B
ORDER BY
B.INST_ID
;
이상입니다.
'Database > ORACLE' 카테고리의 다른 글
오라클을 설치 하였는데 오렌지에서 찾지 못하는 경우 (0) | 2020.12.03 |
---|---|
오렌지 ORA-12170 오류 (0) | 2020.01.17 |
DBA HIST 관련 테이블 (0) | 2020.01.12 |
[ORACLE] RAC (0) | 2016.08.08 |
[ORCLE] ORA-28002 오류 메세지 대처법 (0) | 2016.08.07 |