为什么Oracle数据库在数据库发生小的变化时每天都会生成大量的归档日志?

我目前在RHEL5上使用Oracle数据库11g。 我的数据库每天都会生成大量的归档日志,即使对数据库进行了less量更改(每天大约有500个事务)。 我也检查我的数据文件(用户表空间)的大小; 它的大小每天增加大约20MB,但归档日志每天产生5GB到10GB。

谁能告诉我是什么原因造成这个问题? 有什么解决scheme来检查为什么它会生成更多的存档? 我怎样才能减less它?

最好的祝福,

Sarith

可能值得查看文件上的时间戳,看它是否均匀分布,或者是否一次生成一堆(可能与某些批处理活动相对应)。

像下面这样的查询将显示当前生成重做的会话。

select s.sid, n.name, s.value, sn.username, sn.program, sn.type, sn.module from v$sesstat s join v$statname n on n.statistic# = s.statistic# join v$session sn on sn.sid = s.sid where name like '%redo entries%' order by value desc; 

如果您获得AWR许可,则可以查看历史logging表。

数据库的总大小是多less? 我会怀疑一些大的表格被截断,并且每天重新载入非常相似的数据

正如另一个线程所build议的那样,您可以使用LogMiner来发现logging的事务:

http://www.oracle.com/technology/oramag/oracle/05-jul/o45dba.html

UPDATE语句不一定会改变表或行的大小,但必须以重做方式捕获,这是驱动存档日志大小的原因。

未提交的事务 – 回滚的事务 – 不会对数据库进行永久更改,但仍会生成重做。

引起索引更新的表DML活动(应用程序是否执行了大量的DELETEINSERT ?)也会导致索引更新,就像UPDATE索引列的UPDATE语句一样。

简而言之,衡量存档日志大小是衡量变化活动的一个指标 – 增长是一个不同的,往往不相关的指标。 你可能想要做的就是查询ALL_TAB_MODIFICATIONS以显示自从上次分析以来,表的实际上是多么忙碌,就像在10g +中一样,所有表都自动监视DML活动。

物化视图刷新可以产生很多重做。 只是一个想法。

这个问题的一个简单的解决scheme是

1)在Oracle中设置块更改跟踪以加速增量备份
http://download.oracle.com/docs/cd/B28359_01/backup.111/b28270/rcmbckba.htm#BRADV8125

2)运行DB和archivelogs的增量备份级别1(例如每天2次),并在RMAN脚本末尾添加下一行:

 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE -2'; 

如果RMAN显着降低数据库的查询运行速度,则可以将BACKUP DATABASEstring添加到以下关键字:

 DURATION 1:00 PARTIAL MINIMIZE LOAD 

哪里,1点 – 时间1小时应该备份。