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

简介:
  • 需求:日志切换太频繁,导致出现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、验证日志问题和同步是否正常

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
6月前
高性能网络库设计之日志组件
高性能网络库设计之日志组件
201 2
|
11月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
883 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
9月前
|
数据库 文件存储 数据安全/隐私保护
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过V$LOGFILE视图或直接查看$YASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
|
11月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
569 5
图解MySQL【日志】——Redo Log
|
10月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
241 16
|
10月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
202 4
|
10月前
|
JSON API Go
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。
|
10月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1235 0
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
362 3
|
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的哪个特性?