所有数据库高速缓存区中已经提交的数据都会被写入重做日志缓存区中,然后被LGWR后台进程写入重做日志文件中。oracle服务器能保证所有被提交的数据都会被写入重做日志文件中。一旦数据库崩溃就可以利用重做日志文件实现数据库的完全恢复。引入重做日志文件的目的就是为了实现数据库的恢复。
1、每个重做日志文件组的成员中存储的内容时完全相同的,在同一时刻LGWR只能往一个重做日志文件组中写入数据,然后将相同的数据复制到同组的其他成员文件中。要保证oracle服务器可以正常运行至少要存在两个重做日志组
2、oracle引入重做日志归档的结构来实现在重做日志组切换时保证前面写入的数据不被后续的写入信息覆盖。oracle服务器保证在归档写进程没有将重做日志文件中的信息写入归档日志文件之前,LGWR不能再写这组重做日志文件。
3、重做日志文件是联机文件,oracle服务器在运行期间需要管理他而归档日志文件是脱机文件oracle服务器在运行期间时不需要管理他们的。oracle利用把重做日志分组和引入归档日志的方式在数据库的效率和数据库的可恢复性之间进行了巧妙的折衷。
4、在生产库上一般每个重做日志文件组中都会有至少三个成员。在oracle运行时只有在当前LGWR进程正在写入的组中的所有的重做日志文件成员都被损坏时oracle服务器才会关闭,只要不是LGWR进程正在写入的重做日志组,即使该组中的所有成员都被损坏oracle服务器也不会关闭,只有等到切换到该组时oracle服务器才会关闭。oracle会将成员的损坏信息写入报警文件中,所以dba要经常的查看报警文件提前修复和维护重做日志成员文件。
5、强制性的产生重做日志切换的命令是:alter system switch logfile
强制性产生检查点的命令是:alter system checkpoint
也可以通过设置参数FAST_START_MTTR_TARGET=900来强制产生检查点意思是:实例恢复的时间不超过900秒
6、要获得重做日志的信息可以通过两个数据字典v$log、v$logfile
v$log字典中的状态status字段的取值含义如下:
inactive:表示数据库实例的恢复已经不再需要这组联机重做日志组了
active:表示这组联机重做日志组是活动的但是不是当前的,在实例恢复时需要这组重做日志组。如这组重做日志组正在归档。
current:表示这组联机重做日志组是当前组LGWR进程正在写入该重做日志组
unused:表示oracle服务器从来没有写过该重做日志文件组,这是重做日志文件刚被添加到数据库中的状态。
v$logfile字典中的状态status字段的取值含义如下:
空白:表示该文件正在使用
stale:表示该文件中的内容是不完全的
invalid:表示该文件是不可以被访问的
deleted:表示该文件已不再有用了
原文:http://www.cnblogs.com/moonfans/p/3793543.html