数据库的在线重做日志是介于重做缓存和离线重做日志之间的一个段,一般Oracle默认是50M+
数据库的重做日志缓存遇到三种情况,会把数据往联机重做日志中写入数据:
- 在事务提交的时候(COMMIT)
-
Redo Log Buffer 空间有1/3被写满
-
Redo Log Buffer 中有超过一兆字节的记录改变了
-
在DBWn写入数据文件之前
通俗来讲就是:
1,缓冲永远保存很少的记录,Undo 和 Redo Online log分别执行不同的职责
2,一个很长的事务,将不得不把数据分别写入Redo 和 Undo
3,事务Commit的时候,Undo和Redo Online log的时间戳(SCN) 将更新,无法回滚
4,这时一旦灾难发生,Redo Online Log是在线日志文件,系统会根据这个在线日志文件来重做,
5,假设没有灾难,那么Redo Online Log在被写完、后者手动切换日志文件之后,联机日志文件的内容会全部搬运到archive log存储的空间,成为归档日志
6,无论任何时候,想要数据库回到某个时刻,可能的几个办法包括:A、数据库闪回恢复,即由 flash recovery 所管理的空间,包含undo log 和 archive log 的存储,闪回机制会直接分析undo log 和 archive log,进行回滚重做、从而回到可以回到的那个时刻; B、利用RMAN + archive log可以回到某个时刻;C、利用全备+增备+ ( archive log)
一、当我们需要增加联机日志文件的大小时,是怎么考虑的?
联机日志文件默认不会很大, 有很多生产库也不会很大,但是平凡的 log switch 也会产生性能消耗,所以有必要根据数据库的繁忙情况,可以把logfile的大小设置成 20分钟左右,数据库DML会产生的日志大小,最好有3组、每组包含两个在不同位置上的日志文件
二、当我们需要增加联机日志文件的大小时,怎么做?
select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
1 1 4917 52428800 512 1 NO
CURRENT 73046017 27-DEC-12 2.8147E+14
2 1 4916 52428800 512 1 YES
ACTIVE 73042902 27-DEC-12 73046017 27-DEC-12
3 1 0 52428800 512 1 YES
ACTIVE 73040003 0
利用语句查出文件的出处
select * from v$logfile;
然后利用语句drop logfile,这个logfile当前不能是current 状态
alter database drop logfile group 2;
如果不能drop logfile,出现如下错误
ORA-01624: log 2 needed for crash recovery of instance OOA3CL1 (thread 1)
ORA-00312: online log 2 thread 1: '+DATA1/ooa3cl/redo02.log'
请利用下列语句清除所有logfile的状态,把重做日志的内容写入离线文件
alter system checkpoint
然后利用语句增加一个logfile 重新利用 group 2 和之前的文件,改变其大小
alter database add logfile group 2 '+FDA1/test1/redo02.log' size 1048576000 reuse;
注意,如果不想重用该日志文件,我们必须通过操作系统或者ASM客户端将文件删除~