如何主库进行闪回,而备库不需要重新搭建?

来源:这里教程网 时间:2026-03-03 22:38:25 作者:

一、容灾状态检查

1、检查空间是否充足

#查看本地空闲磁盘空间
df -h
#查看ASM磁盘空间
su - grid
asmcmd lsdg

若磁盘组冗余度为Normal剩余空间需除以2,High 则除以3.

2、容灾同步状态检查

--主库执行切换日志命令,观察seq是否变化且无应用延迟
alter system archive log current;
--主备库均可执行,SEQ需一致
SELECT AL.THRD "Thread",
       ALMAX   "Last Seq Received",
       LHMAX   "Last Seq Applied"
  FROM (SELECT THREAD# THRD, MAX(SEQUENCE#) ALMAX
          FROM V$ARCHIVED_LOG
         WHERE RESETLOGS_CHANGE# =
               (SELECT RESETLOGS_CHANGE# FROM V$DATABASE)
         GROUP BY THREAD#) AL,
       (SELECT THREAD# THRD, MAX(SEQUENCE#) LHMAX
          FROM V$LOG_HISTORY
         WHERE RESETLOGS_CHANGE# =
               (SELECT RESETLOGS_CHANGE# FROM V$DATABASE)
         GROUP BY THREAD#) LH
 WHERE AL.THRD = LH.THRD;
 
--备库执行,查看是否有同步延迟
select value from v$dataguard_stats where name='apply lag';

3、断开容灾

确认日志容灾已应用且无延迟后,关闭日志传输。
--主库执行,找到容灾对应的dest_id
show parameter  log_archive_dest
--根据上一步的dest_id 关闭日志传输
alter system set log_archive_dest_state_xx=defer; ## xx根据实际dest_id修改

二、闪回点创建

2.1 检查闪回状态(主库)

若需要开启闪回,目录与大小根据情况配置。注意!开启闪回需要重启数据库
--查看是否开启闪回
select flashback_on from v$database;
--未开启,则开启闪回
alter system set db_recovery_file_dest='/archlog/fast_recovery_area';
闪回路径放在ASM盘的时候,路径只能写第一层,比如+DATA,不然会报错无法启动实例。
alter system set db_recovery_file_dest_size=200G scope=both;
###开启闪回步骤,需要关闭数据库。
--双节点关闭
shutdown immediate;
--单节点mount
startup mount;
--开启闪回
alter database flashback on;
select flashback_on from v$database;

2.2 备库操作

2.2.1 备库创建闪回区大小

alter system set db_recovery_file_size = 4096m;  --根据实际空间情况调整
alter system set db_recovery_file_dest='/u01/flash_standby';

2.2.2 停止mrp进程

alter database recover managed standby database cancel;

2.2.3 切换备库状态

shutdown immediate
startup mount
alter database convert to snapshot standby;
确认状态
select open_mode,datbase_role from v$database;

2.2 创建闪回点(主库)

--创建闪回点
create restore point upgrade_point  guarantee flashback database;
 
--查看创建的闪回点
SELECT NAME,SCN,TIME,DATABASE_INCARNATION#,GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE 
FROM V$RESTORE_POINT WHERE GUARANTEE_FLASHBACK_DATABASE='YES';

2.3 闪回至闪回点(主库)

--启动数据库至mount状态下执行
flashback database to restore point upgrade_point;
alter database open resetlogs;
alter system set log_archive_dest_state_2 = enable;
select dest_name,status,error from v$archive_dest where dest_id=2;

2.4 备库重新关闭打开即可恢复应用

 

SQL > shutdown immediate
SQL> startup mount
SQL> alter database convert to physical standby;
SQL> shutdown immediate;
SQL> startup nomount
SQl> alter database mount standby database;
SQL> alter database open;
SQL> alter database recover managed standby database disconnect from session;

相关推荐