首页 > 数据库 >Oracle DG 的归档缺失修复

Oracle DG 的归档缺失修复

时间:2024-12-14 17:54:55浏览次数:5  
标签:thread database standby DG 归档 Oracle 日志 select

故障检查

检查归档同步情况

一、查看数据库的情况

select database_role,flashback_on,open_mode,current_scn from v$database

DATABASE_ROLE   FLASHBACK_ON      OPEN_MODE         CURRENT_SCN
---------------- ------------------ -------------------- ---------------
PHYSICAL STANDBY NO        READ ONLY WITH APPLY  16657544972059

二、查看归档的最大线程与最大接收的归档情况。

select thread#,max(sequence#) from v$archived_log group by thread#;

生产库:
SQL> select thread#,max(sequence#) from v$archived_log group by thread#;
   THREAD# MAX(SEQUENCE#)
---------- --------------
   1     136973
   2     132693
   4     149599
   3     133277
--DG库
SYS@hisnewdb> select thread#,max(sequence#) from v$archived_log group by thread#;

   THREAD# MAX(SEQUENCE#)
---------- --------------
   1     136973
   2     132693
   4     149598
   3     133277   
  • 可见4个节点归档是都有会过来的,sequence都能对得上。

三、查是否存在GAP

select * from v$archived_gap;

日志应用情况

查看延时的应用情况

select name ,value,time_computed from v$dataguard_stats where rownum<33;

NAME         VALUE                  TIME_COMPUTED
-------------------------------- ---------------------------------------------------------------- ------------------------------
transport lag       +11 06:41:27                03/04/2021 16:41:20
apply lag       +11 06:41:27                03/04/2021 16:41:20
apply finish time     +00 04:23:39.868              03/04/2021 16:41:20
estimated startup time     37                  03/04/2021 16:41:20
  • 可看到apply lag的应用已经延时11天6小时了。
  • apply finish time应用最快的恢复时长为4小时。

恢复思路

应用日志

alter database recover managed standby databse cancel; --取消应用日志
alter database open read only;  --打开只读库
alter database recover managed standby ; 
alter database recover managed standby disconnect from session; -- 后台应用,建议上面命令,放前台应用。

归档还保留或者GAP较少的情况

1)归档还在主库

方法一:

首先通过备库sql查出相应的 node[thread#] 和归档位置 name:

传输上面文件到备库归档位置 archive log list

备库上注册归档文件alter database register logfile '归档文件绝对路径' 或rman注册日志catalog start with '';

应用日志,查看select * from V$ARCHIVE_GAP;,监视是否还存在其它的GAP出现。如出现,如上面步骤循环操作。

方法二:

  1. 在配置 fal_client=备库的监听和falserver={主库的监听}
  2. 直接应用日志,由备库寻找日志。

2)归档已在备库

应用日志

归档已经被删除或GAP较多的情况

查看归档所在的位置

alert.log日志:

  • 提供等thread 线程4的序列为148164的归档,获取的序号有148164-148165
  • control_keep_record_keep_time是控制文件的重用记录数据。提示在这个记录天数内没找到归档文件,建议设置更长些天数。以便GAP找到缺失的日志。
    • 默认7天,1-365天范围。
    • 记录的是归档日志,各种备份记录。
    • 不记录数据文件,表空间,redo thread记录。除非被drop,否则不会重用这部分记录
started logmerger process
Thu Mar 04 16:19:53 2021
Managed Standby Recovery not using Real Time Apply
Parallel Media Recovery started with 16 slaves
Waiting for all non-current ORLs to be archived...
All non-current ORLs have been archived.
Media Recovery Waiting for thread 4 sequence 148164
Fetching gap sequence in thread 4, gap sequence 148164-148165
Thu Mar 04 16:19:57 2021
Completed:  alter database recover managed standby database disconnect from session
----------
Thu Mar 04 16:21:50 2021
FAL[client]: Failed to request gap sequence
 GAP - thread 4 sequence 148164-148165
 DBID 3828421454 branch 984679630
FAL[client]: All defined FAL servers have been attempted.
------------------------------------------------------------
Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
parameter is defined to a value that's sufficiently large
enough to maintain adequate log switch information to resolve
archivelog gaps.
------------------------------------------------------------
 Thu Mar 04 16:22:25 2021
RFS[18]: Selected log 29 for thread 4 sequence 149600 dbid -466545842 branch 984679630
Thu Mar 04 16:22:25 2021

1)找到当前的最小SCN

