日期:2014-05-16  浏览次数:20414 次

Oracle物化视图定时全量刷新导致归档日志骤增
一、问题描述?
  某项目组来电,说有一个源表约2万多条的物化视图,每5分钟定时全量(Complete)刷新一次,一天下来,导致Oracle数据库归档日志骤增。?
?
二、问题分析及解决?
  先明确一个问题:归档日志(Archive Log)和重做日志(REDO Log)的关系。?
  Oracle的重做日志是一组(或几组)文件,按一定的规则顺序循环写,当重做日志写满后,从头开始写之前,如果数据库在归档模式(Archive),则在重写之前,需要把当前的重做日志进行归档(Archive),形成归档日志。即归档日志来自于重做日志。?
  基于此,可以通过减少产生重做日志的量来达到减少归档日志量的目的。?
?
  综合一下:?
  1、不要全量刷新,采用在源表上记录物化视图日志的方式,实现快速刷新,减少更新的数据量,达到减少重做日志的目的;?
  2、指定物化视图为nologging模式?
  3、减少或取消其上的索引(2W条记录,如果使用得比较频繁,甚至可以考虑把它cache到内存中)?
  4、如果一定要有索引,自己写刷新的Job,先disable索引,然后刷新,然后重建索引(唯一索引可能有问题)。?
  5、评估业务、技术要求,考虑取消物化视图,建立一般视图,在访问该视图时,直接从源表中查询。?
?
三、验证过程?
  验证全量刷新的物化视图产生的REDO日志的大小:?
-- 建立源表?
create table big_table as select * from dba_objects;?
?
-- 我机器上(11g),大概8W条记录?
select count(*) from big_table;?
?
/*?
? 开始验证全量刷新产生的REDO日志的量?
*/?