online redo log的日常管理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 前言:        Oracle online redo log是Oracle数据库中核心文件之一。在数据库操作中,只要有任何的数据块变化,都会生成相应的redo entry。

前言:

       Oracle online redo logOracle数据库中核心文件之一。在数据库操作中,只要有任何的数据块变化,都会生成相应的redo entry保证所有的记录先写入redo log后才能写入到数据文件;

 说明:

          v$log是进行数据库维护的一个重要视图,该视图作为dba管理需要了解的必备知识;

SQL> select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS                           STATUS

---------- ---------- ---------- ---------- ------------------------  ------------------

         1                    217                52428800            2                            CURRENT

         2                    215                 52428800           2                           INACTIVE

         3                     216                 52428800          2                            INACTIVE

   

相应的参数解读:

1Redo Log GroupRedo Log Group Member

          Redo Log在数据库中的作用主要在于进行实例恢复(Instance Recovery)。当数据库中一个事务提交commit的时候,由server process修改的数据块是不会直接写回到数据文件里面的。commit动作是会引发lgwr进程将事务生成的redo log写入到online redo log file。这样,形成日志在先的策略。

        如果此时发生数据库突然的停机,如断电、事故,在内存中的数据块是会丢失的。此时,文件的事务编号与日志的进程是不一致的。在服务器启动的open阶段,Oracle会根据online redo log的记录,从最后一个检查点checkpoint开始,进行数据库事务重演。所以,online redo log对数据库的事务一致性和数据恢复是极其重要的。

          Online Redo Log Group是一系列完全相同的online redo log file的集合。在一个数据库中,至少要有两个redo log group交替进行redo log写入操作;

    redo group member:由于redo log的重要性,因此在实际的生存环境中一般都进行冗余设置(跟控制文件的冗余作用是一致的)。在每个redo log group中,都有一个或者多个完全相同的log file。在一个组内,log file完全相同,一个写入日志动作要在组内所有的文件上写入成功之后,才算写入完成。所以在生产环境中一般的MEMBERS都设置为2;

 

2、status表示当前日志的所处状态,常见的有activecurrentinactiveunused

下面详细介绍一下几个状态的含义:

 ?  Current:表示当前正在进行写入的日志组,也是最新的日志组;

?  Active:当一个事务完成commit之后,redo entry写入到了日志文件。并且这个日志已经不是当前current,但是对应的数据块data block还没有从buffer cache中写入到文件中。此时,日志组状态为active。处在active状态的日志组,是不能够被覆盖和删除的;

?  Inactive:日志并不是当前正在读写的日志,并且对应的事务数据块都已经写回到数据文件中;

?  Unused:表示新创建的online日志组,还没有使用过;

   

常用的Redo Log调整操作:

   

Oracle安装的时候,我们是可以调整Redo Log的大小和组数。同时,在系统运行过程中,我们也可以对现有的日志进行调整。下面是常见的集中类型的redo log操作实例。我们选择Oracle 11R2进行试验。

   

   

SQL> select * from v$version;

   

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE        11.2.0.1.0         Production

   

   

注意:进行redo log的调整,一定要选择系统相对空闲的时候,避免业务高峰期。特别是生产环境尤其重要。

   

1、查看当前redo情况

 通过视图v$logv$logfile可以分别查看当前的日志组和文件情况。

 SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 CURRENT

         3        216   52428800          2 INACTIVE

   

SQL> select * from v$logfile;

   

    GROUP# STATUS  TYPE    MEMBER                                                                           IS_RECOVERY_DEST_FILE

---------- ------- ------- -------------------------------------------------------------------------------- ---------------------

         3         ONLINE  /u01/oradata/WILSON/onlinelog/o1_mf_3_6bcsqtfj_.log                              NO

         3         ONLINE  /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_3_6bcsqtwv_.log                  YES

         2         ONLINE  /u01/oradata/WILSON/onlinelog/o1_mf_2_6bcsqs3t_.log                              NO

         2         ONLINE  /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_2_6bcsqstm_.log                  YES

         1         ONLINE  /u01/oradata/WILSON/onlinelog/o1_mf_1_6bcsqpty_.log                              NO

         1         ONLINE  /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_1_6bcsqqt0_.log                  YES

   

6 rows selected

   

   

2、添加redo log group

 一些场景下,添加redo log group操作,需要指定group的编号和成员文件。

    

SQL> alter database add logfile ('/u01/oradata/WILSON/onlinelog/redo4a.log', '/u01/flash_recovery_area/WILSON/onlinelog/redo4b.log') size 10m;

   

