本节主要介绍重做日志文件组及成员的创建、删除等操作,以及怎样查看重做日志文件组及成员信息。
(1)查看重做日志文件信息查询
Oracle数据库的动态性能视图可以了解重做日志文件的相关信息,与此相关的动态性能视图包括以下两种。
①v log:记录与重做日志文件组相关的信息,该信息取自数据库的控制文件。v log视图中各字段名称及其说明见表5.3。
②v logfile:记录有关重做日志文件成员的信息,该视图中各字段名称及其说明见表5.4。
续表
例如,下面语句检索数据库的重做日志组的编号、各组状态,以及各组中的重做日志文件成员数量等信息。
检索结果说明,该数据库包含3组重做日志文件,每组各有一个日志成员,其中第3组是当前重做日志文件组。
下面的语句从v logfile视图中检索各组日志中的日志文件成员类型,以及它们的具体存储路径和文件名。
(2)管理重做日志文件
在调用CREATE DATABASE语句创建数据库时,其LOGFILE GROUP子句指出要创建的重做日志文件组及成员。在数据库创建之后,则可根据需要调用ALTER DATABASE语句添加或删除重做日志文件组,或者添加和删除各组内的重做日志文件成员。需要注意的是,无论添加、删除重做日志文件组还是重做日志成员,均需具有ALTER DATABASE系统权限。
1)规划重做日志需要考虑的因素
在规划Oracle数据库重做日志时,需要考虑以下几个因素。
①联机日志文件多路存储。重做日志文件的多路存储能够有效地保护重做日志,所以应尽可能采用多路存储方式保护重做日志文件。在实行多路存储时,最好把每组重做日志内的不同成员放置在不同的物理磁盘上,以避免单点故障导致重做日志文件的丢失。即使数据库服务器没有多个独立的硬盘,实行多路存储也有助于避免I/O错误、文件崩溃等原因导致的重做日志文件损坏。一组重做日志中可以创建的最多成员数量由数据库创建时CREATE DATABASE语句内的MAXLOGMEMBERS参数决定。数据库一旦创建,要提高该参数的上限,只能重新创建数据库或者控制文件。
②重做日志文件组数量。一个数据库实例究竟配置多少组重做日志文件合适?这个问题没有统一的答案。其最佳配置是在不妨碍LGWR写入重做日志的前提下越少越好。数据库实例当前配置的日志组数量是否满足LGWR写入的需要,这需要查看LGWR跟踪文件和数据库的警告日志文件,了解其中是否经常出现LGWR在写入时需要等待可用的重做日志组这种现象。每个数据库可以创建的最多重做日志组数量由CREATE DATABASE语句中的MAXLOGFILES参数决定。
③重做日志文件的大小。Oracle数据库限制重做日志文件的最小长度为4 MB。管理员在创建重做日志文件组时究竟采用多大的日志文件,主要应考虑归档时单个存储介质的容量。在实行重做日志文件多路存储时,每组重做日志文件内的所有成员文件的大小必须完全相同,但不同组内的成员可以具有不同的大小。
④重做日志文件的块大小。重做日志文件的块大小默认等于磁盘的物理扇区大小(通常等于512 B,一些新的大容量磁盘的扇区大小为4 KB)。大多数Oracle数据库平台能够检测硬盘的扇区大小,并自动创建与磁盘扇区大小相同的重做日志文件块。从Oracle DataBase 11.2版本开始,允许在CREATE DATABASE、ALTER DATABASE和CREATE CONTROLFILE中用BLOCKSIZE子句指定联机重做日志文件的块大小。其有效取值为512、1 024和4 096。
这里需要注意的是:不要把重做日志文件块和数据库块混为一谈。数据库块大小指一次读写数据文件的最小字节数,它可以为2 KB、4 KB、8 KB、16 KB、32 KB几种取值。
2)添加重做日志文件组
在创建数据库时至少已经创建了两组重做日志,在日后数据库运行过程中,如果需要可以使用ALTER DATABASE语句添加或删除重做日志文件组。例如,下面语句向orcl数据库添加一组重做日志文件,它由两个成员文件组成,日志文件大小为50 MB。在该语句中使用BLOCKSIZE子句指出这组重做日志文件的块大小为512 B,用REUSE选项说明当这些文件存在时覆盖它们。
在上面语句中,没有指出添加的重做日志文件组的编号,Oracle会自动为它们分配一个唯一的组编号。用户也可以在调用该语句中用GROUP子句指出组编号,例如:
在执行以上两条语句后,从v log视图中可以检索到添加的重做日志文件组信息:
3)添加重做日志文件成员
数据库运行过程中,在一些情况下需要添加重做日志文件成员。例如,现有重做日志文件成员被删除、损坏,或者需要增加重做日志文件的多路存储时。添加重做日志文件成员时,也需调用ALTER DATABASE语句。例如,下面语句向第一组重做日志添加两个日志成员文件。
需要注意的是,在创建重做日志文件组时,用SIZE子句指定重做日志文件的大小,而在添加重做日志文件成员时则不需要指定。因为每组重做日志内的所有成员文件的大小必须保持一致,所以添加的重做日志成员要与组内现有的重做日志文件大小相同,因此不需要再次指定。
4)移动、重命名重做日志文件成员
无论是移动还是重命名重做日志文件,它们的操作步骤基本相同。下面以移动重做日志文件为例介绍其具体的操作步骤,把前面添加到第1组中的E:\oracle\orcl\redo01⁃3.log文件移动到F盘的相同目录下:
第l步:关闭现有数据库。
第2步:用操作系统命令把需要移动的日志文件移动或复制到目标位置。需要重命名时,在这一步重命名文件。
第3步:把数据库启动到mount状态,但不打开它。
第4步:调用ALTER DATABASE语句,使用其RENAME FILE子句重命名重做日志文件。这一步实质上是修改控制文件,使其内容反映数据库结构的新变化:
第5步:打开数据库,以便执行正常操作。
再执行下面查询语句,即可看到本小节添加和移动后的重做日志文件信息。
5)删除重做日志文件成员
需要删除重做日志文件成员时,首先要保证它所在日志组的状态既不是CURRENT,也不是ACTIVE。否则,需要执行强制日志切换才能删除。其次,还要保证在这个日志文件删除后,数据库至少仍有两组日志文件,并且每组中至少各有一个日志文件成员。
例如,下面语句删除第1组中的一个重做日志成员。
调用上面语句删除重做日志成员时,它只能从数据库中删除该重做日志文件,也就是更新数据库的控制文件,删除其中记录的该重做日志文件信息。而并没有从操作系统的文件系统中删除该文件,要删除该文件,只能调用操作系统命令删除它。(www.daowen.com)
如果要删除的重做日志文件是重做日志文件组中的最后一个成员,则不能调用上面语句删除,而只能采用下面将要介绍的方法,删除重做日志文件成员及其所在组。
6)删除重做日志文件组
删除重做日志文件组时,要考虑以下限制。
①一个实例至少需要两个重做日志文件组。
②只有当重做日志文件组处于INACTIVE状态时才能删除。要删除当前日志组,需要执行强制日志切换,把它们切换为非当前重做日志组。
③数据库启用归档模式后,在删除之前,要保证该组日志已归档。日志组是否归档完成,可以从v log中查询其归档情况。
例如,下面语句删除前面添加的组编号为6的重做日志。
同样,在调用上面语句删除日志组时,只是从数据库的控制文件中删除相应的日志组信息,该组成员对应的操作系统文件仍保留不变,要删除它们,需要从操作系统中删除。
7)清空重做日志文件内容
数据库打开期间,重做日志文件可能出现损坏,这样就无法归档而最终导致数据库操作停止。在这种情况下,不用关闭数据库,只要执行ALTER DATABASE CLEAR LOGFILE语句重新初始化该文件,即可恢复数据库的操作。
例如,下面语句清空组编号为4的重做日志文件中的内容。
但是,如果损坏的重做日志文件还没有归档,则可以在该语句中使用UNARCHIVED关键字,指出不需要归档,否则会导致语句执行失败。例如:
这样在清空重做日志文件时避免Oracle对它们进行归档。
如果在清空重做日志文件时没有对它进行归档,执行后应立即对数据库做完整备份,否则会导致重做日志不连续,以后无法使用它们完整恢复数据库。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。