日志挖掘

来源:互联网 发布:java银行项目面试简历 编辑:程序博客网 时间:2024/06/05 19:42
[oracle@test ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.4.0 Production on Wed Mar 23 10:15:11 2016


Copyright (c) 1982, 2013, Oracle.  All rights reserved.




Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> show user
USER is "SYS"
SQL> conn scott/tiger
Connected.
SQL> set lines 200
SQL> select * from emp;


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        900                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10


14 rows selected.


SQL> update emp set sal=sal+100 where empno=7369;


1 row updated.


SQL> commit;


Commit complete.


SQL> update emp set ename='HUYUWU' where empno=7369;


1 row updated.


SQL> commit;


Commit complete.


SQL> select * from emp;


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 HUYUWU     CLERK           7902 17-DEC-80       1000                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20


     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10


14 rows selected.


SQL> conn /as sysdba
Connected.
SQL> show user
USER is "SYS"
1.检查库当前是否为追加日志模式
select supplemental_log_data_min from v$database;
结果为NO,则没有开启
2.修改库为追加日志数据模式
alter database add supplemental log data;


SQL> Set linesize 200
SQL> col member format a50   
SQL> select * from v$logfile;


    GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         4         ONLINE  /u01/app/oracle/oradata/test/redo04.log            NO
         5         ONLINE  /u01/app/oracle/oradata/test/redo05.log            NO
         6         ONLINE  /u01/app/oracle/oradata/test/redo06.log            NO


SQL> select * from v$log;    


    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         4          1         39  524288000        512          1 YES INACTIVE               1088777 22-MAR-16      1088780 22-MAR-16
         5          1         40  524288000        512          1 NO  CURRENT                1088780 22-MAR-16   2.8147E+14
         6          1         38  524288000        512          1 YES INACTIVE               1088774 22-MAR-16      1088777 22-MAR-16


使用当前日志建立分析列表(添加archive redo log)---#(如果日志被切换使用当前日志则无效,需使用全部日志)
SQL> exec sys.dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/test/redo05.log');
     exec sys.dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/test/redo05.log', options=>sys.dbms_logmnr.addfile);
PL/SQL procedure successfully completed.


使用数据字典进行日志分析(日志挖掘)
SQL> exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);


PL/SQL procedure successfully completed.
####如果没有数据字典则使用 exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog)


查看挖掘结果
select scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo,sql_undo
from v$logmnr_contents
where seg_name='E'and seg_owner='HUYUWU';


       SCN TO_CHAR(TIMESTAMP,'
---------- -------------------
SQL_REDO
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   1091406 2016-03-23 10:04:44
update "SCOTT"."EMP" set "SAL" = '900' where "SAL" = '800' and ROWID = 'AAAVREAAEAAAACXAAA';
update "SCOTT"."EMP" set "SAL" = '800' where "SAL" = '900' and ROWID = 'AAAVREAAEAAAACXAAA';


   1091711 2016-03-23 10:16:24
update "SCOTT"."EMP" set "SAL" = '1000' where "SAL" = '900' and ROWID = 'AAAVREAAEAAAACXAAA';
update "SCOTT"."EMP" set "SAL" = '900' where "SAL" = '1000' and ROWID = 'AAAVREAAEAAAACXAAA';


       SCN TO_CHAR(TIMESTAMP,'
---------- -------------------
SQL_REDO
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


   1091757 2016-03-23 10:18:09
update "SCOTT"."EMP" set "ENAME" = 'HUYUWU' where "ENAME" = 'SMITH' and ROWID = 'AAAVREAAEAAAACXAAA';
update "SCOTT"."EMP" set "ENAME" = 'SMITH' where "ENAME" = 'HUYUWU' and ROWID = 'AAAVREAAEAAAACXAAA';


###################################################################################################################
检查分析结果:
select * from  v$logmnr_contents  where sql_redo like '%table_name%'---这个where条件,就是你自己要填写查找的内容。
但是在sqlplus中此语句输出结果太乱
-------------------------------------------------------------------------------------------------------------------
查看挖掘结果
select scn,timestamp,sql_redo,sql_undo,username,os_username,machine_name from 
v$logmnr_contents where seg_owner='SCOTT';
或select sql_redo from v$logmnr_contents where lower(sql_redo) like '%update%' 
and seg_name='DEPT';
####################################################################################################################
停止日志挖掘
SQL> exec sys.dbms_logmnr.end_logmnr;


PL/SQL procedure successfully completed.

1 0
原创粉丝点击