Oracle ADG相关查询的实现

 更新时间:2025年12月10日 08:53:34   作者:为中华崛起而奋斗  
本文主要介绍了ADG(Active Data Guard)环境下的故障排查步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、判断有无ADG

show parameter dest
 
show parameter log_archive_config
 
select open_mode,protection_mode,database_role,switchover_status from v$database;

2、主库查询gap

set lines 222 pages 100
col error for a20
col gap_status for a20
col dest_name for a20
select dest_id,dest_name,status,type,error,gap_status from v$archive_dest_status where type='PHYSICAL';

3、备库查询GAP

select * from v$archive_gap; --无结果说明无gap

GAP_STATUS:
NO GAP:无GAP
LOG SWITCH GAP : 有GAP,日志还没有切换完成,不需要人工干预
RESOLVABLE GAP:有GAP,但是可以自动解决,不需要人工干预
UNRESOLVABLE GAP:有GAP,不能自动解决,需要人工干预(从主库SCP归档到备库并重新注册归档恢复)
LOCALLY UNRESOLVABLE GAP:有GAP,不能从本机获取日志自动解决,可以存其他机器获取日志自动解决

4、查看主库多节点最大日志编号、查备库recover到的日志序号

select thread#,max(sequence#) from gv$archived_log group by thread# order by 1;
tail -1000f alert.log

5、主备库查看ADG异常信息

select status,error,valid_type,valid_role,db_unique_name from v$archive_dest;

6、主库查找备库缺失的日志路径和名称:

set lines 200 pages 100
col name for a100
select name from v$archived_log where thread#=1 and dest_id=1 and sequence# between xxx and xxx;

7、判断未应用日志(备库查)

select thread#,0 not_send_count,not_apply_count
from (select s.thread#,
            s.sequence# - ( select max(s.sequence#) seq
                                from gv$managed_standby i
                                where i.process='ARCH'
                                    and i.thread# = s.thread#) not_apply_count
        from gv$managed_standby s
        where s.process = 'MRP0')
 where not_apply_count >= 0;

8、判断未传输日志(主库查)

