Oracle 11g 管理重做日志文件
重做日志也称联机重做日志。引入重做日志的目的是数据恢复。在数据库运行过程中,用户更改的数据会暂时存放在数据库的高速缓冲区中。为了提高写数据的速度,并不是一旦有数据变化,就把变化的数据写到数据文件中。频繁的读写磁盘文件会使数据库系统效率降低,所以要等到数据库高速缓冲区中的数据达到一定的量或者满足一定的条件时,DBWR进程才会将变化了的数据写到数据文件中。这种情况下如果在DBWR把变化了的更改写到数据文件之前发生了宕机,那么数据高速缓冲区中的数据就会全部丢失。如果在数据库重新启动后无法恢复这部分用户更改的数据,显然是不可以的。
重做日志就是把变化了数据首先保存起来,其中LGWR进程负责把用户更改的数据写到重做日志文件中,这样数据库启动时,数据库系统从重做日志文件中读取这些变化了的数据,将用户更改的数据提交到数据库中,写入数据文件。 oracle规定每个数据库至少有两个日志组,每组至少包含一个或多个日志成员。oracle循环的使用重做日志组,当一个重做日志组写满后进行日志切换,切换到它可以找到的其他重做日志组。使用新的重做日志组之前,DBWR进程需要将所有的数据更改写入到数据文件中。如果数据库处于归档模式下,当发生日志切换时,归档进程(ARCH)会把当前已满的重做日志文件中的数据复制到归档日志中。 设计成多个日志成员的目的是在日志组内某个日志文件损坏后及时提供备份,所以同一组的日志成员一般内容信息相同,但是存放位置不同。 读取重做日志文件信息数据字典视图V$log记录当前数据库的日志组序号,日志序列号,每个日志文件大小,每个日志组的成员数量,以及日志组的当前状态。 使用V$LOG查看重做日志信息 输出结果有三个日志组,每个日志组分别有一个日志文件。日志组2为当前正在使用的重做日志组,称为当前日组,当前日志文件还没有归档,其他非活动重做日志文件已经归档。 数据字典V$LOGFILE记录了当前日志组号,该日志组的状态、类型和日志组成员信息。 使用V$LOGFILE查看重做日志组信息 其中,status参数的含义如下: 空白:此文件正在使用。 stale:该文件内容是不完整的 invalid:该文件不可以被访问,如刚建立 deleted:该文件已不再有用 根据上面输出结果可以知道,数据库有3个重做日志组,每个日志组有1个重做日志文件。 重做日志组及其成员管理创建重做日志组: 一个oracle数据库日志组太少,可能导致日志文件切换频繁,影响系统性能,所以有时需要增加新的日志组。如果日志组内只有一个日志成员,为避免损坏则需要增加新的日志成员。 使用v$log查看重做日志信息 使用v$logfile查看重做日志组信息 创建重做日志组的方法: 删除重做日志组 添加删除重做日志文件 会发现新添加的日志文件redo33.log是无效状态,三个日志组的日志成员还没有写满,所以redo33.log是无效状态,只要做两次强制日志切换就可以发现是ONLINE状态了 删除重做日志文件 到操作系统日志文件存放目录上查看是否还存在redo33.log 查看重做日志信息,group3是当前日志组 删除日志组3中的日志文件redo33.log,会发现当前日志组中的日志文件是没有办法删除的 强制切换日志后,就可以删除新添加的日志文件了。 删除重做日志文件的限制条件如下 ? 不能删除当前组的成员,若要删除则先执行强制性切换重做日志的命令:alter system switch logfile ? 活动日志成员不可以删除 ? 没有归档的日志成员不可删除 ? 当前日志组中只有一个成员是也不能删除 日志组切换和检查点事件日志切换就是停止写当前日志组,转向另一个新的日志组。系统可以自动切换,也可以手动切换。当发生日志切换时,系统会在后台完成检查点操作,以减少实例的恢复时间。 检查点是一个事件,用于减少实例恢复的时间。当检查点发生时,它会出发DBWR进程,把数据高速缓冲区中变化了的数据写入数据文件,同时检查点进程更新控制文件和数据文件头部,保证数据的一致性。检查点其实是一个后台进程,用来保证所有修改过的数据库缓冲区的数据写入数据文件。 检查点事件越频繁,则一旦数据库发生故障,需要数据恢复的重做日志中的数据就越少(因为在恢复时,就不必检查恢复检查点之前的重做日志中的数据),所以就减少实例的恢复时间。 强制日志切换并强制产生检查点事件。 强制日志切换 强制产生检查点事件 如果对此文有什么问题的话,请加下面微信一起探讨 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |