OracleLogminer使用(一)

2014-11-24 15:15:55 · 作者: · 浏览: 2

--创建测试数据

C:\>set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on 星期三 3月 12 22:10:38 2014

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> create tablespace zwc datafile 'C:\oracle\zwc01.dbf' size 500m;


表空间已创建。


SQL> create user zwc identified by zwc;


用户已创建。


SQL> grant resource,connect to zwc;


授权成功。


SQL> conn zwc
输入口令:
已连接。
SQL> create table zwc.tab01(a int primary key,b varchar2(100),c varchar2(100),d date default sysdate) tablespace zwc;


表已创建。


SQL> create or replace procedure p_inst_tab01 as
2 begin
3 for i in 1..2000000 loop
4 insert into tab01(a,b,c,d) values(i,i,i,sysdate);
5 if mod(i,2000)=0 then
6 commit;
7 end if;
8 end loop;
9 end p_inst_tab01;
10 /


过程已创建。


SQL> show user
USER 为 "ZWC"
SQL> exec p_inst_tab01;


PL/SQL 过程已成功完成。


SQL> select count(*) from tab01;


COUNT(*)
----------
2000000

SQL> select sum(bytes)/1024/1024 "size MB" from user_segments where segment_name='TAB01';


size MB
----------
80

--删除、更新数据

SQL> show user
USER 为 "SYS"
SQL> alter database add supplemental log data;


数据库已更改。


SQL> delete from zwc.tab01 where rownum<=100;


已删除100行。


SQL> update zwc.tab01 set d=sysdate-100 where rownum<=10;


已更新10行。


SQL> commit;


提交完成。

--使用logminer找回数据

SQL> alter system set utl_file_dir='c:\oracle' scope=spfile;


系统已更改。


SQL> alter session set nls_date_format ='yyyy-mm-dd hh24:mi:ss';


会话已更改。


SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。


Total System Global Area 612368384 bytes
Fixed Size 2067656 bytes
Variable Size 167772984 bytes
Database Buffers 436207616 bytes
Redo Buffers 6320128 bytes
数据库装载完毕。
数据库已经打开。
SQL> execute dbms_logmnr_d.build(dictionary_filename=>'test.ora',dictionary_location=>'c:\oracle');


PL/SQL 过程已成功完成。


--select group#,status from v$log;


--select group#,member from v$logfile;


SQL> execute dbms_logmnr.add_logfile(logfilename=>'C:\arch\ARC00041_0842045960.001',options=>dbms_logmnr.new);


PL/SQL 过程已成功完成。


SQL> execute dbms_logmnr.start_logmnr(dictFilename=>'c:\oracle\test.ora');


PL/SQL 过程已成功完成。


SQL> create table zwc.t_logminer tablespace zwc as select * from v_$logmnr_contents;


表已创建。


SQL> select count(*) from zwc.t_logminer;


COUNT(*)
----------
212


SQL> execute dbms_logmnr.end_logmnr;


PL/SQL 过程已成功完成。


SQL> select count(*) from zwc.t_logminer where seg_name='TAB01' and seg_owner='ZWC';


COUNT(*)
----------
110

--需要恢复数据查询SQL_UNDO,执行误删除的是SQL_REDO,OPERATION是操作类型

[oracle@db10 ~]$ sqlplus zwc/zwc@192.168.1.10:1521/prod


SQL*Plus: Release 10.2.0.5.0 - Production on Wed Mar 12 23:10:15 2014


Copyright (c) 1982, 2010, Oracle. All Rights Reserved.


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


SQL> set lines 150 pages 200


SQL> select SQL_UNDO from t_logminer where seg_name='TAB01' and seg_owner='ZWC' and OPERATION='DELETE';


SQL_UNDO
------------------------------------------------------------------------------------------------------------------------------------------------------
insert into "ZWC"."TAB01"("A","B","C","D") values ('201','201','201',TO_DATE('02-12月-13', 'DD-MON-RR'));
insert into "ZWC"."TAB01"("A","B","C","D") values ('202','202',