RMAN增量恢复示例(1)-不带未备份的归档日志

场景演示,模拟周末晚上0级全备,周一到周六每天晚上1级备份,假如周三机器崩溃,需要尽可能恢复所有数据。

恢复思路:将周末的0级全备和周一到周二的增量备份及未备份的归档(如果能找到的话全都归拢到一个文件夹中),然后注册,然后进行恢复。rman会自动设别到文件中所有的备份然后自动进行恢复。

周末全备

–先0级全备,插入全备数据

--如下sql来模拟业务数据插入
DROP TABLE rman_validate;

CREATE TABLE rman_validate(ID NUMBER, event_desc VARCHAR2(200), insert_time DATE DEFAULT SYSDATE);

INSERT INTO rman_validate
   (ID, event_desc, insert_time)
VALUES
   (1, '周末数据库全备', SYSDATE);
   
ALTER system archive log CURRENT; --然后进行日志归档
   
SELECT *  FROM rman_validate;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53xm0a9Q-1641457513448)(https:/gitee.com/yangshixian/pic/raw/master/20220105215818.png#pic_center)]

执行0级备份

configure default device type to disk;
configure device type disk parallelism 5 BACKUP TYPE TO COMPRESSED BACKUPSET;
configure channel device type disk maxopenfiles 50 maxpiecesize 32G;
configure controlfile autobackup on;
configure backup optimization on ;
set controlfile autobackup format for device type disk to '/data/oracle/rman_data/db0/C0_%d_%F';  
run 
{
    
    
   sql 'alter system archive log current';
   backup incremental level 0 database tag='Sunday-L0-FULLBAK'
   format '/data/oracle/rman_data/db0/DB0_%d_%T_S%s_P%p' 
   filesperset=50;
   sql 'alter system archive log current';
   backup format='/data/oracle/rman_data/db0/AL0_%d_%T_S%s_P%p' 
   archivelog all not backed up 1 times 
   skip inaccessible
   delete all input;
}

周一到周五1级增量备份

周一 Monday


--进行周一 1级增量备份

INSERT INTO rman_validate
   (ID, event_desc, insert_time)
VALUES
   (2, '周一1级迭代增量备份', SYSDATE);

SELECT *  FROM rman_validate;

进行1级备份


configure default device type to disk;
configure device type disk parallelism 5 BACKUP TYPE TO COMPRESSED BACKUPSET;
configure channel device type disk maxopenfiles 50 maxpiecesize 32G;
configure controlfile autobackup on;
configure backup optimization on ;
set controlfile autobackup format for device type disk to '/data/oracle/rman_data/db1/C1_%d_%F';  
run 
{
    
    
   sql 'alter system archive log current';
   backup incremental level 1 database tag='Monday-daily_db1'
   format '/data/oracle/rman_data/db1/DB1_%d_%T_S%s_P%p' 
   filesperset=50;
   sql 'alter system archive log current';
   backup format='/data/oracle/rman_data/db1/AL1_%d_%T_S%s_P%p' tag='Monday-daily_log'
   archivelog all not backed up 1 times 
   skip inaccessible
   delete all input;
}

周二 Tuesday

--进行周二 1级增量备份

INSERT INTO rman_validate
   (ID, event_desc, insert_time)
VALUES
   (3, '周二1级迭代增量备份', SYSDATE);
   commit;
SELECT *  FROM rman_validate;

进行1级备份


configure default device type to disk;
configure device type disk parallelism 5 BACKUP TYPE TO COMPRESSED BACKUPSET;
configure channel device type disk maxopenfiles 50 maxpiecesize 32G;
configure controlfile autobackup on;
configure backup optimization on ;
set controlfile autobackup format for device type disk to '/data/oracle/rman_data/db1/C1_%d_%F';  
run 
{
    
    
   sql 'alter system archive log current';
   backup incremental level 1 database tag='Tuesday-daily_db1'
   format '/data/oracle/rman_data/db1/DB1_%d_%T_S%s_P%p' 
   filesperset=50;
   sql 'alter system archive log current';
   backup format='/data/oracle/rman_data/db1/AL1_%d_%T_S%s_P%p' tag='Tuesday-daily_log'
   archivelog all not backed up 1 times 
   skip inaccessible
   delete all input;
}

查看备份

RMAN> list backup of  database summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
58      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
59      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
60      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
61      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
62      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
63      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
64      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
65      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
66      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
67      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
68      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
69      B  0  A DISK        05-JAN-22       1       1       YES        L0_FULLBAK
76      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
77      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
78      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
79      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
80      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
81      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
82      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
83      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
84      B  0  A DISK        05-JAN-22       1       1       YES        SUNDAY-L0-FULLBAK
90      B  1  A DISK        05-JAN-22       1       1       YES        MONDAY-DAILY_DB1
91      B  1  A DISK        05-JAN-22       1       1       YES        MONDAY-DAILY_DB1
92      B  1  A DISK        05-JAN-22       1       1       YES        MONDAY-DAILY_DB1
93      B  1  A DISK        05-JAN-22       1       1       YES        MONDAY-DAILY_DB1
99      B  1  A DISK        05-JAN-22       1       1       YES        TUESDAY-DAILY_DB1
100     B  1  A DISK        05-JAN-22       1       1       YES        TUESDAY-DAILY_DB1
101     B  1  A DISK        05-JAN-22       1       1       YES        TUESDAY-DAILY_DB1
102     B  1  A DISK        05-JAN-22       1       1       YES        TUESDAY-DAILY_DB1

模拟机器崩溃

将数据库正常关闭

SQL> shutdown immediate

将数据库目录和改名后,进行启动

SQL> startup
ORACLE instance started.

Total System Global Area 2516582192 bytes
Fixed Size                  9137968 bytes
Variable Size             805306368 bytes
Database Buffers         1694498816 bytes
Redo Buffers                7639040 bytes
ORA-00205: error in identifying control file, check alert log for more info
#不出意外果然报控制文件错误,此时进行恢复

进行完全恢复

重建一个原来文件夹名字和原来数据库使用的文件夹名字一样

SQL> startup nomount
--恢复控制文件

RESTORE CONTROLFILE FROM '/data/oracle/rman_data/rman_back_all/C1_ORCLCDB_c-2858197352-20220105-07'

--启动到mount
SQL> alter database mount;

--注册备份文件地址
catalog start with '/data/oracle/rman_data/rman_back_all/';

--如果还能将未备份的归档日志找到,那么可以把归档日志放到/data/oracle/rman_data/rman_back_all这个目录下,然后用catlog 注册下这个归档(或者放好之后直接执行一次catalog start with 也可以)

--进行恢复
restore database;

--报如下错误
Starting recover at 05-JAN-22
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
using channel ORA_DISK_5
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 00007: /data/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_1: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S107_P1
channel ORA_DISK_2: starting incremental datafile backup set restore
channel ORA_DISK_2: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /data/oracle/oradata/ORCLCDB/undotbs01.dbf
channel ORA_DISK_2: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S106_P1
channel ORA_DISK_3: starting incremental datafile backup set restore
channel ORA_DISK_3: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: /data/oracle/oradata/ORCLCDB/system01.dbf
channel ORA_DISK_3: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S105_P1
channel ORA_DISK_4: starting incremental datafile backup set restore
channel ORA_DISK_4: specifying datafile(s) to restore from backup set
destination for restore of datafile 00003: /data/oracle/oradata/ORCLCDB/sysaux01.dbf
channel ORA_DISK_4: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S104_P1
channel ORA_DISK_1: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S107_P1 tag=MONDAY-DAILY_DB1
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:00
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 00007: /data/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_1: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S116_P1
channel ORA_DISK_3: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S105_P1 tag=MONDAY-DAILY_DB1
channel ORA_DISK_3: restored backup piece 1
channel ORA_DISK_3: restore complete, elapsed time: 00:00:00
channel ORA_DISK_3: starting incremental datafile backup set restore
channel ORA_DISK_3: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: /data/oracle/oradata/ORCLCDB/system01.dbf
channel ORA_DISK_3: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S114_P1
channel ORA_DISK_2: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S106_P1 tag=MONDAY-DAILY_DB1
channel ORA_DISK_2: restored backup piece 1
channel ORA_DISK_2: restore complete, elapsed time: 00:00:00
channel ORA_DISK_2: starting incremental datafile backup set restore
channel ORA_DISK_2: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /data/oracle/oradata/ORCLCDB/undotbs01.dbf
channel ORA_DISK_2: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S115_P1
channel ORA_DISK_4: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S104_P1 tag=MONDAY-DAILY_DB1
channel ORA_DISK_4: restored backup piece 1
channel ORA_DISK_4: restore complete, elapsed time: 00:00:00
channel ORA_DISK_4: starting incremental datafile backup set restore
channel ORA_DISK_4: specifying datafile(s) to restore from backup set
destination for restore of datafile 00003: /data/oracle/oradata/ORCLCDB/sysaux01.dbf
channel ORA_DISK_4: reading from backup piece /data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S113_P1
channel ORA_DISK_1: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S116_P1 tag=TUESDAY-DAILY_DB1
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:00
channel ORA_DISK_2: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S115_P1 tag=TUESDAY-DAILY_DB1
channel ORA_DISK_2: restored backup piece 1
channel ORA_DISK_2: restore complete, elapsed time: 00:00:00
channel ORA_DISK_3: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S114_P1 tag=TUESDAY-DAILY_DB1
channel ORA_DISK_3: restored backup piece 1
channel ORA_DISK_3: restore complete, elapsed time: 00:00:00
channel ORA_DISK_4: piece handle=/data/oracle/rman_data/db1/DB1_ORCLCDB_20220105_S113_P1 tag=TUESDAY-DAILY_DB1
channel ORA_DISK_4: restored backup piece 1
channel ORA_DISK_4: restore complete, elapsed time: 00:00:01

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=105
channel ORA_DISK_1: reading from backup piece /data/oracle/rman_data/db1/AL1_ORCLCDB_20220105_S119_P1
channel ORA_DISK_2: starting archived log restore to default destination
channel ORA_DISK_2: restoring archived log
archived log thread=1 sequence=106
channel ORA_DISK_2: reading from backup piece /data/oracle/rman_data/db1/AL1_ORCLCDB_20220105_S120_P1
channel ORA_DISK_1: piece handle=/data/oracle/rman_data/db1/AL1_ORCLCDB_20220105_S119_P1 tag=TUESDAY-DAILY_LOG
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/data/oracle/fast_recovery_area/ORCLCDB/archivelog/2022_01_05/o1_mf_1_105_jxccj8nj_.arc thread=1 sequence=105
channel default: deleting archived log(s)
archived log file name=/data/oracle/fast_recovery_area/ORCLCDB/archivelog/2022_01_05/o1_mf_1_105_jxccj8nj_.arc RECID=50 STAMP=1093214472
channel ORA_DISK_2: piece handle=/data/oracle/rman_data/db1/AL1_ORCLCDB_20220105_S120_P1 tag=TUESDAY-DAILY_LOG
channel ORA_DISK_2: restored backup piece 1
channel ORA_DISK_2: restore complete, elapsed time: 00:00:01
archived log file name=/data/oracle/fast_recovery_area/ORCLCDB/archivelog/2022_01_05/o1_mf_1_106_jxccj8nm_.arc thread=1 sequence=106
channel default: deleting archived log(s)
archived log file name=/data/oracle/fast_recovery_area/ORCLCDB/archivelog/2022_01_05/o1_mf_1_106_jxccj8nm_.arc RECID=51 STAMP=1093214472
unable to find archived log
archived log thread=1 sequence=107
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/05/2022 22:41:14
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 107 and starting SCN of 8105365

RMAN> 

解决错误:


RMAN> recover database until scn 8105365;

Starting recover at 06-JAN-22
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=135 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=14 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=132 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=9 device type=DISK
allocated channel: ORA_DISK_5
channel ORA_DISK_5: SID=133 device type=DISK

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 06-JAN-22

RMAN> alter database open resetlogs;

Statement processed

验证恢复效果

查询数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MEHPWSZx-1641457290476)(%21%5B%5D%28https:/gitee.com/yangshixian/pic/raw/master/20220106112928.png%29)]

参考资料和命令


### 删除所有rman备份

delete backupset; #删除所有备份 

### 手动归档命令

alter system archive log current;
 
alter system  switch logfile
 
区别:https://blog.csdn.net/fred_yang2013/article/details/45171283
 
### 删除归档命令
 
#删除已经备份归档
delete archivelog all completed before 'sysdate-7';

#不管是否备份都删除
delete archivelog until time 'sysdate-1' ; 

#删掉所有归档不管是否备份
delete archivelog ALL;

#查看所有备份归档
list backup of archivelog all;

#查看所有归档日志
list archivelog all;

猜你喜欢

转载自blog.csdn.net/x6_9x/article/details/122347010