我的Oracle 9i学习日志(11)--重做日志文件及练习

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一、重做日志文件特征

    记录对数据所做的所有更改;提供恢复机制;可以划分成组;至少需要两个组(每个组至少一个成员)。
二、结构
 

联机重做日志文件组:
•  一组相同的联机重做日志文件副本称作联机重做日志组。
• 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 UNUSED
SQL> 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 > SHUTDOWN
2. 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 MOUNT
4. Rename the online redo log members using the ALTER DATABASE RENAME
FILE 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 files
Online 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, status
2 FROM v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS
--------- ---------- -------- --------- ---------
1 688 1048576 1 CURRENT
2 689 1048576 1 INACTIVE
2 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.rdo
STATUS  列的值可以为下列之一:
•  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 archiver
2 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.log
Log 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.
Display the number of online redo log file groups and members your database has.
Hint:  Query the  V$LOGFILE  dynamic performance view.
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
------------
ARCHIVELOG
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.rdo
Add member to Group 2:  log02b.rdo
Verify the result.
Hints
Execute the  ALTER DATABASE ADD LOGFILE MEMBER  command to add an
online redo log file member to each group.
Query the  V$LOGFILE  dynamic performance view to verify the result.
Add an online redo log file group with two members located on  u03  and  u04  using
the following naming conventions and verify the result.
Add Group 3:  log03a.rdo  and  log03b.rdo
Hints
Execute the  ALTER DATABASE ADD LOGFILE  command to create a new
group.
Query the  V$LOGFILE  dynamic performance view to display the name of the
new members of the new group.
Query the  V$LOG  dynamic performance view to display the number of online
redo log file groups and members.
Remove the online redo log file group created in step 4.
Hints
Use  ALTER SYSTEM SWITCH LOGFILE  if the log files are active. The number
of log switches required will vary. Note: Query the database to see which log file
is active then decide how many times you need to perform the  ALTER SYSTEM
SWITCH LOGFILE  command.
Execute the  ALTER DATABASE DROP LOGFILE GROUP  command to remove
the log group.
Query the  V$LOG  dynamic performance view to verify the result.
Remove the operating system files for the group.
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 two
new 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 switches
and change the group stage to inactive. The number of log switches required will
vary. Note: Query the database to see which log file is active, and then decide
how many times you should perform the  ALTER SYSTEM SWITCH LOGFILE
command.
Execute the  ALTER DATABASE DROP LOGFILE  command to remove the
unused groups.
Query the  V$LOG  dynamic performance view to verify the result.









本文转自 d185740815 51CTO博客,原文链接:http://blog.51cto.com/luotaoyang/286150,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
12天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
119 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
12天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
12天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
12天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
12天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
16天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
136 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
234 3
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
134 3
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1638 14
|
1月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
35 0

推荐镜像

更多
下一篇
无影云桌面