본문 바로가기

오라클 백업/복구

Log Miner



Log Miner (로그 마이너)

Oracle의 Redo log 파일이나 Archive log 파일의 내용을 사람이 볼수 있도록 변환해 주는 유틸리티



불완전복구에서 Drop Tablespace 장애를 제와한 다른 장애들은 장애난 시간을 찾아내야 되는데 쉽지 않음

DB에서 일어난 모든 변경 내역을 기록하는 Redo log 내용을 참조해서 장애 시간을 찾아내는 유용한 기술

log miner를 사용해 redo log file의 내용을 SQL로 변환 후 사용자가 SQL 문장으로 조회해서 원하는 내용을 확인



Log Miner 설정해서 Redo Log File 분석하기


1. Supplemental log 활성화

하나의 컬럼이 변경되더라도 전체 row의 정보를 모두 redo log에 저장하는 기능

Log Miner의 전체 기능을 전부 사용하려면 이 기능을 수동으로 활성화시켜야 함

이 기능을 활성화 시키고 난 후부터 생성된 redo log 만 분석이 가능!

쉽게 말하면,

데이터에 DML이 발생하면 redo log에 추가적인 내용을 기록하는 것을 설정하는 기능

이 기능을 사용함으로 설정하지 않으면 (기본값) 복구에 필요한 최소 정보만 기록하는데,

이걸 enable 시킴으로서 더 자세한 내용을 기록하게 돼, 데이터를 보다 정확하고 확실하게 복구 가능 


활성화 여부 조회

> SELECT supplemental_log_data_min FROM v$database ;

활성화시키기

> ALTER database ADD supplemental log data ;

특정 테이블만 적용하기

> ALTER table 테이블명 ADD supplemental log data (all) columns ;






2. Dictionary File 생성하기 

여기서 말하는 딕셔너리 파일은 로그마이너가 사용하는 별도의 딕셔너리

파라미터파일에 딕셔너리파일이 생성될 경로 설정 추가

로그마이너가 리두로그를 분석할 때 사용하는, 분석하는 DB의 정보를 저장하고 있는 파일

리두로그 안에 있는 테이블 이름이나 컬럼 이름들 부분을 딕셔너리르로 확인해서 우리가 볼수 있도록 변환시킨다. 

딕셔너리 생성하는 방법중 가장 많이 쓰이는 방법은 Flat File(OS file)에 저장하는 방법


DB 종료 후 파라미터 파일에 딕셔너리 파일 위치 추가하기

utl_file_dir=딕셔너리파일위치     <- 이 디렉토리는 미리 만들어져 있어야함

DB OPEN 후 딕셔너리 생성 

> exec dbms_logmnr_d.build ('딕셔너리파일이름','딕셔너리파일위치') ;

딕셔너리 경로 확인

> show parameter utl ;






3. 분석할 Log File 등록

add_logfile 프로시저를 사용해 분석하길 원하는logfile을 등록 (redo log 뿐 아니라 archive log도 등록 가능)

분석하기 원하는 로그파일은 등록, 필요없는 파일은 제거해주면서 관리해주기


로그 등록

>exec dbms_logmnr.add_logfile('분석할로그파일경로',1/2/3) ;

1=새파일등록 

2=기존파일삭제 

3=다른파일추가 

현재 로그마이너에 등록된 로그파일 내역 확인

> SELECT db_name, filename from v$logmnr_logs ;




※ Archive Log 등록 방법 ※

아카이브 로그 하나씩 등록하면 에러가 나더라

그래서 현재 있는 모든 아카이브 로그 자동으로 등록하는 스크립트

for i in $(ls /data/arc2) ;

do echo "exec dbms_logmnr.add_logfile('/data/arc2/$i',3) ; " >> /home/oracle/arc_logmnr.sql ; done ;






4. Log File 분석 

리두로그 파일 크기가 너무 클수도 있기 때문에 전체를 분석하는 것보다는

원하는 검색 조선을 옵션으로 끼운 후, 원하는 것만 분석하는 것이 더 효과적


분석

exec dbms_logmnr.start_logmnr(옵션=>값) ;


옵션 종류

startscn

endscn

starttime

endtime

dictfilename -> 값에 경로를 써주되, single quotation으로 묶어주기

options -> 예) options=>dbms_logmnr.ddl_dict_tracking + dbms_logmnr.committed_data_only






5. 분석 내용 조회

분석된 내용은 v$logmnr_contents에 기록되어 있음


조회방법

SELECT  timestamp, username, operation, sql_redo

FROM v$logmnr_contents

WHERE seg_name = '테이블명 ;


timestamp 시간까지 안나오면 --> to_char(timestamp,'YYYY-MM-DD:HH24:MI:SS')

또는 현재 세션 시간출력 형식 바꾸기 --> > alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS' ;





[실습1:Drop Table 정보 확인]





[실습2:Update Table 정보 확인]





[실습3:Archive Log 등록후 정보 확인]




하다보면

ORA-25153: Temporary Tablespace is Empty

에러가 나올 경우가 있음,

말 그대로 Temporary Tablespace가 생성되어있지 않거나, 크기가 작아서 생기는 에러

만들어 주면 된다.


> CREATE temporary tablespace 이름

   tempfile '경로' size 10M

   autoextend on next 10M maxsize unlimited;


> ALTER database default temporary tablespace temp03;


조회는 dba_temp_files 를 통해 가능.