9.1.3 如何对重做日志文件进行规划
在每一个重做日志组中,至少有一个重做日志文件,日志组中的重做日志文件叫做日志成员。重做日志组中的日志成员在数据库创建时已经确定,在数据库的运行过程中也可以添加新的日志成员。
重做日志对于数据库的恢复起着重要的作用。如果重做日志文件丢失或者损坏,那么在数据库发生故障时,可能无法对数据进行完全恢复。对于重做日志文件,应该采取特殊的措施来保证它的可用性。一般要求一个重做日志组中至少有两个日志成员,这些重做日志文件的内容、大小完全相同,它们互为镜像。LGWR后台进程将把重做日志同时写入日志组的所有日志成员。当其中一个日志成员丢失或损坏时,LGWR进程将被阻塞。数据库管理员可以利用其他完好的日志成员复制一个新的日志成员,数据库服务器则可继续正常运行。
为了防止磁盘发生故障,一般要求同一个日志组中的各个日志成员分别存储在不同的磁盘上,这样即使其中一个磁盘发生故障,其他磁盘上的日志成员的内容仍然是完好的。
图9.2表示日志成员的镜像情况。在图中有三个日志组,每个日志组有两个日志成员,它们分别存储在两个磁盘上。
需要注意的是,同一个日志组的日志成员大小完全相同,但不同日志组的日志成员可以有不同的大小,而且不同日志组的成员数目也可以不同。
图 9.2 日志成员的镜像
在数据库服务器运行的过程中,LGWR进程可能会遇到以下异常情况:
·某个重做日志组中的一个日志成员不可用。LWGR进程将忽略不可用的日志成员,把重做日志写入其他可用的日志成员。
·某个重做日志组正在被归档或者尚未归档。LGWR进程将等待该重做日志组被归档完成。·某个重做日志组中的所有日志成员都不可用。在数据库服务器进行日志切换时,该日志组对LGWR进程不可用,数据库实例将自动关闭。
·当前重做日志组中的所有日志成员突然都不可用。因为LGWR进程无法写重做日志,数据库实例将自动关闭。