欢迎来到“四有青年”的博客

DG和ADG备库RMAN备份恢复

DG和ADG备库备份恢复测试


文档初衷:应对非银检查项,由于需要灾备机房也要有数据库测试,但是两地专线之间的带宽有限;故而领导要求备库备份在灾备本地恢复,呃(⊙﹏⊙)。

1. DG备库RMAN备份恢复(RAC和单实例都适用)

首先DG备库的状态是mount的状态,所以数据库本身的数据就是一致性的

备份脚本

rman target /
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
backup as compressed backupset FILESPERSET 10 database format '/oradata/rmanbak/FULL_%d_%U.full' section size 100G;
backup current controlfile format '/oradata/rmanbak/standby_%U.ctl';
backup spfile format '/oradata/rmanbak/spfile_%d_%U.ora';
release channel c1;
release channel c2;
}

--将备份集复制到目标库中恢复

--只保留参数文件即可,数据文件、控制文件redo、undo等全删除,+ARCH的全删除

rm -rf CONTROLFILE DATAFILE(参数文件不删)

--恢复控制文件

-- 因为要恢复为主库,所以需要加上primary关键字

restore primary controlfile from '/oradata/rmanbak/rmanbak/cntrl_85_1_1130454364';

--清除备份信息并重新注册

-- 清除之前的备份信息
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(11); /** CLEAR V$ARCHIVED_LOG */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12); /** CLEAR V$BACKUP_SET */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13); /** CLEAR V$BACKUP_PIECE */
--重新注册,注意路径最后一定需要加上/
catalog start with '/oradata/rmanbak/rmanbak';

--恢复数据文件并重定向

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
SET NEWNAME FOR DATABASE TO '/oradata/testdg/%b';
restore database;
switch datafile all;
release channel c1;
release channel c2;
}

--clear 磁盘组

alter database clear logfile group;

--激活备库

alter database recover managed standby database cancel; --取消日志应用
shutdown immediate
startup mount;
alter database activate standby database;
alter database flashback off;
alter database noarchivelog;
alter database open;
select open mode,database role from v$database;
--如果激活备库报错
SQL alter database activate standby databasealter database activate standby database
ERROR at line 1:
ORA-00313open failed for members or log group 1of thread 1
ORA-00312online log 1 thread1:+DATA DG/FTPDMX01/ONLINELOG/group_1.577.1050100085
ORA-17503:ksfdopn:2 Failed to open file+DATA DG/MX01/ONLINELOG/group_1.577.1050100085
ORA-15012:ASM file
+DATA DG/MX01/ONLINELOG/group 1.577.1050100085' does not exist
----删除standby logfile再激活
set pagesize 9999
select 'alter database clear logfile group||group#||'from vSstandby_log;
select 'alter database drop standby logfile group"||group#||;' from v$standby_log;
alter database flashback off;
alter database activate standby database;
alter database noarchivelog:
alter database open;
select open_mode,database role from v$database

2. ADG备库RMAN备份恢复(RAC和单实例都适用)

2.1 ADG备库的状态为open read only,备份脚本如下

----ADG备库备份脚本
rman target /
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
backup as compressed backupset FILESPERSET 10 database format '/oradata/rmanbak/FULL_%d_%U.full' section size 100G;
backup as compressed backupset archivelog from time 'sysdate-1' format '/oradata/rmanbak/ARC_%d_%U.arc' section size 100G;
backup current controlfile format '/oradata/rmanbak/standby_%U.ctl';
backup spfile format '/oradata/rmanbak/spfile_%d_%U.ora';
release channel c1;
release channel c2;
}
---主库脚本切换归档时间最好在备份时间之后
主库做切换归档操作:alter system archive log current;
---备库再次备份归档,在主库切换归档之后
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
BACKUP FILESPERSET 20 FORMAT '/oradata/rmanbakarch_%s_%p_%t' ARCHIVELOG ALL;
release channel c1;
release channel c2;
}

2.2 开始异机恢复数据库

pfile文件中去掉DG参数并创建对应的文件目录并授权。目标数据库启动到nomount状态,

startup nomount pfile=’xxxx’;

恢复控制文件

-- 因为要恢复为主库,所以需要加上primary关键字
restore primary controlfile from '/oradata/rmanbak/rmanbak/cntrl_85_1_1130454364';

2.3 清除之前的备份信息并重新注册

-- 清除之前的备份信息
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(11); /** CLEAR V$ARCHIVED_LOG */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12); /** CLEAR V$BACKUP_SET */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13); /** CLEAR V$BACKUP_PIECE */
--重新注册,注意路径最后一定需要加上/
catalog start with '/oradata/rmanbak/rmanbak';

2.4 恢复数文件并重定向

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
SET NEWNAME FOR DATABASE TO '/oradata/testdg/%b';
restore database;
switch datafile all;
release channel c1;
release channel c2;
}

2.5 恢复归档日志

run {
allocate channel c1 type disk;
allocate channel c2 type disk;
RESTORE ARCHIVELOG ALL;
release channel c1;
release channel c2;
}

2.6 还原数据库

--查看最新的归档日志序列号,以此序列号为还原点还原数据库
list backupset of archivelog from time "sysdate - 1";
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
set until sequence 486 thread 1;
recover database;
release channel c1;
release channel c2;
}

2.7 激活备库为主库,如果已经是主库就跳过该步骤

-- 2、激活备库为主库,如果已经是主库了,那就跳过该步骤
alter database activate standby database;
--如果激活报错清除和删除redo日志文件组并重新激活
-- ALTER DATABASE CLEAR LOGFILE GROUP 4;
-- alter database drop logfile group 4;

2.8 打开数据库

--如果recover database将所需归档日志全部应用完毕则直接打开数据库
alter database open;
--如果recover database提示还缺失归档日志时则需要不完全恢复数据库
alter database open resetlogs;

撰写不易,请转发时著名文章出处哦!感谢!##

posted @   新社会四有青年  阅读(1018)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示