oralce-dg-如何调整dg环境主备库redo&standbylog日志组数和大小

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
  • 需求:日志切换太频繁,导致出现log file switch (checkpoint incomplete)
  • 参考: Handling ORL and SRL (Resize) on Primary and Physical Standby in Data Guard Environment (Doc ID 1532566.1)
    http://blog.itpub.net/26194851/viewspace-2083912/
  • log file switch (checkpoint incomplete)等待时间描述:
    Waiting for a log switch because the session cannot wrap into the next log. Wrapping cannot be performed because the checkpoint for that log has not completed.
    当你的日志组都写完以后,LGWR 试图写第一个log file,如果这时数据库没有完成写出记录在第一个log file 中的dirty 块时(例如第一个检查点未完成),该等待事件出现。此时online log状态全部是active状态
    该等待事件通常表示你的DBWR 写出速度太慢或者IO 存在问题或者正在执行批量插入作业
  • 解决办法:

    调整参数db_writer_processes增加额外的DBWR
    增加你的日志组或日志文件大小

===========================================================================================================

一、备库上停止apply日志恢复:

   
   alter database recover managed standby database cancel;
   
 备库设置standby_file_management为manual:
   
   alter system set standby_file_management='manual';

二、主库:

    1,主库增加redo,standbylog,每组大小200m
        --redo
        alter database add logfile group 20 ('/u01/app/oracle/oradata/testdb/redo20.log') size 200m;
        alter database add logfile group 21 ('/u01/app/oracle/oradata/testdb/redo21.log') size 200m;
        alter database add logfile group 22 ('/u01/app/oracle/oradata/testdb/redo22.log') size 200m;
      --standbylog
        alter database add standby logfile group 23 ('/u01/app/oracle/oradata/testdb/standby23.log') size 200m;
        alter database add standby logfile group 24 ('/u01/app/oracle/oradata/testdb/standby24.log') size 200m;
        alter database add standby logfile group 25 ('/u01/app/oracle/oradata/testdb/standby25.log') size 200m;
        alter database add standby logfile group 26 ('/u01/app/oracle/oradata/testdb/standby26.log') size 200m;
    
    2,主库删除原来的redo,和standbylog
    
      a).检查当前主备的redo日志文件和standby日志文件:
            redo log:
            select l.group#,l.status,l.bytes/1024/1024 mb,lf.member from v$log l,v$logfile lf where l.group#=lf.group# order by group#;
            
            
            standby log:
            select sl.group#,sl.status,sl.bytes/1024/1024 mb,lf.member from v$standby_log sl,v$logfile lf where sl.group#=lf.group# order by group#;
            
            
        b).drop redo:
                 alter database drop logfile group x;
                 
                如果状态不为inactive:
                         alter system switch logfile;
                         alter system checkpoint;
                         alter database drop logfile group x;
              到os删除对应的日志文件
    
      c).drop standbylog:
                alter database drop logfile group x;
                到os删除对应的日志文件

三、备库:

  1,备库增加redo,standbylog,每组大小200m
      --redo
        alter database add logfile group 20 ('/u01/app/oracle/oradata/testdb_dg/redo20.log') size 200m;
        alter database add logfile group 21 ('/u01/app/oracle/oradata/testdb_dg/redo21.log') size 200m;
        alter database add logfile group 22 ('/u01/app/oracle/oradata/testdb_dg/redo22.log') size 200m;
        --standbylog
        alter database add standby logfile group 23 ('/u01/app/oracle/oradata/testdb_dg/standby23.log') size 200m;
        alter database add standby logfile group 24 ('/u01/app/oracle/oradata/testdb_dg/standby24.log') size 200m;
        alter database add standby logfile group 25 ('/u01/app/oracle/oradata/testdb_dg/standby25.log') size 200m;
        alter database add standby logfile group 26 ('/u01/app/oracle/oradata/testdb_dg/standby26.log') size 200m;

    2,删除原来的redo,和standbylog
    
        a).检查当前主备的redo日志文件和standby日志文件:
            redo log:
            select l.group#,l.status,l.bytes/1024/1024 mb,lf.member from v$log l,v$logfile lf where l.group#=lf.group# order by group#;
        
            standby log:
            select sl.group#,sl.status,sl.bytes/1024/1024 mb,lf.member from v$standby_log sl,v$logfile lf where sl.group#=lf.group# order by group#;
            
        b).drop redo:
                alter database drop logfile group x;

             针对current的日志,需要先在主库上切换日志,变为clearing再处理:
                             alter system switch logfile;
                      alter system checkpoint;
                    对于clearing的日志,执行clear后再drop:
                            alter database clear logfile group 3;
                            alter database drop logfile group 3;
             到os删除对应的日志文件
        c).drop standbylog:
                alter database drop logfile group x;
                
                针对active的日志,需要先在主库上切换日志(alter system switch logfile;)再处理
                        SQL> select group#,status from v$standby_log;
                        
                            GROUP# STATUS
                        ---------- ----------
                            10 UNASSIGNED
                            11 ACTIVE
                            12 UNASSIGNED
                            13 UNASSIGNED
                        alter database drop logfile group 10;
                        
            到os删除对应的日志文件
            

