Backup/Archive Log Mode

Log Miner (로그 마이너)

잇꼬 2024. 1. 22. 17:21
728x90
반응형
SMALL

■ Log Miner (로그 마이너) 
1) redo log file에 있는 내용을 추출해서 SQL문장으로 변환해 주는 유틸리티, 프로그램

2) Oracle DB 에서 변경 로그를 분석하고 조회하는 기능을 제공하는 도구

3) 데이터 변경 추적(특정 테이블이나 세그먼트에 대한 변경 내용 추적), 데이터 비교(두 시점 간의 데이터 변경 비교+ 변경된 내용을 확인), 데이터 검증(변경된 데이터의 유효성 검증, 오류나 불인치 확인) 등의 용도의 목적 


# 기본값은 비활성화

select supplemental_log_data_min from v$database;


# 활성화 시키기

alter database add supplemental log data;


# 활성화

select supplemental_log_data_min from v$database;

=> 활성화가 되어야 log miner를 이용해 분석가능하다.


# redo log 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group#=b.group#
ORDER BY 1;



# 샘플 테이블 생성 후 data 로드 저장

create table hr.test_20240122(id number, name varchar2(30));
insert into hr.test_20240122(id, name) values(1, 'oracle');
insert into HR.test_20240122(id, name) values(1, 'overwatch');
commit;


# DML 진행

update HR.test_20240122 set name ='itwill' where id = 1;
delete from HR.test_20240122 where name = 'overwatch';
commit;


# redo log 정보 확인

SELECT a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
FROM v$logfile a, v$log b
WHERE a.group#=b.group#
ORDER BY 1;


# 확인

select * from v$log;

 

# 로그 마이닝 설정

BEGIN
    dbms_logmnr.add_logfile(logfilename => '/u01/app/oracle/oradata/ora11g/redo07.log', options => dbms_logmnr.new);
    dbms_logmnr.add_logfile(logfilename => '/u01/app/oracle/oradata/ora11g/redo08.log', options => dbms_logmnr.addfile);
    /* 갯수 제한 없음 */
END;
/

#1) 새로운 마이닝 그룹 시작

DBMS_LOGMNR.ADD_LOGFILE(logfilename => '현재 로그 파일/CURRENT한 상태', options => DBMS_LOGMNR.NEW);

#2) 이전 마이닝 그룹 추가

DBMS_LOGMNR.ADD_LOGFILE(logfilename => '이전 로그 파일', options => DBMS_LOGMNR.ADDFILE);

#3) 2번보다 이전 마이닝 그룹 추가

DBMS_LOGMNR.ADD_LOGFILE(logfilename => '2번 보다 이전 로그 파일', options => DBMS_LOGMNR.ADDFILE);

 

# redo log 확인

SELECT db_name, filename FROM v$logmnr_logs;

 

# 로그 마이닝 시작하는 프로시저

=> 데이터 베이스의 리도 로그를 분석하여 변경된 데이터를 추적하는데 사용

BEGIN
    dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog);
END;
/

해석) dict_from_online_catalog : 온라인 카탈로그를 통해 딕셔너리를 로드하라는 

# 로그 마이닝 결과 

cf) 감사때 확인한다

SELECT to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss'), operation, sql_redo, sql_undo
FROM v$logmnr_contents
WHERE seg_name = 'TEST_20240122';

 

# 테이블 삭제

DROP TABLE HR.test_20240122;

# 로그 마이닝 결과

SELECT to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss'), operation, sql_redo, sql_undo
FROM v$logmnr_contents
WHERE seg_name = 'TEST_20240122';

# 종료

exec dbms_logmnr.end_logmnr

 

# 종료 후 실행하면 오류발생

SELECT to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss'), operation, sql_redo, sql_undo
FROM v$logmnr_contents
WHERE seg_name = 'TEST_20240122';



728x90
반응형
LIST