一、重做日志文件特征:
记录对数据所做的所有更改;提供恢复机制;可以划分成组;至少需要两个组(每个组至少一个成员)。二、结构 联机重做日志文件组:• 一组相同的联机重做日志文件副本称作联机重做日志组。• LGWR 后台进程向组内所有联机重做日志文件并发写入相同信息。• 为保证数据库的正常操作,Oracle 服务器最少需要两个联机重做日志文件组。联机重做日志文件成员:• 组内的每个联机重做日志文件称为成员。• 组内的每个成员都有相同的日志序列号和同样的大小。Oracle 服务器每次写入日志组时,都分配一个日志序列号以唯一地识别每个重做日志文件。当前日志序列号存储在控制文件和所有数据文件的头部内。联机重做日志文件组和成员的初始集是在数据库创建时创建的。下面的参数限制了联机重做日志文件的数量:• CREATE DATABASE 命令中的MAXLOGFILES 参数指定联机重做日志文件组的绝对最大数量。• MAXLOGFILES 的最大值和缺省值取决于您的操作系统。• CREATE DATABASE 命令所使用的MAXLOGMEMBERS 参数决定每个组的成员的最大数量。MAXLOGMEMBERS 的最大值和缺省值取决于您的操作系统。三、工作原理Oracle 服务器将对数据库所做的所有更改按顺序记录到重做日志缓冲区中。LGWR 进程把重做条目从重做日志缓冲区写入联机重做日志组的其中一个组,这个组叫做当前(CURRENT)联机重做日志组。LGWR 进程将在以下情况下写入:• 当提交事务处理时•每隔3秒钟• 当重做日志缓冲区被写满三分之一时• 当重做日志缓冲区内的已更改记录超过1 MB 时• 在DBWn 将数据库缓冲区高速缓存中修改的块写入数据文件之前重做日志文件是以循环方式使用的。每个重做日志文件组用一个日志序列号来标识,每次重新使用日志时就会覆盖原来的序列号。日志切换:LGWR 按顺序向联机重做日志文件写入重做信息。一旦当前联机重做日志文件组被写满,LGWR 就开始写入下一个组。这称为日志切换。当最后一个可用联机重做日志文件已满时,LGWR 将返回第一个联机重做日志文件组并开始重新写入,第一个重做日志文件的序号也将被覆盖,每发生一次日志切换序号加1。检查点:在检查点期间:• 大量的脏数据从数据缓冲区(对应正在经历检查点事件的日志)被DBWn 写入到数据文件中。•后台进程CKPT 更新控制文件以反映该进程已成功完成。如果检查点是由日志切换引起的,CKPT 还会更新数据文件的头部信息。可以针对数据库中的所有数据文件执行或者只针对特定数据文件执行检查点操作。例如,检查点可发生在下面情况中:• 每次日志切换时• 当已通过正常、事务处理或者立即选项关闭例程时• 通过设置初始化参数FAST_START_MTTR_TARGET (参数值为数字,代表多少秒执行一次)强制执行时• 数据库管理员通过手动方式请求时• ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] 命令导致对特定数据文件执行检查点操作时如果初始化参数LOG_CHECKPOINTS_TO_ALERT 设置为TRUE,则有关每个检查点的信息都记录在alert_SID.log 文件内。该参数缺省值为FALSE,表示不记录检查点。如果发生switch log,在对LGWR写log file之前要检查这个log file里原来的条目对应的数据是否写入数据文件(即checkpoint是否完成),并且检查原来的条目是否归档,如果没有就要等待完成。所以如果LGWR 跟踪文件或警报文件中的消息表明LGWR 经常不得不因为检查点操作尚未完成或者组尚未归档而等待,您就需要添加组。 四、强制执行日志切换和检查点SQL> select group#, sequence#, members, status from v$log; GROUP# SEQUENCE# MEMBERS STATUS---------- ---------- ---------- ---------------- 1 8 1 INACTIVE 2 9 1 CURRENT 3 7 1 INACTIVE SQL> alter system switch logfile; System altered. SQL> select group#, sequence#, members, status from v$log; GROUP# SEQUENCE# MEMBERS STATUS---------- ---------- ---------- ---------------- 1 8 1 INACTIVE 2 9 1 ACTIVE 3 10 1 CURRENT SQL> alter system checkpoint; System altered. SQL> select group#, sequence#, members, status from v$log; GROUP# SEQUENCE# MEMBERS STATUS---------- ---------- ---------- ---------------- 1 8 1 INACTIVE 2 9 1 INACTIVE 3 10 1 CURRENT 注意:在做以下这些操作时建议先备份数据库,完成操作后立刻备份control file。请不要将log file置于不对称状态(即每组的成员的数量和大小不相等)。五、添加联机重做日志文件组SQL> alter database add logfile group 4 2 ('/u01/oradata/lty/redo04a.rd0', 3 '/u01/oradata/lty/redo04b.rd0') 4 size 50m;SQL> select group#, sequence#, status from v$log; GROUP# SEQUENCE# STATUS---------- ---------- ---------------- 1 8 INACTIVE 2 9 INACTIVE 3 10 CURRENT 4 0 UNUSEDSQL> alter system switch logfile; System altered. SQL> select group#, sequence#, status from v$log; GROUP# SEQUENCE# STATUS---------- ---------- ---------------- 1 8 INACTIVE 2 9 INACTIVE 3 10 ACTIVE 4 11 CURRENT六、添加联机重做日志文件成员SQL> alter database add logfile member 2 '/u01/oradata/lty/redo01a.log' to group 1, 3 '/u01/oradata/lty/redo02a.log' to group 2, 4 '/u01/oradata/lty/redo03a.log' to group 3;SQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ------------------------------ 3 /u01/oradata/lty/redo03.log 2 /u01/oradata/lty/redo02.log 1 STALE /u01/oradata/lty/redo01.log 4 /u01/oradata/lty/redo04a.rd0 4 /u01/oradata/lty/redo04b.rd0 1 INVALID /u01/oradata/lty/redo01a.log 2 INVALID /u01/oradata/lty/redo02a.log 3 INVALID /u01/oradata/lty/redo03a.log注意:如果指定文件已经存在,则大小必须与指定大小一致,并且须指定REUSE选项。如:SQL> alter database add logfile member 2 '/u01/oradata/lty/redo02a.log' reuse 3 to group 2;七、删除联机重做日志文件组SQL> alter database drop logfile group 4; Database altered. SQL> select group#, sequence#, status from v$log; GROUP# SEQUENCE# STATUS---------- ---------- ---------------- 1 12 CURRENT 2 9 INACTIVE 3 10 INACTIVE SQL> select group#,status,member from v$logfile; SQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ------------------------------ 3 /u01/oradata/lty/redo03.log 2 /u01/oradata/lty/redo02.log 1 /u01/oradata/lty/redo01.log 1 /u01/oradata/lty/redo01a.log 2 INVALID /u01/oradata/lty/redo02a.log 3 INVALID /u01/oradata/lty/redo03a.log 6 rows selected.$ls –l /u01/oradata/lty-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:52 redo01a.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:52 redo01.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:25 redo02a.log-rw-r----- 1 oracle oinstall 104858112 Mar 16 20:08 redo02.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:26 redo03a.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 02:47 redo03.log-rw-r----- 1 oracle oinstall 52429312 Mar 17 03:48 redo04a.rd0-rw-r----- 1 oracle oinstall 52429312 Mar 17 03:48 redo04b.rd0注意:至少保留两组重做日志文件;处于current或active状态时的日志文件组不能从数据库被移除;从数据库移除以后的online redo log file继续留在磁盘上,需操作系统将其删除。八、删除联机重做日志文件成员SQL> alter database drop logfile member 2 '/u01/oradata/lty/redo02a.log'; 3 ‘… …’ #可同时删除多个。 Database altered. SQL> select group#,status,member from v$logfile; GROUP# STATUS MEMBER---------- ------- ------------------------------ 3 /u01/oradata/lty/redo03.log 2 /u01/oradata/lty/redo02.log 1 /u01/oradata/lty/redo01.log 1 /u01/oradata/lty/redo01a.log 3 INVALID /u01/oradata/lty/redo03a.log注意:不能删除组中的最后一个成员;处于current或active状态时的日志文件组不能删除其中的成员;在archive模式下,未归档的log file不呢个删除其组成员;删除联机重做日志文件成员时,如果没有使用OMF 功能,则不会删除操作系统文件。九、重定位或重命名联机重做日志文件将log file group3的成员/u01/oradata/lty/redo03a.log改为/u01/oradata/lty/log/redo03a.rdo。方法1:步骤1. Shut down the database.SQL > SHUTDOWN2. Copy or move the online redo log files to the new location.3. Start up the database and mount, but do not open it.SQL > STARTUP MOUNT4. Rename the online redo log members using the ALTER DATABASE RENAMEFILE command.SQL> alter database rename file 2 '/u01/oradata/lty/redo03a.log' 3 to 4 '/u01/oradata/lty/log/redo03a.rdo';5. Open the database for normal operation.SQL> ALTER DATABASE OPEN;方法2:新增一个组,然后删除一个组。步骤1:SQL> alter database drop logfile group 3; 步骤2:删除group3的文件。 步骤3:SQL> alter database add logfile group 3 2 ('/u01/oradata/lty/redo03.log', 3 '/u01/oradata/lty/log/redo03a.rdo') 4 size 100m;十、清理online redo log filesOnline redo log files可能会在数据库运行过程中损坏,而在log file只有两组或损坏的文件处于current状态,不可能用drop命令删除。在这种情况下,可以用下面的命令从新初始化log files:ALTER DATABASE CLEAR LOGFILE GROUP 2;另外,加UNARCHIVED关键字可以避免归档损坏的log files:ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;注意:从新初始化的log file中的条目将丢失,也就意味着这些丢失的条目所对应的数据库的改变将不可恢复,日志文件将记录从哪里将不可恢复的信息。十一、获取组和成员的信息V$LOG 视图:下面的查询返回控制文件中关于联机重做日志文件的信息:SQL> SELECT group#, sequence#, bytes, members, status2 FROM v$log;GROUP# SEQUENCE# BYTES MEMBERS STATUS--------- ---------- -------- --------- ---------1 688 1048576 1 CURRENT2 689 1048576 1 INACTIVE2 rows selected.下面的项是STATUS 列的常见值:• UNUSED:表示从未对联机重做日志文件组进行写入。这是刚添加的联机重做日志文件的状态。• CURRENT:表示当前的联机重做日志文件组。这说明该联机重做日志文件组是活动的。• ACTIVE:表示联机重做日志文件组是活动的,但是并非当前联机重做日志文件组。崩溃恢复需要该状态。它可用于块恢复。它可能已归档,也可能未归档。• CLEARING:表示在执行ALTER DATABASE CLEAR LOGFILE 命令后正在将该日志重建为一个空日志。日志清除后,其状态更改为UNUSED。• CLEARING_CURRENT:表示正在清除当前日志文件中的已关闭线程。如果切换时发生某些故障,如写入新日志标头时发生了输入/输出(I/O) 错误,则日志可能处于此状态。• INACTIVE:表示例程恢复不再需要联机重做文件日志组。它可能已归档,也可能未归档。V$LOGFILE 视图:若要获取组内所有成员的名称,请查询V$LOGFILE 视图。SQL> SELECT member FROM V$LOGFILE;MEMBER-------------------------------------/u01/home/db03/ORADATA/u03/log02a.rdo/u01/home/db03/ORADATA/u03/log01a.rdoSTATUS 列的值可以为下列之一:• INVALID:表明该文件不可访问• STALE:表示文件内容不完全• DELETED:表明该文件已不再使用• 空白表明文件正在使用中十一、归档的重做日志文件缺省情况下,数据库是在NOARCHIVELOG 模式下创建的。归档联机重做日志文件有两种方法:手动、自动(建议采用的方法)。LOG_ARCHIVE_START 初始化参数表明例程启动时,使用手动还是自动归档。• TRUE:TRUE 表示归档是自动的。ARCn 将在每次日志切换时开始将已满的日志组归档。• FALSE:FALSE 是缺省值,表示DBA 将手动归档已满的重做日志文件。每次归档联机重做日志文件时,DBA 必须手动执行一条命令。可以对所有或特定的联机重做日志文件进行手动归档。成功归档后: 将在控制文件中加入一个条目, 记录:归档日志名、日志序列号以及高和低系统更改号(SCN)在以下操作完成前,不能再使用已满的重做日志文件:•执行检查点操作•ARCn 将文件归档Archive redo log files可以进行多元备份,由DBA 维护。有关归档日志的信息可从V$INSTANCE 获取。SQL> SELECT archiver2 FROM v$instance;ARCHIVE---------STOPPED 所遇到的问题描述:SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER---------- ------- ------- ------------------------------ 3 ONLINE /u01/oradata/lty/redo03.log 2 ONLINE /u01/oradata/lty/redo02.log 1 ONLINE /u01/oradata/lty/redo01.log 1 ONLINE /u01/oradata/lty/redo01a.log 3 INVALID ONLINE /u01/oradata/lty/redo03a.logLog file group 3有一个成员文件不能用,在执行SQL> alter system switch logfile;将第三组切换到current后这个文件状态恢复正常。练习:1 a List the number and location of existing log files.Hint: Query the V$LOGFILE dynamic performance view.b Display the number of online redo log file groups and members your database has.Hint: Query the V$LOGFILE dynamic performance view.2 In which database mode is your database configured? Is archiving enabled?Hints- Query the V$DATABASE dynamic performance view.- Query the V$INSTANCE dynamic performance view.解析:SQL> select log_mode from v$database;LOG_MODE------------ARCHIVELOG3 Add an online redo log file member to each group in your database located on u04,using the following naming conventions:Add member to Group 1: log01b.rdoAdd member to Group 2: log02b.rdoVerify the result.Hints- Execute the ALTER DATABASE ADD LOGFILE MEMBER command to add anonline redo log file member to each group.- Query the V$LOGFILE dynamic performance view to verify the result.4 Add an online redo log file group with two members located on u03 and u04 usingthe following naming conventions and verify the result.Add Group 3: log03a.rdo and log03b.rdoHints- Execute the ALTER DATABASE ADD LOGFILE command to create a newgroup.- Query the V$LOGFILE dynamic performance view to display the name of thenew members of the new group.- Query the V$LOG dynamic performance view to display the number of onlineredo log file groups and members.5 Remove the online redo log file group created in step 4.Hints- Use ALTER SYSTEM SWITCH LOGFILE if the log files are active. The numberof log switches required will vary. Note: Query the database to see which log fileis active then decide how many times you need to perform the ALTER SYSTEMSWITCH LOGFILE command.- Execute the ALTER DATABASE DROP LOGFILE GROUP command to removethe log group.- Query the V$LOG dynamic performance view to verify the result.- Remove the operating system files for the group.6 Resize all online redo log files to 1024 KB.Hints- You cannot resize log files, therefore, add new logs and drop the old.- Execute the ALTER DATABASE ADD LOGFILE GROUP command to add twonew groups with the size 1024 KB.- Query the V$LOG dynamic performance view to check the active group.- Execute the ALTER SYSTEM SWITCH LOGFILE command to force log switchesand change the group stage to inactive. The number of log switches required willvary. Note: Query the database to see which log file is active, and then decidehow many times you should perform the ALTER SYSTEM SWITCH LOGFILEcommand.- Execute the ALTER DATABASE DROP LOGFILE command to remove theunused groups.- Query the V$LOG dynamic performance view to verify the result.本文出自 “OPOPOP” 博客,请务必保留此出处http://luotaoyang.blog.51cto.com/545649/286150