8.归档模式下的备份
数据库状态:
恢复目录:打开
目标数据库:例程启动,数据库加载或者打开
备份操作使用的命令与非归档模式下基本一样。
8.1. Backing up archived logs 备份归档日志
下面的脚本备份归档日志:
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> format '/oracle/backups/log_t%t_s%s_p%p'
5> (archivelog all);
6> release channel dev1;
7> }
下面的脚本归档日志从# 90 to 100:
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> format '/oracle/backups/log_t%t_s%s_p%p'
5> (archivelog from logseq=90 until logseq=100 thread 1);
6> release channel dev1;
7> }
下面的脚本备份在24小时内产生的归档日志,在备份完成后会自动删除归档日志。如果备份失败,归档日志不会被删除。
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> format '/oracle/backups/log_t%t_s%s_p%p'
5> (archivelog from time 'sysdate-1' all delete input);
6> release channel dev1;
7> }
使用下面的命令显示恢复目录中的归档日志:
RMAN> list backupset of archivelog all;
注意:RMAN找到归档日志后会备份指定日志,如果无法找到日志,它也不会返回错误信息。
8.2. Backing up the online logs 备份联机日志
联机日志不能用RMAN来备份,必须先将其归档。
为了实现这点,必须在RMAN中执行如下SQL语句:
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter system archive log current";
4> backup
5> format '/oracle/backups/log_t%t_s%s_p%p'
6> (archivelog from time 'sysdate-1' all delete input);
7> release channel dev1;
8> }
上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。
注意:不可以标识归档日志备份集。
9. 增量备份
N级别增量备份备份从最近的N级别或者更小级别以来的所有更改过的数据块内容。增量备份分为两种,一种是累积增量备份,一种是非累积增量备份。
累积增量备份包括自最后一次在更低级别进行备份以来所有改动过的数据块。
非累积增量备份包括自前一次在同级或者更低级别进行备份以来改动过的数据块。
9.1. Level 0--增量备份策略的基础
Level 0 是增量备份策略的基础--the basis of the incremental backup strategy
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> incremental level 0
5> filesperset 4
6> format '/oracle/backups/sunday_level0_%t'
7> (database);
8> release channel dev1;
9> }
Line#
4: 0级备份
5: 定义每个backupset 的最大文件数
使用LIST语句查看,数据库备份集的列表显示中, 'type' 将显示 'Incremental','LV'列将显示'0' 。
9.2. 使用增量备份的案例
一个典型的增量备份案例如下:
星期天晚上 - level 0 backup performed
星期一晚上 - level 2 backup performed
星期二晚上 - level 2 backup performed
星期三晚上 - level 1 backup performed
星期四晚上 - level 2 backup performed
星期五晚上 - level 2 backup performed
星期六晚上 - level 2 backup performed
星期天晚上 - level 0 backup performed
10. 恢复
恢复案例如下:
10.1. Database open,datafile deleted 数据库打开时,文件被删除
数据文件在数据库打开时被删除。有两种方法可以对打开的数据库进行恢复:还原数据文件或者表空间。下面两个实例显示了该方法:
(a) Datafile recovery 数据文件恢复
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4;
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
(b) Tablespace recovery 表空间恢复
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore tablespace users;
5> recover tablespace users;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
注意:如果还原系统表空间文件,数据库必须关闭,因为系统表空间不可以脱机。
10.2. Complete restore (lost online redo) and rollforward - database closed 完全还原(丢失联机日志)并且前滚 - 数据库关闭
RMAN> run {
2> allocate channel dev1 type disk;
3> set until logseq=105 thread=1;
4> restore controlfile to '/oracle/dbs/ctrltargdb.ctl';
5> replicate controlfile from '/oracle/dbs/ctrltargdb.ctl';
6> restore database;
7> sql "alter database mount";
8> recover database;
9> sql "alter database open resetlogs";
10> release channel dev1;
11> }
Notes:
'set until' 命令指明恢复到指定的日志文件。这一点在数据文件恢复时很重要,否则RMAN将试图恢复最近的数据文件,该数据文件可能在指定的日志以前。
'replicate controlfile' 复制还原的控制文件到INIT.ORA指定的控制文件。
如果数据库使用WITH RESETLOGS打开,则需要使用RESET DATABASE命令注册改变后的数据库。在使用RESETLOGS命令打开数据库后强烈建议做一个完全的数据库备份。
10.3. 还原数据文件的子集,完全恢复
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter database mount";
4> restore datafile 2;
5> restore datafile 3;
6> restore archivelog all;
7> recover database;
8> sql "alter database open";
9> release channel dev1;
10> }