1.5 多元复用数据库文件
为尽量降低丢失控制文件或重做日志文件的可能性,数据库文件的多元复用(multiplexing)可减少或消除由于介质故障而造成的数据丢失问题。使用从Oracle 10g开始引入的ASM实例可在某种程度上使多元复用自动化。对于更注重预算的企业,可手动多元复用控制文件和重做日志文件。
1.5.1 自动存储管理
使用ASM(Automatic Storage Management,自动存储管理)是一种多元复用解决方案,即将数据文件、控制文件和重做日志文件分布在所有可用的磁盘上,从而自动布局这些文件。将新的磁盘添加到ASM群集时,数据库文件将自动重新分布到所有的磁盘卷,以优化性能。ASM群集的多元复用特性可最小化数据丢失的可能性,并且比将关键文件和备份放在不同物理驱动器上的手动方案更有效。
1.5.2 手动的多元复用
即使没有RAID或ASM解决方案,也仍可为关键数据库文件提供一些保护措施,方法是设置一些初始参数,并为控制文件、重做日志文件和归档的重做日志文件提供另外的位置。
1.控制文件
创建数据库时可立刻多元复用控制文件,也可在创建之后的任意时刻多元复用控制文件,这只需要很少几个步骤,即可手动将控制文件复制到多个目的地。最多可以多元复用控制文件的8个副本。
无论是在创建数据库时多元复用控制文件,还是在创建之后多元复用它们,CONTROL_ FILES的初始参数值都相同。
如果希望添加另一个多元复用位置,则需编辑初始参数文件,将另一个位置添加到CONTROL_FILES参数。如果使用SPFILE而非init.ora文件,可使用如下命令来改变CONTROL_FILES参数:
alter system set control_files = '/u01/oracle/whse2/ctrlwhse1.ctl, /u02/oracle/whse2/ctrlwhse2.ctl, /u03/oracle/whse2/ctrlwhse3.ctl' scope=spfile;
ALTER SYSTEM命令中SCOPE的其他可能值是MEMORY和BOTH。指定SCOPE为其中任何一个值都会返回错误,因为不能为运行的实例改变CONTROL_FILES参数,只有在下一次重新启动实例时才能改变。因此,只有SPFILE被改变。
无论哪种情况,下一步都是关闭数据库。将控制文件复制到由CONTROL_FILES指定的新目的地,并且重新启动数据库。通过查看一个数据字典视图,始终可以验证控制文件的名称和位置:
select value from v$spparameter where name='control_files';
该查询将返回控制文件的每个多元复用副本的一行。此外,视图V$CONTROLFILE包含控制文件的每个副本的一行,并包含相应的状态。
2.重做日志文件
将一组重做日志文件改变到重做日志文件组中,就可以多元复用重做日志文件。在默认的Oracle安装中,会创建3个重做日志文件。如1.4.2小节中介绍的,填满一个日志文件后,按顺序填充下一个日志文件。填满第3个日志文件后,重新使用第一个日志文件。为将这3个重做日志文件改变到一个组中,可添加一个或多个相同的文件,以伴随每个已有的重做日志文件。创建组后,将重做日志条目同时写入重做日志文件组。填满重做日志文件组时,开始将重做日志条目写入下一个组。图1-4显示了如何使用4个组来多元复用4个重做日志文件,每个组包含3个成员。
图1-4 多元复用的重做日志文件
将成员添加到重做日志组非常简单。在ALTER DATABASE命令中,指定新文件的名称以及将要添加到其中的组的名称即可。创建的新文件的大小与组中其他成员相同:
alter database add logfile member '/u05/oracle/dc2/log_3d.dbf' to group 3;
如果填满重做日志文件的速度快于归档它们的速度,则一种可行的解决方案是添加另一个重做日志组。下例显示如何将第5个重做日志组添加到图1-4中的重做日志组:
alter database add logfile group 5 ('/u02/oracle/dc2/log_3a.dbf', '/u03/oracle/dc2/log_3b.dbf', '/u04/oracle/dc2/log_3c.dbf') size 250m;
重做日志组的所有成员必须大小相同。然而,不同组之间的日志文件大小可以不同。此外,重做日志组可以有不同的成员数量。在前面的示例中,首先有4个重做日志组,然后添加另外一个成员到重做日志组3(共4个成员),并添加了具有3个成员的第5个重做日志组。
从Oracle 10g开始,可使用重做日志文件大小估计顾问(Redo Logfile Sizing Advisor)来帮助确定重做日志文件的最优尺寸,以避免过多的I/O活动或瓶颈。查看第8章可了解使用重做日志文件大小估计顾问的更多信息。
3.归档的重做日志文件
如果数据库处于ARCHIVELOG模式,则在重做日志开关循环中可以重用重做日志文件之前,Oracle会将其复制到指定的位置。