oracle进行rman异机备份与恢复_0级及1级备份异机恢复实验教程

RMAN 0级及1级备份异机恢复实验教程
实验环境:
1、catalog目录服务器 192.168.0.200
2、nfs文件共享服务器 192.168.0.201
3、oracletest1源端服务器 192.168.0.202
4、oracletest2 恢复测试服务器192.168.0.203
实验方案:
1、nfs文件共享服务器建立共享目录/home/nfs
2、Oracletest1源端服务器和oracletest2 恢复测试服务器均挂载nfs共享目录到/home/oracle/rmanbak下
3、Oracletest1源端服务器在线状态下进行0级及1级增量备份,备份文件存放到/home/oracle/rmanbak 下,即将文件放入到nfs服务器。
4、在oracle恢复测试服务器上进行恢复测试

在oracletest1电脑上进行备份
一、创建备份目录:
[oracle@srvname]mkdir -p /home/oracle/rmanbak/oracletest1/incrementalbak
二、备份密码文件:
备份密码文件:
[oracle@oracle]cp /opt/oracle/product/19c/dbhome_1/dbs/orapwtest1 /home/oracle/rmanbak/oracletest1/incrementalbak/orapwtest1
三、开启块跟踪:
启用Block change tracking
SQL>alter database enable block change tracking using file '/home/oracle/bct/TEST1/change_tracking.f';
或者:
SQL> alter database enable block change tracking;(使用系统参数设置的路径存放跟踪文件)
相关知识:
1.系统参数:
(1)DB_CREATE_FILE_DEST这个参数,用于确定创建datafiles,tempfiles文件缺省路径
(2)DB_CREATE_ONLINE_LOG_DEST_n这个参数,用于确定创建online redo log files,control files文件缺省路径
但是当DB_CREATE_FILE_DEST,DB_CREATE_ONLINE_LOG_DEST_n同时使用的时候,DB_CREATE_ONLINE_LOG_DEST_n将会覆盖DB_CREATE_FILE_DEST,使DB_CREATE_FILE_DEST失效
2.查看跟踪状态:
select status, filename from v$block_change_tracking;
3.禁用Block Change Tracking
SQL> alter database disable block change tracking;
四、Rman参数调整:
为了减少干扰,关闭备份时自动备份控制文件和参数文件功能:
[oracle@oracle]rman target / catalog rmanuser/dhz770320@192.168.0.200/catalog1;
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP OFF;
五、备份参数文件:
备份参数文件:
RMAN>backup spfile format '/home/oracle/rmanbak/oracletest1/incrementalbak/spfile_%d_%I_%T_%t_%s_%p.log';
六、0级备份相关文件:
(一)备份数据文件:
RMAN>backup incremental level 0 database format '/home/oracle/rmanbak/oracletest1/incrementalbak/data_inc0_%d_%I_%T_%t_%s_%p.dbf';
相关知识:
长期保留:
RMAN>backup incremental level 0 database keep  forever  format '/home/oracle/rmanbak/oracletest1/incrementalbak/databasefile/data_inc0_%d_%I_%T_%t_%s_%p.dbf'
格式符号定义:
%a,活动ID
%c,在多重备份中,备份片的拷贝数,最大256,不是多重备份时,用于备份集为1,用于代理副本拷贝为0
%d,数据库名
%D,公历某月的日期(只有day部分),格式DD
%e,归档日志序号
%f,绝对文件号
%F,由DBID(数据库ID),日月年,序号组成,形式为c-IIIIIIIIII-YYYYMMDD-QQ,c为固定IIIIIIIIII表示DBID,连接RMAN时指定target,会显示DBIDYYYYMM,DD为生成备份时的公历时间,比如20081122,QQ表示为16进制序号,00到FF
%h,归档日志线程号
%I,DBID
%M,公历月份,格式MM
%N,表空间名
%n,数据库名,如果数据库名不满8字符,将在右边自动填充'x',比如,库名为test,结果将是testxxxx
%p,备份集中的备份片号,从1开始,步进1
Note: If you specify PROXY, then the %p variable must be included in the FORMAT string either explicitly or implicitly within %U.
%s,备份集号,此号记录在控制文件中,每次备份会自动增加,重建控制文件将会初始化为1
%t,备份集时间戳,秒为单位
%T,公历年月日,格式YYYYMMDD
%u,8字符名称,利用备份集或副本拷贝号,备份生成时间,由系统通过某种算法得出
%U,许多FORMAT的默认值,由系统生成的唯一名称,对于副本拷贝和备份集的含义不同,对于备份集的备份片来说,等同于%u_%p_%c,对于数据文件副本拷贝,等同data-D-%d_id-%I_TS-%N_FNO-%f_%u,对于归档日志副本拷贝,等同arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u,对于控制文件副本拷贝,等同cf-D_%d-id-%I_%u
%Y,公历年,格式YYYY
%%,表示一个百分号字符'%'
(二)备份控制文件:
RMAN>backup current controlfile format '/home/oracle/rmanbak/oracletest1/incrementalbak/control_%d_%I_%T_%t_%s_%p.ctl'

