我目前在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活动(应用程序是否执行了大量的DELETE和INSERT ?)也会导致索引更新,就像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小时应该备份。