Oracle Logminer Continuous 추출방법

Archymi·2021년 3월 19일
0
# 현재 읽고 있는 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();
profile
겸손하고 꾸준하게.

0개의 댓글