oracle数据库:数据文件_笔记10
3.7重做日志文件
重做日志文件(redo log file)对于Oracle数据库至关重要。它们是数据库的事务日志。通常只用于恢复,不过也可以用于以下工作。
.系统崩溃后的实例恢复
.通过备份恢复数据文件之后恢复介质
.备用(standby)数据库处理
.输入到流中,这是一个重做日志挖掘过程,用于实现信息共享
重做日志文件的主要目的是,万一实例或介质失败,重做日志文件就能派上用场,或者可以作为一种维护备用数据库(standby database)的方法来完成故障恢复。如果数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恢复到掉电前的那个时刻。如果包含数据文件的磁盘驱动器出现了永久性故障,Oracle会使用归档重做日志以及在线重做日志,将磁盘驱动器的备份恢复到适当的时间点。另外,如果你“无意地”删除了一个表,或者删掉了一些重要的信息,而且提交了操作,则可以恢复一个备份,并让Oracle使用这些在线和归档重做日志文件将其恢复到意外发生前的那个时刻。
在Oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线重做日志文件。向表中插入一行时,插入的最终结果会写入重做日志。删除一行时,则会在重做日志中写入你删除了这一行这一事实。删除一个表时,删除的效果会写入重做日志。从表中删除的数据不会写入。不过,Oracle删除表时执行的递归SQL确实会生成redo。另外如果支持不同模式的补充日志(supplemental logging),还会把具体的DROP TABLE语句写入重做日志流。
有些操作可能会以尽量少生成redo的模式完成。例如,可以使用NOLOGGING属性创建一个索引。这说明,最初创建索引数据的操作不会记入日志,但是Oracle完成的所有递归SQL会写入日志。
3.7.1在线重做日志
每个Oracle数据库至少有两个在线重做日志文件组。每个重做日志组都包含一个或多个重做日志成员。这些组的单个重做日志文件成员之间实际上形成彼此真正的镜像。这些在线重做日志文件的大小是固定的,并以循环的方式使用。
从一个日志文件组切换到另一个日志文件组的动作称为日志切换(log switch)。重要的是注意到,如果数据库配置得不好,日志切换可能会导致临时性“暂停”。由于重做日志的目的是在失败时恢复事务,所以我们自己必须保证一点:在重用重做日志之前,失败时应该不需要重做日志文件的内容。如果Oracle不能肯定这一点,也就是说,它不清楚是否真的不需要日志文件的内容,就会暂时挂起数据库中的操作,确保将缓存中的数据安全地写入磁盘本身。一旦Oracle能肯定这一点,再恢复处理,并重用重做文件。
检查点(checkpointing)。要理解在线重做日志如何使用,就需要了解检查点,知道数据库缓冲区缓存如何工作,还要知道一个称为数据块写入器(data block writer,DBWn)的进程会做什么。
数据库缓冲区缓存(database buffer cache)就是临时存储数据库块的地方。这是Oracle SGA中的一个结构。读取块时,会存储在这个缓存中,这样以后就不必再物理地重新读取它们。缓冲区缓存首先是一个性能调优设备,其目的只是让非常慢的物理I/O过程看上去快一些。修改块(更新块上的一行)时,这些修改会在内存中完成,写至缓冲区缓存中的块。另外,会把重做这些修改所需的足够信息保存在重做日志缓冲区(redo log buffer)中,这是另一个SGA数据结构。提交(COMMIT)修改时,会使这些修改成为永久的。Oracle并不是访问SGA中修改的所有块,并把它们写到磁盘上。相反,它只是把重做日志缓冲区的内容写到在线重做日志中。只要修改的块还在缓冲区缓存中,而不在磁盘上,数据库失败时我们就会需要该在线重做日志的内容。如果提交过后,突然掉电,数据库缓冲区缓存就会彻底清空。如果发生这种情况,则只有重做日志文件中有修改记录。重启数据库时,Oracle实际上会重放我们的事务,再用同样的方式修改块,并提交。所以,只要修改的块被缓存而未写入磁盘,就不能重用重做日志文件。
在这里DBWn就能起作用了。这是Oracle的一个后台进程,负责在缓冲区缓存填满时请求空间,更重要的是,它会建立检查点。建立检查点就是把脏块从缓冲蔚蓝色缓存写至磁盘。Oracle会在后台为我们做这个工作。有很多情况都会导致建立检查点,最常见的事件就是重做日志切换。
在设置在线重做日志的大小和数目时,还有一些问题需要考虑:
.高峰负载(peak workload)
.大量用户修改相同的块
.平均恢复时间
3.7.2归档重做日志
Oracle数据库可以采用两种模式运行:ARCHIVELOG模式和NOARCHIVELOG模式。
如果系统不以ARCHIVELOG模式运行,那它根本就不能算是生产系统。未以ARCHIVELOG模式运行的数据库总有一天会丢失数据。
“在出现硬件或操作员错误之前,而且归档尚未受到影响,如果此时建立了备份,就能很好地恢复”。关键是,既然系统上的数据是有价值的,有什么理由不采用ARCHIVELOG模式呢?性能不能作为理由。适当配置归档只会增加极少的开销甚至根本不增加开销。由于这一点,再加上另外一条:如果一个系统会“丢失数据”,那它再快也是没有用的。
http://www.52ij.com/jishu/5154.htmloracle数据库:数据文件_笔记9
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5155.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
