Oracle

게시글 보기
작성자 유건데이타 등록일 2015-02-06
제목 로그마이너(logminer)

utl_file_dir=/oracle/logminer


SQL> /as sysdba
SQL> @?/rdbms/admin/dbmslm.sql
...
SQL> @?/rdbms/admin/dbmslmd.sql


2. LogMiner 를 이용하기 위한 Setup

1) LogMiner 를 위한 dictionary 생성(flatfile or on line redo log)
2) Archive log file or Redo log file 등록
3) Redo log 분석 시작
4) Redo log 내용 조회
5) LogMiner 종료


1)딕셔너리 정보생성
SQL> execute dbms_logmnr_d.build -
> (dictionary_filename => 'dictionary.ora', -
> dictionary_location => '/oracle/logminer', -
> options => dbms_logmnr_d.store_in_flat_file);


# LogMiner 분석을 위해 생성한 dictioanry 정보를 online redo 에 저장 가능 위의 UTL_FILE_DIR 설정없이
가능해 졌습니다.

SQL> EXECUTE dbms_logmnr_d.build -
(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);


PL/SQL 처리가 정상적으로 완료되었습니다.




SQL> select current_timestamp from dual;

2) LOG FILE 등록
SQL> execute dbms_logmnr.add_logfile ( -
> logfilename => -
> 'D:\ORACLE\ORADATA\DBWORKS\REDO01.LOG', -
> options => dbms_logmnr.new)

PL/SQL 처리가 정상적으로 완료되었습니다.

3) LOG FILE 분석 시작 (utl 파일로 설정하는 경우)
SQL> execute dbms_logmnr.start_logmnr( -
> dictfilename => 'd:\oracle/dictionary.ora', -
> starttime => to_date('04-JUN-04 14:00:18','DD_MON_RR HH24:MI:SS'), -
> endtime => to_date('04-JUN-04 14:02:00','DD_MON_RR HH24:MI:SS'), -
> options => dbms_logmnr.ddl_dict_tracking)

3) LOG FILE 분석 시작 (utl 파일 설정없이 online redo에 저장하는 법)
SQL> execute dbms_logmnr.start_logmnr( -
> starttime => to_date('04-JUN-04 14:00:18','DD_MON_RR HH24:MI:SS'), -
> endtime => to_date('04-JUN-04 14:02:00','DD_MON_RR HH24:MI:SS'), -
> options => dbms_logmnr.ddl_dict_tracking)

PL/SQL 처리가 정상적으로 완료되었습니다.


4)LOG FILE 내용 조회
SQL> select TO_CHAR(TIMESTAMP,'DD-MON-YYYY HH24:MI:SS') TIMESTAMP, username,commit_timestamp, operation, sql_redo
from v$logmnr_contents
where username='SCOTT';


select TO_CHAR(TIMESTAMP,'DD-MON-YYYY HH24:MI:SS') TIMESTAMP, username, session_info, sql_redo
from v$logmnr_contents
where username='SCOTT'
and (seg_name = 'EMP30' or seg_name is null);



5) logminer 를 종료한다.

SQL> execute dbms_logmnr.end_logmnr


**************************************************************************************

SQL> select first_change#,next_change#, sequence#
from v$log_history
where sequence#=387;

FIRST_CHANGE#-1 SEQUENCE#
---------- ----------
9999 387 1 row selected.

SQL> execute dbms_logmnr.start_logmnr(DictFileName=>'/home2/o8ii/logs/dir_file',StartSCN=>100, EndSCN=>150);


############################################################################



> 특정 작업을 수행한다.(장애발생)

> 분석할 로그를 확인한다.
SQL> select a.group#, a.sequence#, b.member
from v$log a, v$logfile b
where a.status = 'CURRENT' and a.group# = b.group#
/

GROUP# SEQUENCE# MEMBER
---------- ---------- ---------------------------------------------
1 14 /u01/oradata/ox9i/redo01.log



> 로그마이너를 사용하기 위해서는 'SYS'권한을 갖고 있어야 하며, 데이터베이스 레벨에서 추가적인 로그 기록 옵션을 갖고 있어야 한다.

SQL> conn / as sysdba
SQL> alter database add supplemental log data;
SQL> execute dbms_logmnr_d.set_tablespace('USERS'); <<< 기본적으로 로그마이너의 작동에 관여될 모든 테이블들의 위치는 'SYSTEM'이기 때문에 다른 테이블스페이스로 변경하는 것을 추천한다.



> 로그마이너 설치 여부 확인

SQL> desc dbms_logmnr

--만약, 설치되어 있지 않을 경우에는 '$ORACLE_HOME/rdbms/admin/dbmslm.sql'을 실행한다.



> 로그마이너를 사용하기 위해 'Dictionary File'을 생성하고 삭제되었을 때의 Redo log File 또는 Archivelog File을 등록한다.

SQL> alter system set UTL_FILE=DIR='/BACKUP/LOGMINER' scope=spfile;

SQL> execute dbms_logmnr_d.build('090709.log','/BACKUP/LOGMINER'); <<<딕셔너리 파일 생성
SQL> execute dbms_logmnr.add_logfile('/u01/oradata/ox9i/redo01.log',1); <<<로그파일 지정
SQL> select log_id, filename from v$logmnr_logs;
LOG_ID FILENAME
---------- ---------------------------------------------
13 /u02/BACKUP/ARCHIVE/arch_13_1.log

SQL> execute dbms_logmnr.start_logmnr(DictFileName=>'/BACKUP/LOGMINER/090709.log'); <<<로그파일 검색시작



> v$logminer_contents 뷰를 통한 로그 파일 정보 확인

SQL> select seg_owner, seg_name, operation, sql_redo, sql_undo, to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss') time
from v$logmnr_contents
where seg_owner = 'BLOOD' and seg_name = 'TEST1'
/

SEG_OWNER SEG_NAME OPERATION SQL_REDO SQL_UNDO TIME
---------- --------------- ---------- ------------------------------ ---------- --------------------
BLOOD TEST1 DDL drop table TEST1 2009-07-09 10:18:09


-- 위의 쿼리를 동작 시키려면 '로그파일 지정'과 '로그파일 검색시작' 프로시져를 동작한 상태여야 한다.
SQL> execute dbms_logmnr.add_logfile('/u01/oradata/ox9i/redo01.log',1); <<< 2번째 파일 추가시에는 '1'을 '3'으로 변경
SQL> execute dbms_logmnr.start_logmnr(DictFileName=>'/BACKUP/LOGMINER/090709.log');
Comment
등록된 코멘트가 없습니다.