oracle 归档redo解析,Oracle 11g logminer解析redo日志

下面的示例是分析在线redo日志,分析归档redo日志过程也是如此。Toad 里面也集成了logminer的功能。

SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionPL/SQL Release 11.2.0.4.0 - ProductionCORE    11.2.0.4.0      ProductionTNS for Linux: Version 11.2.0.4.0 - ProductionNLSRTL Version 11.2.0.4.0 - Production

1. 用sys账号建立一个logminer的用户,授予sysdba的权限

create user LOGMINER

identified by "LOGMINER"

default tablespace LCAM_PUB_TBS --表空间依据当前数据库的情况而定

temporary tablespace TEMP

profile DEFAULT;

grant connect to LOGMINER;

grant resource to LOGMINER;

grant sysdba to LOGMINER;

2. 用logminer用户执行两个Oracle脚本,生成一些logminer的package,确保数据库打开辅助日志

SQL> @F:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql

SQL> @F:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslmd.sql

SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

SUPPLEME

--------

NO

SQL> alter database add supplemental log data;

SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

SUPPLEME

--------

YES

3. 用logminer用户设置utl_file_dir,并且确定有这个目录存在,有必要建一下文件夹LOGMNR

alter system set utl_file_dir='/oracle/oradata/oradb11/LOGMNR' scope=spfile;

4. 查看归档redo组

Status为current为当前启用的在线日志,为了试验简洁,我只分析当前的日志。

SQL> select l.STATUS,s.MEMBER from v$log l,v$logfile s where l.GROUP# = s.GROUP#;

STATUS           MEMBER

---------------- --------------------------------------------------

INACTIVE         /oracle/oradata/oradb11/redo04.log

CURRENT          /oracle/oradata/oradb11/redo05.log

INACTIVE         /oracle/oradata/oradb11/redo06.log

5. 在L_PUB上执行测试场景的脚本(自行找测试用户)

记录操作开始时间和结束时间。

select sysdate from dual;--2017/3/6 11:00:19

create table test(id number ,name varchar2(100));

insert into test values(1,'张三');

insert into test values(2,'李四');

commit;

insert into test values(3,'王五');

rollback;

insert into test values(4,'赵六');

insert into test values(5,'冯七');

insert into test values(6,'刘八');

insert into test values(7,'廖九');

commit;

update test set name='刘八八' where id=6;

commit;

delete from test where id=7;

rollback;

delete from test where id=1;

commit;

select sysdate from dual;--2017/3/6 11:02:05

6. 用logminer用户生成数据字典,需要保证dictionary_location所指定的目录存在

execute dbms_logmnr_d.build(dictionary_filename =>'dictionary.ora',dictionary_location =>'/oracle/oradata/oradb11/LOGMNR');

7. 用logminer用户添加分析的redo日志

第一个日志options=>dbms_logmnr.new,后面的options=>dbms_logmnr.addfile。

exec dbms_logmnr.add_logfile(logfilename=>'/oracle/oradata/oradb11/redo05.log',options=>dbms_logmnr.new);

dbms_logmnr.add_logfile(logfilename=>'/oracle/oradata/oradb11/redo06.log',options=>dbms_logmnr.addfile);

execute dbms_logmnr.add_logfile(logfilename=>'/oracle/oradata/oradb11/redo06.log',options=>dbms_logmnr.addfile);

8. 用logminer用户启动logminer

启动的方式有多种:

全分析,execute dbms_logmnr.start_logmnr(DictFileName=>'/oracle/oradata/oradb11/LOGMNR/dictionary.ora');

按时间段来分析,execute dbms_logmnr.start_logmnr(startTime => to_date('2017-03-06 11:00:18','yyyy-mm-dd hh24:mi:ss'),endTime => to_date('2017-03-06 11:02:06','yyyy-mm-dd hh24:mi:ss'),DictFileName => '/oracle/oradata/oradb11/LOGMNR/dictionary.ora');

9. 用logminer用户logminer分析处理的结果只有本session能看到,可以先用表把数据记录然后分析

Drop table logminer_t purge;

Create table logminer_t  as select * from V$LOGMNR_CONTENTS;

10. 用logminer用户分析后释放内存

execute dbms_logmnr.end_logmnr;

11. 用logminer用户可以慢慢分析

Select S.SCN,

s.start_scn,

S.COMMIT_SCN,

S.TIMESTAMP,

s.START_TIMESTAMP,

S.COMMIT_TIMESTAMP,

S.OPERATION,

S.ROLLBACK,

S.SEG_OWNER,

S.SEG_NAME,

S.TABLE_NAME,

S.TABLE_SPACE,

S.SQL_REDO,

S.SQL_UNDO

From logminer_t s

where s.SEG_OWNER = 'L_PUB'

and s.table_name = 'TEST'

order by scn;

我们可以捕获到执行的SQL:

viewdownfile?f=97C391B16879DAB4144B6CB67B77A31A4149C43B5DE76CADC9BEE885D40DAD37A4B20CD1CE2324BA8737DA34128A2A2BFFF0A380930DF980CDF705698C0F1441126E95A9E6D1E19AB8C21C27B424A78D7201FACC19F87C2923CC43B2A07A4BE867B4481399134108411106E6ADC7F297FA5F3D5F476FB3C8C2673D2E973BC67E&sid=WKyAVeW1kSmUPitz

以下是提交事务的SQL,同步的时候可以用到:

with co_scn as(

select start_scn,commit_scn

from logminer_t s

where s.start_scn is not null

and s.commit_scn is not null),

operate_scn as(

Select scn,s.sql_redo  From logminer_t s

where s.SEG_OWNER = 'L_PUB'

and s.table_name = 'TEST'

)

Select scn,sql_redo

From operate_scn s, co_scn co

where s.scn >= co.start_scn

and s.scn <= co.commit_scn;

viewdownfile?f=97C391B16879DAB4144B6CB67B77A31A4149C43B5DE76CADC9BEE885D40DAD37A4B20CD1CE2324BA8737DA34128A2A2BFFF0A380930DF980CDF705698C0F1441126E95A9E6D1E19AB8C21C27B424A78D7201FACC19F87C2923CC43B2A07A4BE867B4481399134108411106E6ADC7F2975C8234C141D84FF9C2673D2E973BC67E&sid=WKyAVeW1kSmUPitz

以下是回滚的SQL,同步时可以忽略:

select S.SCN,

S.TIMESTAMP,

S.OPERATION,

S.ROLLBACK,

S.SEG_OWNER,

S.SEG_NAME,

S.TABLE_NAME,

S.SQL_REDO from logminer_t s where pxid in

(select pxid from logminer_t where rollback=1 and SEG_OWNER = 'LCAM_PUB')

order by scn;

viewdownfile?f=97C391B16879DAB4144B6CB67B77A31A4149C43B5DE76CADC9BEE885D40DAD37A4B20CD1CE2324BA8737DA34128A2A2BFFF0A380930DF980CDF705698C0F1441126E95A9E6D1E19AB8C21C27B424A78D7201FACC19F87C2923CC43B2A07A4BE867B4481399134108411106E6ADC7F2974835ABB193B39AC7C2673D2E973BC67E&sid=WKyAVeW1kSmUPitz

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值