# 현재 읽고 있는 redo 로그 조회
SELECT GROUP#, SEQUENCE#, BYTES, MEMBERS, STATUS, FIRST_CHANGE# FROM V$LOG;
# 결과:
# STATUS 구분.
## UNUSED : 생성 이후 한번도 사용되지 않은 상태
## CURRENT : 현재 활성상태
## ACTIVE : 로그는 활성화 되어있지만 Current 상태가 아니다. 충돌 복구시 필요함.
## CLEARING : ALTER DATABASE CLEAR 구분을 통해 빈 로그 파일 재생성, Clear 후에는 UNUSED 상태가 된다.
## CLEARING_CURRENT : Current 로그에 초기화가 진행중인 상태.
## INACTIVE : 인스턴스 복구에 더이상 필요하지 않은 상태. 현재 활성화중인 그룹이 아니며 비활동 중인 상태
# FIRST_CHANGE# : 해당 리두 로그 그룹 중 가장 낮은 SCN
GROUP# SEQUENCE# BYTES MEMBERS STATUS FIRST_CHANGE#
---------- ---------- ---------- ---------- -------- -------------
1 85 52428800 1 INACTIVE 2429891
2 86 52428800 1 CURRENT 2459511
3 84 52428800 1 INACTIVE 2399597
3 rows selected.
# 현재 로그 파일 경로 출력
SELECT * FROM V$LOGFILE ORDER BY 1;
GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE CON_ID
---------- ------- ------- -------------------------------- --------------------- ---
1 ONLINE /usr/oracle/app/oradata/arcl/redo01.log NO 0
2 ONLINE /usr/oracle/app/oradata/arcl/redo02.log NO 0
3 ONLINE /usr/oracle/app/oradata/arcl/redo03.log NO 0
# 따라서
# FIRST_CHANGE# : 2459511,
# /usr/oracle/app/oradata/arcl/redo02.log
# 로그를 로그마이너에 넣는다.
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/usr/oracle/app/oradata/arcl/redo01.log', OPTIONS => DBMS_LOGMNR.NEW);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/usr/oracle/app/oradata/arcl/redo02.log', OPTIONS => DBMS_LOGMNR.NEW);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/usr/oracle/app/oradata/arcl/redo03.log', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed.
# 로그마이너 Continuous start
EXECUTE DBMS_LOGMNR.START_LOGMNR(STARTSCN=>2459511, ENDSCN=>184467440737095, OPTIONS=>DBMS_LOGMNR.CONTINUOUS_MINE + DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.COMMITTED_DATA_ONLY);
# SQL REDO 추출
SELECT SQL_REDO FROM V$LOGMNR_CONTENTS;
# 로그마이너 세션 종료
EXECUTE DBMS_LOGMNR.END_LOGMNR();