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; |
浙公网安备 33010602011771号