RMAN> backup incremental level=0 database format '/home/oracle/rman/%U'; SYS@prod>create table test as select * from dba_objects; Table created. SYS@prod>insert into test select * from test; 86959 rows created. SYS@prod>/ 173918 rows created. SYS@prod>/ 347836 rows created. SYS@prod>insert into test select * from test; 695672 rows created. SYS@prod>commit; Commit complete
SYS@prod>select count(*) from test;
COUNT(*)
----------
1391344 SYS@prod>select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 ACTIVE 2 ACTIVE 3 CURRENT 查看当前控制文件头部和数据文件头部 SCN号: SYS@prod>select checkpoint_change# from v$datafile; CHECKPOINT_CHANGE# ------------------ 1198910 1198910 1198910 1198910 1198910 SYS@prod>select checkpoint_change# from v$datafile_header; CHECKPOINT_CHANGE# ------------------ 1198984 1198984 1198984 1198984 1198984 进行一次增量备份: RMAN> backup incremental level=1 database format '/home/oracle/rman/%U'; 然后再次查看SCN: SYS@prod>select checkpoint_change# from v$datafile; CHECKPOINT_CHANGE# ------------------ 1199201 1199201 1199201 1199201 1199201 SYS@prod>select checkpoint_change# from v$datafile; CHECKPOINT_CHANGE# ------------------ 1199201 1199201 1199201 1199201 1199201 SYS@prod>select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 INACTIVE 3 CURRENT 可以看出:SCN 号同步刷新,日志组状态改变, RMAN 备份与热备份性质一样,都会在备份前做一个完全检查点,将脏块刷新回数据文件。 此时删除全部的文件进行恢复: [oracle@service1 prod]$ ls control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf [oracle@service1 prod]$ rm -rf * [oracle@service1 ~]$ sqlplus / as sysdba SYS@prod>shutdown abort; SYS@prod>startup nomount; [oracle@service1 ~]$ rman target / RMAN> restore controlfile from '/home/oracle/rman/1mv1thi1_1_1'; RMAN> sql ' alter database mount'; RMAN> restore database; RMAN> recover database Starting recover at 04-JUN-20 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=125 device type=DISK channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set destination for restore of datafile 00001: /u01/app/oracle/oradata/prod/system01.dbf destination for restore of datafile 00002: /u01/app/oracle/oradata/prod/sysaux01.dbf destination for restore of datafile 00003: /u01/app/oracle/oradata/prod/undotbs01.dbf destination for restore of datafile 00004: /u01/app/oracle/oradata/prod/users01.dbf destination for restore of datafile 00005: /u01/app/oracle/oradata/prod/example01.dbf channel ORA_DISK_1: reading from backup piece /home/oracle/rman/1lv1thgk_1_1 channel ORA_DISK_1: piece handle=/home/oracle/rman/1lv1thgk_1_1 tag=TAG20200604T130939 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 starting media recovery unable to find archived log archived log thread=1 sequence=6 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 06/04/2020 13:17:35 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 6 and starting SCN of 1199201 这个错误是什么原因呢: (redo 日志不可用,控制文件找不到 redo 日志作为结尾,所以会一直读归档,直至找不到,无关紧要的报错,可以查看 SCN 来确定是否一致) 在RMAN恢复过程中,如果redo日志是可用的,那么RMAN可以找到他们并应用这些日志。如果redo日志不可用,此时就需要until子句指定修复的目标时间,SCN或日志序列号,他们是在联机重做日志的第一个SCN之前,否则RMAN会出现RMAN-6054错误。 如果最后创建的归档日志具有序列号n,那么指定until sequence n+1进行恢复就不会出现错误。 解决办法: Run{ Restore database Set until sequence 6 Recover database } SYS@prod>select checkpoint_change# from v$datafile; CHECKPOINT_CHANGE# ------------------ 1199201 1199201 1199201 1199201 1199201 SYS@prod>select checkpoint_change# from v$datafile_header; CHECKPOINT_CHANGE# ------------------ 1199201 1199201 1199201 1199201 1199201 SYS@prod>alter database open resetlogs; Database altered. SYS@prod>select count(*) from test; COUNT(*) ---------- 1391344 数据无丢失。