Database altered

   

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 CURRENT

         3        216   52428800          2 INACTIVE

         4          0   10485760          2 UNUSED

   

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                                           IS_RECOVERY_DEST_FILE

---------- ------- ------- -------------------------------------------------------------------------------- ---------------------

        (篇幅原因,部分省略……

         1         ONLINE  /u01/oradata/WILSON/onlinelog/o1_mf_1_6bcsqpty_.log                              NO

         1         ONLINE  /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_1_6bcsqqt0_.log                  YES

         4         ONLINE  /u01/oradata/WILSON/onlinelog/redo4a.log                                         NO

         4         ONLINE  /u01/flash_recovery_area/WILSON/onlinelog/redo4b.log                             NO

   

8 rows selected

   

 

 3、Active状态日志组解决

在上文中,我们讨论过Active状态下,dbwr还没有将相应的事务数据块写入到DB File中,此时Log Group的状态是Active。将Active状态转变为Inactive的方法,就是手工的进行checkpoint,强制启动dbwr一次写入动作。

 --当前是group 4为当前日志;

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 ACTIVE

         3        216   52428800          2 INACTIVE

         4        219   10485760          2 CURRENT

         5          0   10485760          2 UNUSED

   

--手工一次切换,形成group 4active状态;

SQL> alter system switch logfile;

System altered

   

   

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 ACTIVE

         3        216   52428800          2 INACTIVE

         4        219   10485760          2 ACTIVE

         5        220   10485760          2 CURRENT

   

--写入检查点;

SQL> alter system checkpoint;

System altered

   

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 INACTIVE

         3        216   52428800          2 INACTIVE

         4        219   10485760          2 INACTIVE

         5        220   10485760          2 CURRENT

   

   

5、删除redo log group

 删除redo log group要有至少两个前提,需要注意:

 首先是要保证删除日志组状态为unused或者inactive,否则不能删除。其次是删除后,系统日志组个数不能少于2个。

  SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 INACTIVE

         3        221   52428800          2 CURRENT

         4        219   10485760          2 INACTIVE

         5        220   10485760          2 ACTIVE

   

--ACTIVE状态删除报错。

SQL> alter database drop logfile group 5;

   

alter database drop logfile group 5

   

ORA-01624: 日志 5 是紧急恢复实例 wilson (线程 1) 所必需的

ORA-00312: 联机日志 5 线程 1: '/u01/oradata/WILSON/onlinelog/o1_mf_5_7vqh94p2_.log'

ORA-00312: 联机日志 5 线程 1: '/u01/flash_recovery_area/WILSON/onlinelog/o1_mf_5_7vqh94t6_.log'

   

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 INACTIVE

         3        221   52428800          2 CURRENT

         4        219   10485760          2 INACTIVE

         5        220   10485760          2 ACTIVE

   

SQL> alter system checkpoint;

System altered

   

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 INACTIVE

         3        221   52428800          2 CURRENT

         4        219   10485760          2 INACTIVE

         5        220   10485760          2 INACTIVE

   

   

调整好状态之后,再进行删除。

   

   

SQL> alter database drop logfile group 5;

   

Database altered

   

SQL>  select group#, sequence#, bytes, members, status from v$log;

   

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- ----------------

         1        217   52428800          2 INACTIVE

         2        218   52428800          2 INACTIVE

         3        221   52428800          2 CURRENT

         4        219   10485760          2 INACTIVE

   

   

6、增加redo log group member

 直接增加日志组成员的使用几率相对较少,我们一般是一次性直接将成员文件添加完毕。

SQL> alter database add logfile member '/u01/oradata/WILSON/onlinelog/redo4c.log' to group 4;

Database altered

   

SQL> select group#, member from v$logfile;

   

    GROUP# MEMBER

---------- --------------------------------------------------------------------------------

         3 /u01/oradata/WILSON/onlinelog/o1_mf_3_6bcsqtfj_.log

         3 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_3_6bcsqtwv_.log

         2 /u01/oradata/WILSON/onlinelog/o1_mf_2_6bcsqs3t_.log

         2 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_2_6bcsqstm_.log

         1 /u01/oradata/WILSON/onlinelog/o1_mf_1_6bcsqpty_.log

         1 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_1_6bcsqqt0_.log

         4 /u01/oradata/WILSON/onlinelog/redo4a.log

         4 /u01/flash_recovery_area/WILSON/onlinelog/redo4b.log

         4 /u01/oradata/WILSON/onlinelog/redo4c.log

   

9 rows selected

   

   

7、删除redo log group member

 

   

SQL> select group#, member from v$logfile;

   

    GROUP# MEMBER

---------- --------------------------------------------------------------------------------

         3 /u01/oradata/WILSON/onlinelog/o1_mf_3_6bcsqtfj_.log

         3 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_3_6bcsqtwv_.log

         2 /u01/oradata/WILSON/onlinelog/o1_mf_2_6bcsqs3t_.log

         2 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_2_6bcsqstm_.log

         1 /u01/oradata/WILSON/onlinelog/o1_mf_1_6bcsqpty_.log

         1 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_1_6bcsqqt0_.log

         4 /u01/oradata/WILSON/onlinelog/redo4a.log

         4 /u01/flash_recovery_area/WILSON/onlinelog/redo4b.log

         4 /u01/oradata/WILSON/onlinelog/redo4c.log

   

9 rows selected

   

SQL> alter database drop logfile member '/u01/oradata/WILSON/onlinelog/redo4c.log';

   

Database altered

   

SQL> select group#, member from v$logfile;

   

    GROUP# MEMBER

---------- --------------------------------------------------------------------------------

         3 /u01/oradata/WILSON/onlinelog/o1_mf_3_6bcsqtfj_.log

         3 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_3_6bcsqtwv_.log

         2 /u01/oradata/WILSON/onlinelog/o1_mf_2_6bcsqs3t_.log

         2 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_2_6bcsqstm_.log

         1 /u01/oradata/WILSON/onlinelog/o1_mf_1_6bcsqpty_.log

         1 /u01/flash_recovery_area/WILSON/onlinelog/o1_mf_1_6bcsqqt0_.log

         4 /u01/oradata/WILSON/onlinelog/redo4a.log

         4 /u01/flash_recovery_area/WILSON/onlinelog/redo4b.log

   

8 rows selected

   

   

   

redo log sizing:

      在生产环境中,redo log的size影响着整个系统的性能, 通过AWR报告和alert log进行相应的调整;

       如果系统在关键作业时生成的redo size峰值量很高,并且持续很长时间。我们在Alert log上可以看到频繁的online log切换,同时连带出现"check point not complete"或者"could not allocate log sequence"提示。说明日志切换过于频繁。

    AWR报告上,我们主要关注两个与redo log相关的事件:log file parallel writelog file sync。如果两个事件出现在top events中,作为dba和调试人员就需要注意了。

    Oracle的官方资料中,对redo log的大小设置也是以切换频率而定的,要求调整到15-20分钟进行一次切换。调整的手段主要是增加日志组数量和调大日志成员文件大小。这样,都可以给dbwrarc进程更多的时间在后台进行数据写入和归档。

      在实际中,还要建议关注日志组成员的数目,我们对日志采用多路径冗余手段,是为了防止出现单磁盘文件以外损坏。但是,过多的日志成员数目也会带来性能瓶颈; 

 

最后介绍TOAD工具的一个功能,利用该功能可以很好的进行数据库的online redo log的管理;

简单的进行一个截图:

 

通过这个图可以得到的信息如下: 

1、系统运行期间每个小时进行3-4的日志切换,系统正常;

2、每天的00:00-1:00期间可能在跑定时任务(抽数据等操作),归档产生的量很稳定;

3、2013/12/19  20  24 这几天日志产生大量的归档日志,是平常时间点的20倍,DBA需要知道这些时候系统在运行什么操作,产生这么多的归档日志是否正常,如果数据正常情况,建议这些业务操作放在下班时间进行,避免影响其他人员的正常工作;

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1674 14
|
2月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
149 0
|
3月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
46 0
redo log 原理解析
|
4月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
188 0
|
4月前
|
存储 关系型数据库 MySQL
深入MySQL:事务日志redo log详解与实践
【8月更文挑战第24天】在MySQL的InnoDB存储引擎中,为确保事务的持久性和数据一致性,采用了redo log(重做日志)机制。redo log记录了所有数据修改,在系统崩溃后可通过它恢复未完成的事务。它由内存中的redo log buffer和磁盘上的redo log file组成。事务修改先写入buffer,再异步刷新至磁盘,最后提交事务。若系统崩溃,InnoDB通过redo log重放已提交事务并利用undo log回滚未提交事务,确保数据完整。理解redo log工作流程有助于优化数据库性能和确保数据安全。
635 0
|
5月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之如何设置Redo日志保存时间
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
212 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
273 3
|
4月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3