> 시나리오 ::

SCOTT계정으로 들어간 넘이 테이블의 데이터를 잘못 수정하여 테이블을 망가트린 뒤 커밋 명령을 실행하다..

 

SCOTT계정이 명령어를 친 시점 = LSN 23

관리자가 문제점을 발견한 시점 = LSN28

 

테이블을 망가뜨린 시점과 사용한 명령어를 찾아내는 기능로그 마이너라고 한다..!!!!

 

 

1. UTL_FILE_DIR   딕셔너리 화일의 경로지정(딕셔너리 화일에 REDO 로그 화일의 정보를 기록한다.)

Oracle>mkdir DICT

SQL>alter system set UTL_FILE_DIR='/Oracle/DICT' scope=spfile;                    //인스턴스 재시작 필요..;;

SQL>show parameter utl;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string      /Oracle/admin/ORA9/DICT

그리고, 이러한 로그마이너를 활용하기 위해서는 다음과 같은 패키지가 필요하다..

SQL>desc DBMS_LOGMNR

SQL>desc DBMS_LOGMNR_D

 

 

2. 패키지가 설치되어 있지 않으면 패키지를 설치한다.

+ DBMS_LOGMNR_D

로그마이너 딕셔너리 파일을 생성하기 위한 프로시저를 제공한다.

몇개의 프로시져가 있으나 Public인것은 Build 뿐이므로 우리는 Build프로시저만 사용하면 된다.

이 프로시저는 현재 DB의 딕셔너리 테이블에 질의하여 여기서 나온 정보를 가지고 텍스트기반의 파일을 생성한다.

이 외부 딕셔너리 파일은 차후 로그마이너가 로그파일 분석하기 위한 용도로 사용된다.

이 프로시저는 내부적으로 UTL_FILE패키지를 사용하기 때문에 파라미터파일에 'UTL_FILE_DIR'파라미터를 설정해야 한다.

'set outputserver on'명령을 사용하면 Build프로시저의 진행상황을 모니터링 할 수 있다.

 

SQL>@?/rdbms/admin/dbmslmd.sql

Procedure created.

No errors.

Grant succeeded.


PL/SQL procedure successfully completed.


Package created.

 

+ DBMS_LOGMR

이 패키지는 3가지 프로시저를 제공한다.

- add_logfile(name varchar2, options number)    분석할 Redo Log의 추가/제거

- start_logmnr(start_scn number, end_scn number, start_time number, end_time number, dictfilename varchar2, options number)

   분석한 시간대나 SCN범위를 지정, 분석에 사용할 Data Dictionary Extract를 지정

- end_logmnr()  마이닝 세션 종료. Redo 스트림을 분석하고 Dictionary Extract를 읽기 위해 사용한 메모리를 해제한다.

 

SQL>@?/rdbms/admin/dbmslm.sql

Procedure created.

No errors.

Grant succeeded.


PL/SQL procedure successfully completed.


Package created.

 

3. 모든 패키지가 정상적으로 설치 되어 있다면.. 아래의 명령을 통해 Dictionary 파일을 생성한다.

SQL>exec DBMS_LOGMNR_D.BUILD('logmnr_dic.ora','/Oracle/admin/ORA9/DICT');

PL/SQL procedure successfully completed.

 

4. 분석할 로그파일을 로그파일목록에 등록한다.

- 로그마이너 세션에서 'DBMS_LOGMNR.ADD_LOGFILE'프로시저를 사용하여 로그파일 목록에서 등록 또는 제거 할 수 있다.

- 주의 할 점은.. 처음 등록시에는 'DBMS_LOGMNR.NEW'를 사용하여 등록하고, 그 이후에는 'DBMS_LOGMNR.ADDFILE'으로

   등록해야 한다는 점이다. 제거는 'DBMS_LOGMNR.REMOVEFILE'을 사용한다.

 

SQL>select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ------------------------------
         3         ONLINE  /Oracle/oradata/ORA9/redo03.log

         2         ONLINE  /Oracle/oradata/ORA9/redo02.log

         1         ONLINE  /Oracle/oradata/ORA9/redo01.log

 

SQL> exec dbms_logmnr.add_logfile('/Oracle/oradata/ORA9/redo01.log',dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL> exec dbms_logmnr.add_logfile('/Oracle/oradata/ORA9/redo02.log',dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

SQL> exec dbms_logmnr.add_logfile('/Oracle/oradata/ORA9/redo03.log',dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

 

등록된 로그파일은 다음 명령으로 알아 볼 수 있다.

SQL> select log_id, filename from v$logmnr_logs;

    LOG_ID FILENAME
---------- ---------------------------------------------
        30 /Oracle/oradata/ORA9/redo02.log
        31 /Oracle/oradata/ORA9/redo03.log
        32 /Oracle/oradata/ORA9/redo01.log

5. 로그파일을 등록한뒤에는, DBMS_LOGMNR.START_LOGMNR 프로시저를 이용 로그파일을 읽어들인다.

- 분석할 Redo 레코드를 필터링 하기위해 시작/종료 SCN과 Time파라메터를 지정할 수 도 있다.

SQL>desc v$logmnr_parameters;

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 START_DATE                                         DATE
 END_DATE                                           DATE
 START_SCN                                          NUMBER
 END_SCN                                            NUMBER
 INFO                                               VARCHAR2(32)
 STATUS                                             NUMBER

 

SQL> select * from v$logmnr_parameters;

START_DAT END_DATE   START_SCN    END_SCN INFO                     STATUS
--------- --------- ---------- ---------- -------------------- ----------
01-JAN-88 01-JAN-11          0          0                               0

SQL> exec dbms_logmnr.start_logmnr(DictFileName=>'/Oracle/admin/ORA9/DICT/logmnr_dict.ora');

PL/SQL procedure successfully completed.

 

6. 읽어들인 로그파일을 분석한다.

- V$LOGMNR_CONTENTS 뷰를 통해 내용을 질의한다.

- 주의할 점은 'DBMS_LOGMNR.START_LOGMNR'프로시저가 시작된 상태여야 가능하다.

 

SQL> select scn, timestamp, sql_undo, sql_redo from v$logmnr_contents where rownum<5;

       SCN TIMESTAMP SQL_UNDO             SQL_REDO
---------- --------- -------------------- ------------------------------
   5602124 15-JAN-07                      commit;
   5602134 15-JAN-07                      set transaction read write;
         0 01-JAN-88
   5602134 15-JAN-07 Unsupported          Unsupported

 

7. 로그마이너 세션을 종료한다.

SQL> exec dbms_logmnr.end_logmnr();

PL/SQL procedure successfully completed.

 

출처 : http://cafe.naver.com/iamstrong.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=977

이 글은 스프링노트에서 작성되었습니다.

'DBMS > Oracle' 카테고리의 다른 글

정렬 조건 부여  (0) 2008.07.16
오라클 접속 포트 고정시키기  (0) 2008.07.16
SQL*Plus Instant Client  (0) 2008.07.16
Oracle Object For OLE(OO4O)  (0) 2008.07.16
Linux 9i 설치  (0) 2008.07.16

+ Recent posts