前言:
Oracle三大文件:控制文件、数据文件、redo文件,控制文件很小,数据和redolog很大,特别是数据文件。20-30G都是小数据库,大的几十个T
做DBA一个很重要的工作就是可以恢复数据,
一切文件都可以丢弃,就二个文件不能丢,就是redolog和数据文件
一、重做日志文件特征
记录对数据所做的所有更改;提供恢复机制;可以划分成组;数据库和普通文件系统不同,至少需要两个组(每个组至少一个成员)。
二、结构
结构1)写内容的原理:写满第一组,写第二组,是一个循环的过程。
2)联机重做日志文件组:
一组相同的联机重做日志文件副本称作联机重做日志组。
LGWR后台进程向组内所有联机重做日志文件并发写入相同信息。
为保证数据库的正常操作,Oracle服务器最少需要两个联机重做日志文件组。
3)联机重做日志文件成员:
组内的每个联机重做日志文件称为成员。
组内的每个成员都有相同的日志序列号和同样的大小。Oracle服务器每次写入日志组时,都分配一个日志序列号以唯一地识别每个重做日志文件。当前日志序列号存储在控制文件和所有数据文件的头部内。
联机重做日志文件组和成员的初始集是在数据库创建时创建的。
4)下面的参数限制了联机重做日志文件的数量:
CREATEDATABASE命令中的MAXLOGFILES参数指定联机重做日志文件组的绝对最大数量。
MAXLOGFILES的最大值和缺省值取决于您的操作系统。
CREATEDATABASE命令所使用的MAXLOGMEMBERS参数决定每个组的成员的最大数量。MAXLOGMEMBERS的最大值和缺省值取决于您的操作系统。
三、工作原理
Oracle服务器将对数据库所做的所有更改按顺序记录到重做日志缓冲区中。LGWR进程把重做条目从重做日志缓冲区写入联机重做日志组的其中一个组,这个组叫做当前(CURRENT)联机重做日志组。
1)LGWR进程将在以下情况下写入:
当提交事务处理时
每隔3秒钟
当重做日志缓冲区被写满三分之一时
当重做日志缓冲区内的已更改记录超过1MB时
在DBWn将数据库缓冲区高速缓存中修改的块写入数据文件之前
2)重做日志文件是以循环方式使用的。每个重做日志文件组用一个日志序列号来标识,每次重新使用日志时就会覆盖原来的序列号。
3)日志切换:
LGWR按顺序向联机重做日志文件写入重做信息。一旦当前联机重做日志文件组被写满,LGWR就开始写入下一个组。这称为日志切换。
当最后一个可用联机重做日志文件已满时,LGWR将返回第一个联机重做日志文件组并开始重新写入,第一个重做日志文件的序号也将被覆盖,每发生一次日志切换序号加1。
4)检查点:
在检查点期间:
大量的脏数据从数据缓冲区(对应正在经历检查点事件的日志)被DBWn写入到数据文件中。
后台进程CKPT更新控制文件以反映该进程已成功完成。如果检查点是由日志切换引起的,CKPT还会更新数据文件的头部信息。
可以针对数据库中的所有数据文件执行或者只针对特定数据文件执行检查点操作。例如,检查点可发生在下面情况中:
每次日志切换时
当已通过正常、事务处理或者立即选项关闭例程时
通过设置初始化参数FAST_START_MTTR_TARGET(参数值为数字,代表多少秒执行一次)强制执行时
数据库管理员通过手动方式请求时
ALTERTABLESPACE[OFFLINENORMAL
READONLY
BEGINBACKUP]命令导致对特定数据文件执行检查点操作时
如果初始化参数LOG_CHECKPOINTS_TO_ALERT设置为TRUE,则有关每个检查点的信息都记录在alert_SID.log文件内。该参数缺省值为FALSE,表示不记录检查点。
如果发生switchlog,在对LGWR写logfile之前要检查这个logfile里原来的条目对应的数据是否写入数据文件(即checkpoint是否完成),并且检查原来的条目是否归档,如果没有就要等待完成。所以如果LGWR跟踪文件或警报文件中的消息表明LGWR经常不得不因为检查点操作尚未完成或者组尚未归档而等待,您就需要添加组。
四、实验:强制执行日志切换和检查点
注意:在做以下这些操作时建议先备份数据库,完成操作后立刻备份controlfile。请不要将logfile置于不对称状态(即每组的成员的数量和大小不相等)。