ADG备库进行数据备份,然后进行异机恢复

一套DataGuard环境,如何将数据进行异机恢复?当主数据库(Primary)上的负载较高时,选择在备数据库(Standby)中进行数据库备份就显得非常必要。

备数据库备份中执行的备份操作,是一致性备份还是非一致性备份?这取决于备数据库当前的状态。如图所示:

 仅仅只有一致性的备份,在异机恢复时,才不需要进行media recovery。否则,需要归档日志进行media recovery操作。

 

1、备库的一致性的备份

备库一致性备份:

--stop managed recovery:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

--backup the database and controlfile:

% rman target sys/pw@standby_db

RMAN> Configure controlfile autobackup on ;

RMAN> backup database plus archivelog ;

--restart managed recovery:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

注意:在19c及以上版本,无需要停止日志应用进程,备库上执行BACKUP CONSISTENT DATABASE;命令也可以完成一致性备份。

 

从上述步骤可以看出,备库的一致性备份,要求停止备库的recover操作。如果数据库非常大,则在备库备份的过程中,会导致主备库的数据不同步,对业务生成影响。所以,这种备份方式很少使用。

 

2、备库的非一致性的备份及恢复

所谓备库的非一致性备份,是指在备份的过程中,备库仍然在应用日志,此时备份的数据库是非一致性状态。当进行异机恢复时,需要使用后续的归档日志进行media recovery,才能正常open数据库。

因为备库是readonly状态,所以在备库上无法执行switch logfile操作,备库的日志归档是跟随着主库一起完成的,需要在主库上执行switch logfile操作,则备库也会同步地完成日志归档。

备库非一致性备份:

(1)、11.2.0.4版本以前:

--在备库的主机上准备一个shell脚本,用于登录主库执行switch logfile操作。

/usr/local/bin/logswitch.sh

#!/bin/ksh

sqlplus -s "sys/<passwd>@<primary_db> as sysdba" <<EOF

alter system archive log current;

exit

EOF

 

--备库的备份脚本:

% rman target / catalog <un/pw@catalog_db>

Rman> Configure controlfile autobackup on  ;

RMAN> backup database plus archivelog delete input;

      host "/usr/local/bin/logswitch.sh";

      backup archivelog all delete input;

 

(2)、11.2.0.4版本开始:

The logswitch on primary is NOT required in 11.2.0.4 and above anymore.

如果打算使用这个新特性,则在RMAN连接备库的认证方式就非常关键,不允许使用操作系统认证的方式连接备库,也即不允许在备库主机上使用rman trget /的方式连接备库。否则,会提示如下错误。

RMAN-06820: WARNING: failed to archive current log at primary database

ORACLE error from target database:

ORA-17629: Cannot connect to the remote database server

ORA-17627: ORA-00942: table or view does not exist

 

该新特性不再需要显式地登录主库执行日志切换操作,但实际上在底层仍然会通过主库的连接串,登录主库执行日志切换操作。具体的原理如下所示:

第1步:获取主库的db_unique_name。

第2步:检查RMAN的配置,看有没有为主库的db_unique_name配置CONNECT IDENTIFIER。有,则使用该连接串登录主库执行日志切换操作。

第3步:如果RMAN的配置中没有为主库的db_unique_name配置CONNECT IDENTIFIER,则继续检查“远程日志归档目的地”(V$ARCHIVE_DEST)中主库的db_unique_name所对应的连接串,如果有,则使用该连接串登录主库执行日志切换操作;如果没有,则报错,提示failed to archive current log at primary database。

 

3、异机恢复

进行异机恢复时,需要关注controlfile的类型。

从11.2.0.4版本开始,从备库备份的控制文件,它的类型为STANDBY,这会导致在open resetlogs时报错。

如果安装了18455956补丁,可以在异机恢复控制文件时,指定primary controlfile。示例:

RMAN> restore PRIMARY controlfile from '<backuppiece>'

 

如果没有安装18455956补丁,可以使用以下两种方式来改变controlfile的类型:

options 1: Create trace file of controlfile, Use trace file generated by command to recreate the controlfile.

SQL>  alter database backup controlfile to trace resetlogs;

SQL>  create controlfile ....;

SQL>  recover database using backup controlfile until cancel;

SQL>  alter database open resetlogs;

 

options 2: Activate the Standby.

SQL> Alter database activate physical standby database;

SQL> Alter database open resetlogs;

posted @ 2025-04-22 14:19  石云华  阅读(179)  评论(0)    收藏  举报