在Oracle数据库中,一个数据库可以有多个联机重做日志文件,它记录了数据库的变化。例如,当Oracle数据库产生异常时,导致对数据的改变没有及时写入到数据文件中。这时Oracle数据库就会根据联机重做日志文件中的信息来获得数据库的变化信息,并根据这些信息把这些改变写到数据文件中。换句话来说,联机重做日志文件中记录的重做日志可以用来进行数据库实例的恢复。
视频讲解如下:
在Oracle中可以通过下面的语句查看当前Oracle数据库中存在的联机重做日志文件和对应的日志组信息。
SQL> select member,group# from v$logfile; # 输出的信息如下: MEMBER GROUP# ------------------------------------------------ ---------- /u01/app/oracle/oradata/ORCL/redo03.log 3 /u01/app/oracle/oradata/ORCL/redo02.log 2 /u01/app/oracle/oradata/ORCL/redo01.log 1
注意:在Oracle数据库中,采用日志组的方式来管理联机重做日志。在默认情况下,Oracle数据库有3个重做日志组。Oracle推荐每一组中至少存在两个成员。
下图展示了Oracle数据库写入数据的过程。
视频讲解如下:
注意:从上图可以看出,当前客户端成功提交事务时,数据有可能还没有写到数据文件上。如果此时数据库实例发生了崩溃,写入的数据是会丢失的。当重新启动数据库实例时,Oracle会利用成功写入的重做日志来恢复实例在内存中的数据,这个过程叫做实例恢复。由Oracle数据库的SMON进程自动完成。