对比数据文件最后检查点的scn,数据文件头部检查点的scn,缺失归档的对应scn(下个日志文件第一个更改号),当前数据库的scn:

select thread#,low_sequence#,high_sequence# from v$archive_gap;
 
col datafile_scn for 999999999999999
col DATAFILE_HEADER_SCN for 999999999999999
col current_scn for 999999999999999
col  next_change# for 999999999999999
select ( select min(d.checkpoint_change#) from v$datafile d ) datafile_scn ,
  ( select min(d.checkpoint_change#) from v$datafile_header d where rownum=1) datafile_header_scn,
  (select current_scn from v$database) current_scn,
  (select next_change# from v$archived_log where sequence#=148164 and resetlogs_change# = (select d.resetlogs_change# from v$database d ) and rownum=1 ) next_change#
from dual;

DATAFILE_SCN     DATAFILE_HEADER_SCN      CURRENT_SCN     NEXT_CHANGE#
---------------- ------------------- ---------------- ----------------
  16657544969028      16657544972060   16657544972059
  • 取上面最小的scn作为增量备份的SCN

2)主库做SCN增量备份

停用备库的日志应用

alter database recover managed standby database cancel;

rman备份

  1. 切换日志
  2. 切记备份当前控制文件
  3. 增量scn备份
run {
allocate channel c1 device type disk; 
allocate channel c2 device type disk; 
allocate channel c3 device type disk; 
allocate channel c4 device type disk; 
allocate channel c5 device type disk; 
allocate channel c6 device type disk; 
CONFIGURE DEVICE TYPE DISK PARALLELISM 6 BACKUP TYPE TO BACKUPSET;
backup as compressed backupset current controlfile for standby format '/home/oracle/backup/backup_ctl_%U.rman';
backup as compressed backupset incremental from scn 16657544969028 database format '/home/oracle/backup/backup_%d_%s_%c_%U_%T.rman' include 
current controlfile for standby filesperset 10 tag 'forsdb_16657544969028_0304';
release  channel c1 ; 
release  channel c2 ; 
release  channel c3 ; 
release  channel c4 ; 
release  channel c5 ; 
release  channel c6 ; 

传输备份文件到备库

scp -rp /home/oracle/backup/backup host2:/home/oracle 

介质恢复备库

  1. 查出控制文件的绝对目录位置,后停备库
  2. 启动到nomount
  3. 恢复控制文件
  4. 启动到mount
  5. 恢复数据文件
  6. 检查rman进展
select name from v$controlfile;
shu immediate;
startup nomount;
rman target / <<eof
restore standby controlfile from '/home/oracle/backup/backup_ctl_%U.rman';
alter database mount; 
eof
  • 如果没有单独备份standby controlfile,就一个一个文件来测试恢复standby controflie
restore standby controlfile to '/oradata/hisnewdb/control01.ctl' from  '/home/oracle/backup/某个文件';
  • 如果文件太多,可以先rman注册文件后,再恢复控制文件。
    • 要找开备库mount状态才能注册
rmant target / <<eof
startup mount; 
catalog start with '/home/oracle/backup/';
list backup of controlfile;
restore standby controlfile automatic;
eof
#大概是这样。restore standby controlfile automatic;如果不通,就采用上面list的信息,找到具体含有standby controflile的备份文件,再通过restore standby controfile from '';来恢复 。
catalog start with '/home/oracle/backup/';
recover database noredo;

查看rman的恢复进展:

set line 9999
select sid,serial#,opname,round(sofar/totalwork*100) completed,trunc(elapsed_seconds/60) elapsed ,trunc(time_remaining/60) remaining,context ,target,sofar,totalwork
from v$session_longops
where opname like 'RMAN%' and opname not like '%aggregate%' and totalwork!=0 and sofar<>totalwork;

应用日志

检查standby redo files是否存在:

select * from v$standby_log;

注册standby redolog files

-- 添加单个文件:
alter database add standby logfile group {组号} 'standby redo logs files 绝对目录文件';
-- 添加多个standby redologs file
alter database add standby logfile group {组号} ('standby redo logs file 1','logfiles2');

应用日志

alter database recover managed standby database cancel ; 
startup mount; 
alter database open read only;
select open_mode,status,protection_level,protection_mode from v$database ;
--前台应用日志
alter database recover managed standby database ; 
-- 8 parallel 后台应用日志
alter database recover managed standby database parallel 8 disconnect from session;

检查应用日志的情况

检查各个线程thread#的最大应用日志的序列,与主库进行对比。

select thread#,max(sequence#) from v$archived_log where applied='YES' group by thread#;

墨天轮原文链接:https://www.modb.pro/db/46707

标签:thread,database,standby,DG,归档,Oracle,日志,select
From: https://www.cnblogs.com/shujuyr/p/18441138

相关文章

  • Oracle PL/SQL(变量-条件控制-循环控制-游标-异常)
    一、SQL语句:DML-数据操作语言【insertupdatedelete】DQL-数据查询语言【select】DDL-数据定义语言【createdroptruncate】DCL-数据控制语言【grantrevoke】TCL-事务控制语言【commitrollback】数据库命令:DESC、SHOWUSER、CALLPL/SQL过程化语言/结构化查询语言。二......
  • 解决oracle数据文件路径有回车故障---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:解决oracle数据文件路径有回车故障作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]最近遇到一个硬件恢复朋友的请求,oracle数据库文件恢复出来了,但是在linux上面启动的时候,有两个......
  • Java模拟Oracle函数MONTHS_BETWEEN注意事项
    Java模拟Oracle函数MONTHS_BETWEEN注意事项MONTHS_BETWEEN(DATE1,DATE2)用来计算两个日期的月份差。最近接到一个迁移需求,把OracleSQL接口迁移到新平台上,但新平台是采用Java计算的方式,所以我需求把SQL逻辑转成Java语言。在遇到MONTHS_BETWEEN时,遇到一些奇怪的问题,在此记......
  • oracle查询某个sql语句客户端ip地址
    1.背景业务出现异常后,或者某个sql导致系统卡顿。需要问题后需要溯源,需要获取这个sql是在哪个客户端的IP发起的。2.cs架构客户端直接连接数据库,可以很方便查询,采用通过sql_id找到客户端、进程或者port等,默认的模式是没有ip地址记录selectmachine,program,portfromGV$SESS......
  • 论文解读《From Generation to Judgment: Opportunities and Challenges of LLM-as-a-
    发表时间:2024期刊会议:arxiv论文单位:ArizonaStateUniversity论文作者:DaweiLi,BohanJiang,LiangjieHuang,AlimohammadBeigi,ChengshuaiZhao,ZhenTan,AmritaBhattacharjee,YuxuanJiang,CanyuChen,TianhaoWu,KaiShu,LuCheng,HuanLiu论文链接Whatis......
  • oracle想把某个字段值中的地址域名替换一下其他参数不变
    在Oracle数据库中,你可以使用 UPDATE 语句结合字符串替换函数(如 REPLACE)来替换字段中特定部分的内容,而保持其他参数不变。假设你有一个表 addresses,其中有一个字段 address_info 包含地址和域名信息,现在你想把域名部分替换成其他内容。以下是一个示例,假设你想把 address_in......
  • DGCRN模型数学原理及运算过程详解
    这是一份用于动态图卷积循环网络DGCRN模型理解的入门教程,采用论文公式与示例结合的方式阐述动态图的实现过程与图卷积GCN在RNN中的运用。本文关于数学原理部分不一定完全严谨,如有错误请在评论区指出。 模型来自论文:DynamicGraphConvolutionalRecurrentNetworkforTraf......
  • Oracle基础二
    一、约束约束是一个数据库对象,对表中数据起到一个限制作用,它是依附于表中的某个字段上的。分为以下几种:1、主键约束PrimaryKey(PK)  特性:唯一,非空创建表的同时创建约束:(1)在字段后面直接加约束类型(这样是系统自定义约束名)(2)在所有字段写完后,加上CONSTRAINT约束名PRIMAR......
  • 实现MySQL数据归档一些常见的工具介绍及其优缺点
    下面是一些常见的工具和方法的介绍及其优缺点:pt-archiver‌介绍‌:pt-archiver是Percona-Toolkit工具集中的一个组件,主要用于对MySQL表数据进行归档和清除。它可以将数据归档到另一张表或者是一个文件中,并且在清除表数据的过程中不会影响OLTP事务的查询性能。优点‌:归档......
  • 【oracle】大数据删除插入
    文章目录引言本文目标Oracle大数据插入操作插入操作的场景和需求使用并行查询进行数据插入示例代码:创建新表并插入数据解释代码中的关键点性能优化建议Oracle大数据删除操作删除操作的场景和需求使用游标和批量处理进行数据删除示例代码:批量删除数据解释代码中的关键......