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); |
| EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12); |
| EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13); |
| |
| 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,备份脚本如下
| |
| 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’; |
恢复控制文件
| |
| |
| restore primary controlfile from '/oradata/rmanbak/rmanbak/cntrl_85_1_1130454364'; |
2.3 清除之前的备份信息并重新注册
| |
| |
| EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(11); |
| |
| EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12); |
| |
| EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13); |
| |
| |
| |
| 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 激活备库为主库,如果已经是主库就跳过该步骤
| |
| alter database activate standby database; |
| |
| |
| |
2.8 打开数据库
| |
| alter database open; |
| |
| alter database open resetlogs; |
撰写不易,请转发时著名文章出处哦!感谢!##
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了