(三)备份归档日志文件:
RMAN>backup archivelog all format '/home/oracle/rmanbak/oracletest1/incrementalbak/archivelog_%d_%I_%T_%t_%s_%p.ora';(该命令会自动切换并归档当前重做日志文件)
或者:
 RMAN>backup archivelog from sequence 67 format '/home/oracle/rmanbak/oracletest1/incrementalbak/archivelog_%d_%I_%T_%t_%s_%p.ora';
相关知识:
指定时间范围:(时间必须用单引号或双引号括起来)
backup archivelog from time "to_date('20240301 00:00:00','yyyymmdd hh24:mi:ss')" until time "to_date('20240301 12:00:00','yyyymmdd hh24:mi:ss')" format '/home/oracle/rmanbak/oracletest1/incrementalbak/archivelog_%d_%I_%T_%t_%s_%p.ora';

RMAN>backup archivelog from time 'sysdate-3' until time 'sysdate-1'  format '/home/oracle/rmanbak/oracletest1/incrementalbak/archivelog_%d_%I_%T_%t_%s_%p.ora';

指定序列范围:
RMAN>backup archivelog from sequence 15  until sequence 25  format '/home/oracle/rmanbak/oracletest1/incrementalbak/archivelog_%d_%I_%T_%t_%s_%p.ora';

