0


运维必读,记一次主库丢失归档DG故障处理的全过程

👨‍🎓 博主介绍:
IT邦德,江湖人称jeames007,10年DBA工作经验
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证

擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,
安装迁移,性能优化、故障应急处理等。

文章目录

前言

本文详细阐述了Oracle主库丢失归档文件,然后在不重建物理DG的情况下恢复的全过程

🍁 一、主备库环境

🍃 1.1 主库环境

[oracle@source ~]$ echo $ORACLE_SID
PROD
[oracle@source ~]$ sqlplus / as sysdba

SYS@PROD> set line 9999
SYS@PROD> select >dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,
open_mode,switchover_status from v$database;

在这里插入图片描述

🍃 1.2 备库环境

[oracle@source ~]$ echo $ORACLE_SID
PRODDG
[oracle@source ~]$ sqlplus / as sysdba

SYS@PRODDG> set line 9999
SYS@PRODDG> select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,
switchover_status from v$database;
SYS@PRODDG> archive log list

在这里插入图片描述

🍁 二、模拟归档丢失

🍃 2.1 环境准备

#备库操作,备库取消归档应用,让备库处于只读模式
SYS@PRODDG> ALTER DATABASE recover managed standby DATABASE cancel;
#主库配置归档2的状态为defer,目的是为了不把归档自动传递到备库
SYS@PROD> ALTER system SET log_archive_dest_state_2 = ‘defer’;
#切日志,此处切4次
SYS@PROD> alter system switch logfile;

🍃 2.2 创建测试表

SYS@PROD> create table jem.emp1 as select * from scott.emp;
SYS@PROD> insert into jem.emp1 select * from jem.emp1;
SYS@PROD> commit;
SYS@PROD> select * from jem.emp1;

在这里插入图片描述

🍃 2.3 备库归档情况

SELECT dest_id,
THREAD#,
NAME,
sequence#,
archived,
applied,
a.NEXT_CHANGE#
FROM v$archived_log a
WHERE a.sequence# >= 10
AND resetlogs_change# = (SELECT d.RESETLOGS_CHANGE# FROM v$database d)
ORDER  BY a.THREAD#,
a.sequence#,
a.dest_id;

在这里插入图片描述

可以看到,备库已经断档了,22到24都没有接收,接下来我们删除主库的归档日志,
我们删除22到23归档日志

🍃 2.4 刪除归档

#主库删除22及23号归档
[oracle@source ~]$ cd /u01/app/oracle/arch
[oracle@source arch]$ ll arch_PROD_1_2*
-rw-r-----. 1 oracle oinstall 12882944 Jan 9 07:32 arch_PROD_1_20_1040669715.dbf
-rw-r-----. 1 oracle oinstall 3743744 Jan 9 08:02 arch_PROD_1_21_1040669715.dbf
-rw-r-----. 1 oracle oinstall 2560 Jan 9 08:02 arch_PROD_1_22_1040669715.dbf
-rw-r-----. 1 oracle oinstall 5120 Jan 9 08:02 arch_PROD_1_23_1040669715.dbf
-rw-r-----. 1 oracle oinstall 1024 Jan 9 08:02 arch_PROD_1_24_1040669715.dbf
[oracle@source arch]$ rm -rf arch_PROD_1_22_1040669715.dbf
[oracle@source arch]$ rm -rf arch_PROD_1_23_1040669715.dbf

🍃 2.5 主库开启归档传输

SYS@PROD> ALTER system SET log_archive_dest_state_2 = ‘enable’;

在这里插入图片描述

🍃 2.6 备库开启实时应用

SYS@PRODDG> alter database recover managed standby database using current logfile
disconnect from session;
再次查看备库归档情况

在这里插入图片描述

SYS@PRODDG> select thread#,low_sequence#,high_sequence# from v$archive_gap;

在这里插入图片描述
可以看到备库已经产生gap了

🍁 三、主库基于SCN备份

在这里插入图片描述

这几个值基本上差不多,我们可以以 1162586或者1162585为基准来备份

[oracle@source ~]$ cd /u01/app/oracle
[oracle@source oracle]$ mkdir scn_bk
[oracle@source ~]$ rman target /
RMAN> 
run{
allocate channel d1 type disk;
allocate channel d2 type disk;
backup as compressed backupset incremental 
from SCN 1162586 database format '/u01/app/oracle/scn_bk/standby_%d_%T_%U.bak' 
include current controlfile for standby filesperset=5 tag 'FOR STANDBY';
release channel d1;
release channel d2;}

RMAN> list backup of controlfile;
控制文件:standby_PROD_20220109_0c0ir9m2_1_1.ba

在这里插入图片描述

🍁 四、备库执行恢复

🍃 4.1 恢复控制文件

#重启备库到nomount状态来恢复控制文件
SYS@PRODDG> create pfile=’?/dbs/standby_pfile_before_recover_dg.ora’ from spfile;
SYS@PRODDG> shutdown immediate;
SYS@PRODDG> startup nomount;
[oracle@source ~]$ rman target /

RMAN>
restore standby controlfile to '/u01/app/oracle/oradata/PRODDG/control01.ctl' 
from '/u01/app/oracle/scn_bk/standby_PROD_20220109_0c0ir9m2_1_1.bak';

restore standby controlfile to '/u01/app/oracle/oradata/PRODDG/control02.ctl' 
from '/u01/app/oracle/scn_bk/standby_PROD_20220109_0c0ir9m2_1_1.bak';

RMAN> alter database mount;
RMAN> catalog start with ‘/u01/app/oracle/scn_bk/’;

🍃 4.2 恢复备库

RMAN> recover DATABASE noredo;

🍁 五、备库开始应用redo

SYS@PRODDG> alter database recover managed standby database using current logfile disconnect from session;
SYS@PRODDG> SELECT * FROM V$ARCHIVE_GAP;
SYS@PRODDG> select PROCESS, SEQUENCE#,STATUS,DELAY_MINS from v$managed_standby;

在这里插入图片描述

🍁 六、校验数据

🍃 6.1 备库read only 模式打开

SYS@PRODDG> alter database recover managed standby database cancel;
SYS@PRODDG> alter database open;
SYS@PRODDG> alter database recover managed standby database using current
logfile disconnect from session;
校验数据:
SYS@PRODDG> select * from jem.emp1;

在这里插入图片描述
大家点赞、收藏、关注、评论啦 👇🏻👇🏻👇🏻微信公众号👇🏻👇🏻👇🏻

标签: 运维 数据库 oracle

本文转载自: https://blog.csdn.net/weixin_41645135/article/details/122505753
版权归原作者 IT邦德 所有, 如有侵权,请联系我们删除。

“运维必读,记一次主库丢失归档DG故障处理的全过程”的评论:

还没有评论