> 시나리오 :: 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 그리고, 이러한 로그마이너를 활용하기 위해서는 다음과 같은 패키지가 필요하다.. 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.
+ 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.
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 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 5. 로그파일을 등록한뒤에는, DBMS_LOGMNR.START_LOGMNR 프로시저를 이용 로그파일을 읽어들인다. - 분석할 Redo 레코드를 필터링 하기위해 시작/종료 SCN과 Time파라메터를 지정할 수 도 있다. SQL>desc v$logmnr_parameters; Name Null? Type
SQL> select * from v$logmnr_parameters; START_DAT END_DATE START_SCN END_SCN INFO STATUS 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
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 |