with temp as 
 ( select process,thread#,max(sequence#) seq
    from gv$managed_standby
    where process in ('ARCH','LNS')
    group by process,thread#)
select aa.thread#,bb.seq - aa.seq not_send_count,0 not_apply_count
from temp aa.temp bb
where aa.process='ARCH'
    and bb.process='LNS'
    and aa.thread#=bb.thread#
    and bb.seq - aa.seq >= 0
    order by 1;

9、查案备库未应用日志(在备库执行)

select dest_id,count(*) from v$archived_log where applied='NO' group by thread#,dest_id order by 1;
select thread#,count(*) from v$archived_log where applied='NO' group by thread#,dest_id order by 1;
select thread#,sequence#,applied from v$archived_log where applied='NO';
 
select thread#,dest_id,to_char(FIRST_TIME,'YYYY-MM-DD HH24:MI:SS'),name,applied,deleted,status from v$archived_log where applied='NO' order by 3;

10、查询同步信息及相关进程(在备库执行)

set lines 222 pages 100
col client_pid for a10
select inst_id,thread#,process,status,client_pid,sequence# from gv$managed_standby;

主要看MRP0进程(日志应用进程)

MRP0有多个状态:

WAIT_FOR_GAP:有GAP,看看GAP是否可以自动解决,不需要人工干预

APPLYING_LOG:正在应用日志

WAIT_FOR_LOG:正在等待日志同步

如果WAIT_FOR_GAP持续太久就需要关注了

如果WAIT_FOR_GAP持续不长,可以看看主库当天归档量的大小

11、查询一周的归档量

select logtime,count(*),round(sum(sr)/1024/1024/1024,2) size_gb
 from ( select to_char(first_time,'YYYY-MM-DD') as logtime
            (a.blocks * a.block_size) sz
            from gv$archived_log a
            where a.dest_id = 1 
            and a.first_time > trunc(sysdate - 8))
group by logtime
order by logtime;

12、关闭日志应用

alter database recover managed standby database cancel;

13、开启日志应用

alter database recover managed standby database parallel 16 using current logfile disconnect from session;
 
alter database recover managed standby database using current logfile disconnect from session;

14、ADG备库删除归档

1、一般备库应用完归档会自动删除已经应用的归档
2、备库归档不要使用强制删除(force),如果备库强制删除未应用的归档,此时主库相应的归档也会被策略删除,ADG主备就不可用了
 
select count(*) from v$archive_gap;
select count(*) from v$archived_log where applied='NO';

15、停止主库向备库传输日志

在主库操作,将主库的"log_archive_dest_state_2"设置为DEFER,停止主库归档向备库传输,可缓解备库归档空间压力,等备库归档应用并自动删除足够多时,再将"log_archive_dest_state_2"设置为enable,开启主库对备库的传输
 
show parameter log_archive_dest_state_2
alter system set log_archive_dest_state_2=defer;
alter system set log_archive_dest_state_2=enable;

16、手动应用归档日志(在备库执行)

asmcmd
cd +ARCH/archivelog/2025-01-14/
cp thread_2_seq_458535  /tmp
scp /tmp/thread_2_seq_458535  bakup:/tmp/
 
sqlplus / as sysdba
alter database register logfile '/tmp/thread_2_seq_458535';
#或
rman target /
catalog start with '/tmp/xxxx.dbf'

17、ADG切换

ADG切换之后,主备库不传输的情况,除了密码文件的问题,有可能是触发器的问题。(主库禁用系统触发器,等回切之后要改成true,一直是备库禁用系统触发器)

alter system set "_system_tring_enabled"=FALSE;

ADG主备切换,如果主库有多个备库,先验证每个备库是否都通,如果不能通的话需要把不通的备库的log_archive_dest_*参数置空,要不主库的归档一直发不到不通的备库,其他备库一直等待归档传输 

到此这篇关于Oracle ADG相关查询的实现的文章就介绍到这了,更多相关Oracle ADG查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle数据加密方法分析

    Oracle数据加密方法分析

    这篇文章主要介绍了Oracle数据加密方法,实例分析了Oracle基于md5算法的数据加密技巧,需要的朋友可以参考下
    2016-09-09
  • Oracle的directory详细路径查看、创建及修改方法

    Oracle的directory详细路径查看、创建及修改方法

    directory对象所定义的路径可以在EM中的“管理”-“方案”-“目录对象”进行查看、创建或修改,这篇文章主要介绍了Oracle的directory详细路径查看、创建及修改,需要的朋友可以参考下
    2024-03-03
  • Oracle中直方图对执行计划的影响详解

    Oracle中直方图对执行计划的影响详解

    这篇文章主要给大家介绍了关于Oracle数据库中直方图对执行计划的影响的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Linux环境下Oracle大页配置全过程

    Linux环境下Oracle大页配置全过程

    在 Oracle 数据库运行过程中,内存管理是影响其性能的关键因素之一,大页内存(Large Pages)作为一种优化内存使用的技术,能够显著提升 Oracle 数据库的运行效率,本文将深入介绍大页内存的相关概念,并详细阐述 Oracle 在 Linux 系统上的大页配置过程
    2025-05-05
  • Oracle基础学习之简单查询和限定查询

    Oracle基础学习之简单查询和限定查询

    相信对于每个刚接触数据库的朋友们来说,查询是首先要学会的,本文主要给大家介绍了Oracle中的简单查询和限定查询,文中通过示例代码与文字说明给大家介绍的很详细,相信对大家的的理解和学习会很有帮助,下面感兴趣的朋友们一起来学习学习吧。
    2016-11-11
  • Oracle安装过程中物理内存检查及临时temp空间不足问题解决

    Oracle安装过程中物理内存检查及临时temp空间不足问题解决

    Oracle安装过程物理内存检查及临时temp空间不足的情况,想必有很多的朋友都有遇到过吧,下面与大家分享下具体的解决方法,感兴趣的朋友可以参考下哈
    2013-07-07
  • Oracle数据库初始化参数总结与最佳实践(部分说明与隐藏参数实战)

    Oracle数据库初始化参数总结与最佳实践(部分说明与隐藏参数实战)

    Oracle数据库的初始化参数是配置实例运行特性的核心,直接影响数据库的安全性、性能、可用性等关键指标,这篇文章主要介绍了Oracle数据库初始化参数总结与最佳实践(部分说明与隐藏参数实战),需要的朋友可以参考下
    2025-12-12
  • 解决maven不能下载oracle jdbc驱动的问题

    解决maven不能下载oracle jdbc驱动的问题

    这篇文章主要介绍了解决maven不能下载oracle jdbc驱动的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • EBS xml publisher中文乱码问题及解决办法

    EBS xml publisher中文乱码问题及解决办法

    这篇文章主要介绍了EBS xml publisher中文乱码问题及解决办法的相关资料,需要的朋友可以参考下
    2015-09-09
  • Oracle如何清除一个用户下的所有表(谨慎操作!)

    Oracle如何清除一个用户下的所有表(谨慎操作!)

    在测试数据库脚本可用性的时候,会新建一个用户然后执行脚本,测试成功之后,需要清空表,下面这篇文章主要给大家介绍了关于Oracle如何清除一个用户下的所有表的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论