以上两种方式可以省略until字句,在这种情况下,会自动归档和切换当前在线日志,如果带上until子句,则不会自动归档和切换当前在线日志,需要手动切换,使用如下命令:
RMAN>sql alter system switch logfile;(强制切换,如果系统打开归档,则会自动归档当前重做日志文件)
或者:
RMAN>sql ALTER SYSTEM ARCHIVE LOG CURRENT;(强制切换,如果系统打开归档,则会自动归档当前重做日志文件
命令比较:
RMAN>sql ALTER SYSTEM ARCHIVE LOG ALL;(归档除当前重做日志文件以外的其他日志文件,如果其他文件已经归档,则没有归档动作,该命令不会自动切换当前重做日志)

七、1级备份相关文件:
模拟插入两次数据,每次插入后做一次1级备份:
重新打开一个控制台窗口,登陆sqlplus:
Sqlplus / as sysdba
(一)第一次:
插入数据:
insert into testuser.testtable values('level1',1,sysdate);
commit;
在rman上备份增量数据:
RMAN>backup incremental level 1 database format '/home/oracle/rmanbak/oracletest1/incrementalbak/data_inc1_%d_%I_%T_%t_%s_%p.dbf';
(二)第二次:
插入数据:
insert into testuser.testtable values('level1',2,sysdate);
在rman上备份增量数据:
RMAN>backup incremental level 1 database format '/home/oracle/rmanbak/oracletest1/incrementalbak/data_inc1_%d_%I_%T_%t_%s_%p.dbf'
(三)备份控制文件:
RMAN>backup current controlfile format '/home/oracle/rmanbak/oracletest1/incrementalbak/control_%d_%I_%T_%t_%s_%p.ctl'
(四)备份归档文件:
RMAN>backup archivelog all  format '/home/oracle/rmanbak/oracletest1/incrementalbak/archivelog_%d_%I_%T_%t_%s_%p.ora';
在oracletest2电脑上进行数据恢复
一、删除所有关于test1实例的文件
[oracle@oracle]find /opt -name "*test1*" | xargs rm -rf
[oracle@oracle]find /opt -name "*TEST1*" | xargs rm -rf
[oracle@oracle]rm -rf /home/oracle/archive/*.*
[oracle@oracle]rm -rf opt/oracle/product/19c/dbhome_1/dbs/orapwtest1

二、建立数据文件,控制文件、归档文件对应目录:
[oracle@oracle]mkdir -p /home/oracle/oradata/TEST1
[oracle@oracle]mkdir -p /home/oracle/archive
[oracle@oracle]mkdir -p /opt/oracle/admin/test1/adump
三、拷贝口令文件:
[oracle@oracle]cp /home/oracle/rmanbak/oracletest1/incrementalbak/orapwtest1 /opt/oracle/product/19c/dbhome_1/dbs/orapwtest1
四、设置环境变量:
[oracle@oracle]export ORACLE_SID=test1
五、登陆数据库和catalog服务器:
[oracle@oracle]rman target / catalog rmanuser/dhz770320@192.168.0.200/catalog1
六、启动到nomount
RMAN>startup nomount
七、设置正确的化身
RMAN> list incarnation; (查看本机的化身列表)
查看本机的reset scn跟源服务器的是否一致,不一致要reset database to incarnation x;
RMAN> reset database to incarnation 2;
八、恢复参数文件:
恢复最新参数文件:
RMAN>restore spfile;
恢复指定的参数文件:
RMAN> restore spfile from tag "TAG20240306T000012";
或者:
RMAN> restore spfile from "/home/oracle/rmanbak/oracletest1/incrementalbak/data_inc1_TEST1_1538561560_20240306_1162857615_136_1.dbf";
或者:
恢复到指定时间的参数文件:
RMAN> restore spfile until time "sysdate";
或者:
恢复到指定归档序列号的参数文件:
RMAN> restore spfile until sequence 18;
九、利用刚恢复的参数文件重新启动到nomount状态:
RMAN>startup force nomount;
十、查看备份集,并记录下datafile controlfile archivelog的scn号:
RMAN>list backup of controlfile;
RMAN>list backup of database;
RMAN>list backup of archivelog all;
controlfile:
1,scn 2665294 tag TAG20240301T164408
2,scn 2698603 tag TAG20240301T231240
database:
1,level0 scn 2665227 tag TAG20240301T164314
2,level1 scn 2697677 tag TAG20240301T230454
3,level1 scn 2698391 tag TAG20240301T230712
archivelog:
  1    18      2665369    01-MAR-24 2665505    01-MAR-24
  1    19      2665505    01-MAR-24 2665571    01-MAR-24
  1    20      2665571    01-MAR-24 2665760    01-MAR-24
  1    21      2665760    01-MAR-24 2666234    01-MAR-24
  1    22      2666234    01-MAR-24 2667629    01-MAR-24
  1    23      2667629    01-MAR-24 2667759    01-MAR-24
  1    24      2667759    01-MAR-24 2695071    01-MAR-24
  1    25      2695071    01-MAR-24 2696504    01-MAR-24
  1    26      2696504    01-MAR-24 2697503    01-MAR-24
  1    27      2697503    01-MAR-24 2698653    01-MAR-24
十一、恢复控制文件:
恢复到最新控件文件:
RMAN> restore controlfile ;
或者:
恢复指定的控制文件:
RMAN> restore controlfile from tag "TAG20240301T231240";
RMAN> restore controlfile from "/home/oracle/rmanbak/oracletest1/incrementalbak/control_TEST1_1538561560_20240301_1162485848_42_1.ctl";
或者:
恢复到指定检查点scn:
RMAN> restore controlfile until scn 2698603;
或者:
恢复到指定时间:
RMAN> restore controlfile until time to_date('2024-02-29 16:13:17','yyyy-mm-dd hh24:mi:ss');
或者:
恢复到指定归档序列的控制文件:
RMAN> restore controlfile until sequence 18;
十二、恢复数据文件:
恢复最新数据文件:
RMAN> restore database;
或者:
恢复指定数据文件:(只能是0级或full备份文件,不能指定1级备份文件)
RMAN> restore database from tag "TAG20240301T164314";
或者:
恢复到指定归档序列的数据文件:
RMAN> restore database until sequence 18;
或者:
恢复到指定检查点scn:
RMAN> restore database  until scn 2697677;
或者:
恢复到指定时间:
RMAN> restore database until time “to_date('2024-02-29 16:13:17','yyyy-mm-dd hh24:mi:ss')”;
十三、恢复归档文件(可以不用恢复,recover database时会自动restore相关归档文件):
恢复所有归档文件:
RMAN> restore archivelog all;
或者:
恢复指定序列的归档文件:
RMAN> restore archivelog from sequence 15  until sequence 18 ;
或者:
恢复到指定检查点的归档文件:
RMAN> restore archivelog  until scn 2698653;
或者:
恢复到指定时间的归档文件:
RMAN> restore archivelog  until time "to_date('2024-03-01 12:00:00','yyyy-mm-dd hh24:mi:ss')";
十四、启动到mount状态:
RMAN>sql alter database mount;
十五、修复数据库
修复数据库到最新状态:
RMAN>recover database
或者:
修复数据库到指定的scn:
RMAN>recover database until scn 2698391;
或者:
修复数据库到指定的时间:
RMAN>recover database until time to_date('2024-02-29 16:13:17','yyyy-mm-dd hh24:mi:ss');
或者:
恢复数据库到指定的归档日志序列号:
RMAN>recover database until sequence 27;
或者:
尽最大可能恢复数据库,假如归档日志误删除,会自动到重做日志中查找相关数据进行恢复
RMAN>recover database until available redo;
十六、打开数据库:
RMAN>sql alter database open resetlogs;
十七、不同情况数据库恢复:
分以下几种情况进行实验:
(一)数据文件检查点scn<=归档日志结束检查点scn
这种情况数据库可以恢复到大于等于数据文件检查点scn之后,小于等于归档日志结束检查点scn之前的任一时间点。
实例:
将数据库恢复到第一次1级备份的时间点:
选取以下备份节点进行异机恢复:
数据文件:
1,level0 scn 2665227 tag TAG20240301T164314(零级备份)
2,level1 scn 2697677 tag TAG20240301T230454(一级备份)
控制文件:
2,scn 2698603 tag TAG20240301T231240
归档文件:
  1    27      2697503    01-MAR-24 2698653    01-MAR-24
1.先关闭数据库并退出rman
RMAN>shutdown immediate
RMAN>quit
2.执行恢复步骤一到十,从十一步开始按要求恢复控制文件。
3.恢复控制文件:
RMAN> restore controlfile until scn 2698603;
4.恢复数据文件:
RMAN>restore database until scn 2697677;
5.恢复归档日志:
 (可以不用恢复,recover database时会自动restore相关归档文件):
RMAN> restore archivelog  until scn 2697677;
6.启动到mount状态
RMAN>sql alter database mount;
7.修复数据库:
RMAN>recover database until scn 2697677;
8.打开数据库:
RMAN>sql alter database open resetlogs;
(二)数据文件检查点scn>(控制文件检查点scn或者归档文件结束检查点scn)
这种情况只能恢复到数据文件本身的状态,不能恢复到数据文件scn之前的时间点。
实例:
将数据库恢复到第一次1级备份的时间点:
选取以下备份节点进行异机恢复:
数据文件:
1,level0 scn 2665227 tag TAG20240301T164314(零级备份)
2,level1 scn 2697677 tag TAG20240301T230454(一级备份)
控制文件:
1,scn 2665294 tag TAG20240301T164408
这里控制文件scn2665294<一级备份文件scn2697677,同时不恢复归档文件,模拟归档文件丢失。
1.先关闭数据库并退出rman
RMAN>shutdown immediate
RMAN>quit
2.执行恢复步骤一到十,从十一步开始按要求恢复控制文件。
3.恢复控制文件:
RMAN> restore controlfile until scn 2665294 ;
4.恢复数据文件:
RMAN>restore database until scn 2697677;
5.启动到mount状态
RMAN>sql alter database mount;
6.修复数据库:
RMAN>recover database until scn 2697677;
此时rman报错,需要退出rman并进入到sqlplus中执行剩下的步骤。
7.报错处理:
RMAN>shutdown immediate
RMAN>quit
[oracle@oracle]sqlplus / as sysdba
SQL>startup force;
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL>recover database using backup controlfile until cancel;
SQL>输入cancel 回车
SQL>startup force;
SQL>alter database open resetlogs
SQL>alter system set "_allow_resetlogs_corruption"=false scope=spfile;
(三)恢复总结:
1.一般情况要求数据文件scn<归档日志文件scn,这种情况能将数据恢复到最后的状态,无论控制文件scn大小,只要归档文件scn比数据文件scn大,就能恢复到最后的状态。
2.当数据文件scn>归档日志文件scn,就只能恢复数据文件本身记录的数据。这种情况需要设置"_allow_resetlogs_corruption"参数,并在恢复时使用using backup controlfile until cancel;

学习交流
QQ群号:957883494(群内有教程及实验视频)
群主QQ:3683801473

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值