--------重做日志文件介绍:
在oracle 数据库中,用户对数据库所做的变更操作产生的重做记录先写入重做日志缓冲区,最终由 LGWR 进程写入重做日志文件。当用户提交一个事务
时,与该事务相关的所有重做记录被 LGWR 进程写入重做日志文件,同生产生一个“系统变更号”,以标识该事务的重做记录。只有当某个事务所产生的全部重做
记录都写入重做日志文件后,oracle 才认为这个事务已经成功提交。
每个数据库至少需要两个重做日志文件,采用循环写的方式进行工作。这样就能保证,当一个重做日志文件在进行归档时,还有另外一个重做日志文件可用。
当一个重做日志文件被写满后,后台进程 LGWR 开始写入下一个重做日志文件,即日志切换,同时产生一个“日志序列号”,并将这个号码分配给即将开始使用的
重做日志文件。当所有的重做日志文件都被写满后,LGWR 进程再重新写第一个日志文件。
重做日志文件的工作过程如图:
重做日志文件的工作过程
为了保证 LGWR 进程的正常进行,通常采用重做日志文件组(GROUP) ,每个组中包含若干个完全相同的重做日志文件成员(MEMBER),这些成员文件相互镜像。
在数据库运行时,LGWR 进程同时向当前的联机重做日志文件组中的每个成员写信息。通常,将一组成员文件分散在不同的磁盘上,这样一个磁盘的损坏不会导致日志
文件中组中所有用成员的丢失,从而保证了数据库的正常运行。
如下图所示:
重做日志文件组
----------------查询重做日志文件信息:
可以查询数据字典视图 V$LOG 和 V$LOGFILE 获取重做日志文件信息。其中,V$LOG 包含了重做日志文件组的信息。
而 V$LOGFILE 包含了重做日志问价成员的信息。
《案例》
查询案例数据库所有的重做日志组及其状态信息。
SQL> select group# , sequence# , members , archived , status from V$LOG ;
---------------创建重做日志文件组及其成员:
1.创建重做日志文件组
为数据库创建重做日志文件组语句: alter database add LOGFILE GROUP
一个数据库中可以包含的重做日志文件组的最大数量是由控制文件中的 MAXLOGFILES 参数决定的。
《案例》
为案例数据库创建一个包括两个成员文件的重做日志文件组。
SQL> alter database add LOGFILE GROUP 4
(
'..........\a.LOG' ,
'..........\b.LOG' ,
) size 10M;
注意:(1)、分配给每个重做日志文件的初始空间至少为 4MB
(2)、如果没有使用 GROUP 子句指定组号,则系统会自动产生组号,为当前重做日志文件组的个数加1
2.创建重做日志文件成员
为数据库重做日志文件组添加成员文件: alter database add LOGFILE MEMBER '...............\..log' to group
一个重做日志文件组中可以拥有的最多成员文件数量是由控制文件中的 MAXLOGMEMBERS 参数决定的。
《案例》
为案例数据库的重做日志文件组 1、2 、3 分别添加成员文件
SQL> alter database add LOGFILE MEMBER
'.............\1B.LOG' to group 1 ,
'.............\2B.LOG' to group 2 ,
'.............\3B.LOG' to group 3 ;
注意:(1)、同一个重做日志文件组中的成员文件存储位置应尽量分散
(2)、不需要指定文件大小,新成员文件大小由组中已有成员大小决定
------------------重做日志文件切换:
当 LGWR 进程结束对当前重做日志文件组的写入操作,开始写入下一个重做日志文件组,称为发生一次 “日志切换” 。通常,只有当前的重做日志文件组
写满后才发生日志切换,但是可以执行 alter system switch logfile 命令手动强制进行日志切换。
例如,如果要修改、删除当前重做日志文件组 或 活动的重做日志文件组中的成员文件或整个文件组,则需要手动强制进行日志切换,将活动的重做日志文件组转换为
非活动的重做日志文件组。
《案例》
进行一次日志切换,查看各个重做日志文件组的状态。
SQL> alter system switch logfile;
-----------------修改重做日志文件的名称和位置:
可以修改处于 INACTIVE 状态的重做日志文件组中的成员文件的名称或位置。如果要修改的重做日志文件所在重做日志文件组不是处于 INACTIVE
状态,可以进行日志切换,使该重做日志文件处于 INACTIVE 状态。
修改重做日志文件的名称或位置时,首先在操作系统中进行重做日志文件名称或位置的修改,然后执行
alter database rename file '........' to '.......' 修改数据库的控制文件与数据字典中相应的重做日志文件信息。
《案例》
将数据库的重做日志文件 redo01.log 、 redo02.log 移动到目录 D:\ORADATA 目录中
SQL> host move D:\redo01.log D:\ORADATA\redo01.log (操作系统中移动文件)
SQL> host move D:\redo02.log D:\ORADATA\redo02.log (操作系统中移动文件)
SQL>alter database rename file
'D:\redo01.log ' ,
'D:\redo02.log '
to
' D:\ORADATA\redo01.log '
' D:\ORADATA\redo02.log ' ;
-----------------删除重做日志文件组及其成员:
1.删除重做日志文件成员:
如果要删除重做日志文件组中的某个成员文件,需要注意以下事项:
(1)、只能删除状态为 INACTIVE 或 UNUSED 的重做日志文件组中的成员;如果要删除状态为 CURRENT 的重做日志文件组中的成员,
则需要进行一次手动日志切换
(2)、如果数据库处于归档模式下,则在删除重做日志文件之前要保证该文件所在的重做日志文件组已经归档了
(3)、每个重做日志文件组中至少要有一个可用的成员文件,即 VALID 状态的成员文件。
如果要删除的重做日志文件是所在组中最后一个可用的成员文件,则无法删除。
删除重做日志文件组成员语句: alter database drop logfile member
《案例》
删除第4个重做日志文件组中的成员文件 RED04.LOG
SQL> alter database drop logfile member
'.......................\HU_MAN\RED04.LOG' ;
删除重做日志文件的操作并没有将重做日志文件从操作系统磁盘上删除,只是更新了数据库控制文件,从数据库结构中删除了该重做日志文件。
在删除重做日志文件之后,应该确认删除操作完成,然后再删除操作系统中对应的重做日志文件。
2. 删除重做日志文件组:
在某些情况下,可能需要删除某个重做日志文件组。如果删除某个重做日志文件组,则该组中的所有成员文件将被删除。如果要删除某个重做
组,则需要注意以下事项:
(1)、无论重做日志文件组中有多少个成员文件,一个数据库至少需要有两个重做日志文件组
(2)、如果重做日志文件处于归档模式下,则在删除重做日志文件组之前,必须确定该组已经被归档了
(3)、只能删除处于 INACTIVE 状态 或 UNUSED 状态的重做日志文件组,若要删除状态为 CURRENT 的重做日志文件,则需要做一次
手动日志切换
删除重做日志文件组的语句: alter database drop logfile group
《案例》
删除第4个重做日志文件组
SQL> alter database drop logfile group 4 ;
删除重做日志文件 组的操作并没有将重做日志文件组中的所有成员文件从操作系统上删除,只是更新了数据库控制文件,从数据库结构中删除了该
重做日志文件组。在删除重做日志文件组之后,应该确认删除操作成功完成后,然后再删除操作系统中对应的所有重做日志文件。