四、启动apply日志恢复

      1,备库设置standby_file_management为auto
                alter system set standby_file_management='auto';
    
      2,备库上启动同步:
                alter database recover managed standby database using current logfile disconnect;
                SQL> select open_mode from v$database;
                
                OPEN_MODE
                ----------
                READ ONLY
                WITH APPLY

        3,检查状态:
            主库多次执行:
                alter system switch logfile;
            主库:
                select max(sequence#) from v$archived_log;
            备库:
            select process, status, thread#, sequence# from v$managed_standby where process='MRP0';
                 select max(sequence#) from v$archived_log where applied='YES';
                 SELECT name,value,time_computed FROM V$DATAGUARD_STATS WHERE NAME like '%lag%';
                 
                 

五 调整日志出现的问题 :standby 的redo log无法删除

SQL> alter database drop logfile group 4
*
ERROR at line 1:
ORA-01623: log 4 is current log for instance PROD (thread 1) - cannot drop
ORA-00312: online log 4 thread 1: '/redoa/oracle/oradata/PROD/redo04a.log'

解决方法:重新从库控制文件
参考:
Online Redo Logs on Physical Standby (Doc ID 740675.1)
Steps to recreate a Physical Standby Controlfile (Doc ID 459411.1)

1、停同步(备库)
SQL> alter database recover managed standby database cancel;
2、停库(备库)
SQL> shutdown immediate;
3、从主库生成控制文件,copy到从库(主库)
SQL> connect sys/@ as sysdba
SQL> alter database create standby controlfile as '/home/controlfil0412.ctl';
scp controlfil0412.ctl to 备库的主机上
4、备份从库原控制文件,用新的控制文件覆盖旧的控制文件
mv control01.ctl control01.ctl.bak
mv control02.ctl control01.ct2.bak

--用新的控制文件覆盖旧的
cp controlfil0412.ctl controlfil01.ctl
cp controlfil0412.ctl controlfil02.ctl
5、把原来的redo重命名
mv redo01.log redo01.log.bak
mv redo02.log redo02.log.bak
mv redo03.log redo03.log.bak
6、启动备库到mount状态(当启动时,新的控制文件会生成和主库一样的redo和standby log文件)
SQL> startup mount
7、清理redo
Clear all Redolog Groups on Standby (only when using Oracle Database <10.2.0.1).
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
8、启动同步
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
9、停同步,open库

alter database recover managed standby database cancel;

alter database open;

10、开启real实时同步
alter database recover managed standby database using current logfile disconnect from session;
11、验证日志问题和同步是否正常

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
13天前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
11天前
|
SQL 缓存 关系型数据库
MySQL原理简介—7.redo日志的底层原理
本文介绍了MySQL中redo日志和undo日志的主要内容: 1. redo日志的意义:确保事务提交后数据不丢失,通过记录修改操作并在系统宕机后重做日志恢复数据。 2. redo日志文件构成:记录表空间号、数据页号、偏移量及修改内容。 3. redo日志写入机制:redo日志先写入Redo Log Buffer,再批量刷入磁盘文件,减少随机写以提高性能。 4. Redo Log Buffer解析:描述Redo Log Buffer的内存结构及刷盘时机,如事务提交、Buffer过半或后台线程定时刷新。 5. undo日志原理:用于事务回滚,记录插入、删除和更新前的数据状态,确保事务可完整回滚。
|
2月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
127 3
|
4月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1845 14
MySQL事务日志-Redo Log工作原理分析
|
4月前
|
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的哪个特性?
|
4月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
192 3
|
4月前
|
存储 SQL 关系型数据库
面试官:你能聊聊 binlog、undo log、redo log 吗?
本文详细解析了MySQL数据库中的三种日志:binlog、undo log和redo log。binlog用于记录数据库的所有表结构变更及数据修改,支持归档、主从复制和数据恢复;undo log用于事务回滚,确保事务的原子性和实现多版本控制;redo log则用于crash-safe,确保数据库异常重启后已提交记录不丢失。文章通过实例和图表,深入浅出地介绍了每种日志的特点、应用场景及其实现机制。适合数据库开发者和运维人员阅读。
387 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
570 0
|
5月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
79 0
redo log 原理解析
|
5月前
|
存储 运维 监控
超级好用的C++实用库之日志类
超级好用的C++实用库之日志类
73 0