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日志并进行多维度分析。
目录
相关文章
|
23天前
|
前端开发 C语言 开发者
领导被我的花式console.log吸引了!直接写入公司公共库!
【8月更文挑战第23天】领导被我的花式console.log吸引了!直接写入公司公共库!
34 2
领导被我的花式console.log吸引了!直接写入公司公共库!
|
1月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
30天前
|
Linux API
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
|
1月前
|
存储 JSON 前端开发
一文搞懂 Go 1.21 的日志标准库 - slog
一文搞懂 Go 1.21 的日志标准库 - slog
40 2
|
1月前
|
JSON Go API
一文搞懂 Golang 高性能日志库 - Zap
一文搞懂 Golang 高性能日志库 - Zap
51 2
|
20天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
55 0
|
1月前
|
存储 安全 Python
[python]使用标准库logging实现多进程安全的日志模块
[python]使用标准库logging实现多进程安全的日志模块
|
22天前
|
JavaScript Serverless Linux
函数计算产品使用问题之遇到Node.js环境下的请求日志没有正常输出时,该如何排查
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
27天前
|
存储 关系型数据库 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工作流程有助于优化数据库性能和确保数据安全。
108 0
|
2月前
|
测试技术 UED 存储
SLS Prometheus存储问题之在使用内置降采样时,SLS自动选择适配的指标库该如何解决
SLS Prometheus存储问题之在使用内置降采样时,SLS自动选择适配的指标库该如何解决