본문 바로가기

ORACLE/ORACLE_Backup&Recovery

ORACLE LogMiner

반응형

## LogMiner

- 리두로그와 언두로그를 분석하여 DML/DDL 이력을 확인 가능

- 잘못 커밋한 데이터를 복구 가능

- LogMiner는 Log 파일을 추출하여, 그 안에 저장되어 있는 내용을 Database 에 가해진 논리적인 작업을 표현하는 SQL 문장으로 변환

 

 

▶ Dictionary

- logminer 사용시 딕셔너리를 사용하지 않으면 오브젝트 값들에 대해 바이너리 형태로 출력되기 때문에 dictionary를 사용해야 함

 

 

▶  V$LOGMNR_CONTENTS

- 본래의 작업을 표현하는 SQL (SQL_REDO Column)

- 그 작업을 취소할 수 있는 SQL(SQL_UNDO Column)

 

 

▶  Redo / Undo 관련 참고

 https://daminies.tistory.com/17

 

## 사용예제

 

1. logminer 확인

desc dbms_logmnr

 

 

2. SUPPLEMENTAL_LOG가 ON되어 있는지 확인 → 안되어 있다면 활성화 진행

select supplemental_log_data_min from v$database;

alter database add supplemental log data; -- supplemental log 기능 활성화

 

 

3. 임의의 계정에서 update 진행

 

 

 

4. 리두 로그 파일 확인

select a.sequence#, a.group#, a.status, a.members, b.status, b.type, b.member
from v$log a , v$logfile b
where a.group#=b.group#
order by a.group# asc, a.sequence# asc;

/app/oracle/oradata/ORA19C/redo01.log

/app/oracle/oradata/ORA19C/redo02.log

/app/oracle/oradata/ORA19C/redo03.log

위의 위치에 redo log 파일이 생성된 걸 확인 

 

 

 

5. 딕셔너리 파일 생성

BEGIN 
       SYS.DBMS_LOGMNR_D.build ( 
       dictionary_filename => 'logmnrdict.ora', 
       dictionary_location => '디렉토리 위치'); -- 만약 디렉토리가 생성되어 있지않다면 mkdir로 생성 후 진행
END;

앞에서 설정한 디렉토리 위치에 파일이 생성된 걸 확인할 수 있다.

 

 

 

6. 로그 파일을 등록

exec dbms_logmnr.add_logfile('/app/oracle/oradata/ORA19C/redo01.log',1);
exec dbms_logmnr.add_logfile('/app/oracle/oradata/ORA19C/redo02.log',3);
exec dbms_logmnr.add_logfile('/app/oracle/oradata/ORA19C/redo03.log',3);

 

 

7. 등록한 로그파일 분석 시작 (STORE_IN_FLAT_FILE 사용)

exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/logmnrdict.ora');

 

8. sql_redo, sql_undo 확인

select to_char(timestamp,'YYYY-MM-DD:HH24:MI:SS'), username, sql_redo, sql_undo
from v$logmnr_contents
where sql_redo like '%update%'
and username='SCOTT';

 

대략적인 내용 확인 후 Undo를 해야하는 상황이기 때문에 sql_undo만 추출해서 확인

 

 

9. sql_undo 내용을 재실행하여 원복

redo를 하고싶다면 sql_redo를 확인한 뒤 동일하게 실행

 

 

 

반응형