公司要求使用LOGMNR去分析oracle的redo日志,来实现数据同步的功能。现在遇到以下问题,希望有大神助我。
为了测试,我将三个redo日志(redo01.log,redo02.log,redo03.log)的大小都设置的很小,均为5M.
假设,我现在往库中插入20w条数据。按照日志切换的概念,这20w的数据是可以保证这三个日志发生切换的,切换顺序假如是从redo01.log切换到redo02.log日志,再从redo02.log切换到redo03.log日志时,下一次切换应该就是从redo03.log切换到redo01.log,这样循环切换的。
[b]使用LOGMNR分析的语句如下:[/b]
a.首先添加三个日志文件,待分析
b.更新数据字典(数据字典之前已创建完成)
c.执行分析(以SCN作为限制)
d.查询分析结果(因为我是就SYNC这个用户执行的插入20w条数据,所以我只查询这个用户的)
我又对分析结果进行了一次聚合
问题出现了,发现聚合后的结果没有20w,只有13w多,也就是说丢失了近7w的数据?
猜想:应该是日志发生了循环切换,从redo03.log切换到redo01.log的过程导致redo01.log的日志被覆盖了,所以,我分析的相当于是切换后,redo01.log被覆盖后的结果。
所以,我如果用上面的分析方式,是会存在数据被覆盖的问题的,那我应该如何知道日志何时切换,以及如果知道了日志切换的时间,如何根据SCN进行分析日志结果呢?
另,如果SCN不在日志范围内,有时会抛出如下异常:
ORA-01291: 缺失日志文件
ORA-06512: 在 "SYS.DBMS_LOGMNR", line 58
ORA-06512: 在 line 1
希望得到大神的帮助。
慕斯4360584
慕斯4360584
慕斯4360584
相关分类