oracle rman

RMAN   (recovery manager)linux


使用rman前,先确认库为归档模式sql


默认使用控制文件存放备份与恢复的信息,因此控制文件变得很重要数据库


[oracle@station245 ~]$ echo $ORACLE_SID
orclvim

[oracle@station245 ~]$ rmanoracle

RMAN> connect target /  --以sys链接当前sid所对应的库app

connected to target database (not started) --能够看到是没有启动的状态ide

RMAN> startup nomount  --在rman下能够启库直到open状态;优化

RMAN> alter database mount;spa

using target database control file instead of recovery catalog
database mounted设计

RMAN> alter database open;

database opened

 

[oracle@station245 ~]$ rman target /  --直接这样去连

Recovery Manager: Release 10.2.0.1.0 - Production on Sat Jan 22 15:49:11 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=1268875410) --能够看到连到orcl,而且是open状态

RMAN>

SQL> select dbid,name,open_mode from v$database;

      DBID NAME      OPEN_MODE
---------- --------- ----------
1268875410 ORCL      READ WRITE
 --在sqlplus下验证orcl库的dbid值和rman里显示的对应


rman下有两种备份指令:
backup 逻辑物理备 基于块级别的备份 备份使用过的块
copy 物理备  源文件和备份文件大小同样
 --若是我有个表空间1T大小,只写了100G数据在里面;使用backup备备100G;而使用copy备备1T


RMAN> backup database;  --备全库

Starting backup at 22-JAN-11  --备份开始时间
using target database control file instead of recovery catalog --表示备份信息存放到控制文件里而不是恢复目录
allocated channel: ORA_DISK_1   --分配通道
channel ORA_DISK_1: sid=153 devtype=DISK --通道的sid值,和类型为磁盘而不是磁带
channel ORA_DISK_1: starting full datafile backupset --开始一个备份集
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile fno=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf   --全部的数据文件被编号并放入此备份集
channel ORA_DISK_1: starting piece 1 at 22-JAN-11 --启动一个备份片
channel ORA_DISK_1: finished piece 1 at 22-JAN-11 --完成一个备份片
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_22/o1_mf_nnndf_TAG20110122T155540_6mo3cwqh_.bkp tag=TAG20110122T155540 comment=NONE  --这里能够看到备份片的路径,和tag等信息;这个备份片就包括了前面的备份集
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35 --这里表示数据文件的备份完成,共使用了35秒
channel ORA_DISK_1: starting full datafile backupset  --又开始一个备份集
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset  --这个备份集里包括了控制文件
including current SPFILE in backupset   --还包括了spfile参数文件
channel ORA_DISK_1: starting piece 1 at 22-JAN-11 --又启动一个备份片
channel ORA_DISK_1: finished piece 1 at 22-JAN-11 --又完成这个备份片
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_22/o1_mf_ncsnf_TAG20110122T155540_6mo3f1j7_.bkp tag=TAG20110122T155540 comment=NONE
 --控制文件和参数文件的备份片位置等信息
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 --控制文件和参数文件的备份花了3秒
Finished backup at 22-JAN-11


[oracle@station245 ~]$ ls /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_22/ -lh
total 578M
-rw-r----- 1 oracle oinstall 6.9M Jan 22 15:56 o1_mf_ncsnf_TAG20110122T155540_6mo3f1j7_.bkp
-rw-r----- 1 oracle oinstall 571M Jan 22 15:56 o1_mf_nnndf_TAG20110122T155540_6mo3cwqh_.bkp


--这里能够看到全部数据文件备份集的大小为571M,比物理上那几个dbf的大小之和要小不少;说明backup逻辑物理备只备使用的块

 

备份单个文件或者指定的多个文件

RMAN> backup spfile;

RMAN> backup current controlfile;
 --注意备份当前控制文件要加current;上面命令不加current是不存在的;控制文件默认有多个,但数据库使用只使用其中一个,再反应给其余镜像

RMAN> backup datafile 4; --备份file#为4的数据文件

RMAN> backup datafile 1,4; --备份多个,用逗号隔开就能够

RMAN> backup tablespace users; --备份表空间

RMAN> backup tablespace sysaux,users; 

RMAN> backup archivelog all; --备份全部的归档日志

RMAN> backup full database plus archivelog;  --还能够备份全库时加上备份归档日志

RMAN> backup archivelog all delete input;  --备份全部的归档日志并把被备份的文件给删除


跳过一些特殊状态的对象不备份使用 skip
SQL> alter tablespace users read only;

RMAN> backup database skip readonly; --这样备份就能够看到跳过备份users01.dbf

SQL> alter tablespace users read write;

 

============================================================
上面能够看到备份所有备份到闪回区

--如何备份到指定的路径 使用format

备份文件能够自定义各类各样的格式,以下
%c 备 份 片 的 拷 贝 数
%d 数 据 库 名 称
%D 位 于 该 月 中 的 第 几 天 ( DD)
%M 位 于 该 年 中 的 第 几 月 ( MM)
%F 一 个 基 于 DBID 惟 一 的 名 称 , 这 个 格 式 的 形 式 为 c-IIIIIIIIII-YYYYMMDD-QQ,其 中 IIIIIIIIII 为 该 数 据 库 的 DBID , YYYYMMDD 为 日 期 , QQ 是 一 个 1-256 的 序列
%n 数 据 库 名 称 , 向 右 填 补 到 最 大 八 个 字 符
%u 一 个 八 个 字 符 的 名 称 代 表 备 份 集 与 创 建 时 间
%p 该 备 份 集 中 的 备 份 片 号 , 从 1 开 始 到 创 建 的 文 件 数
%U 一 个 惟 一 的 文 件 名 , 代 表 %u_%p_%c
%s 备 份 集 的 号
%t 备 份 集 时 间 戳
%T 年 月 日 格 式 (YYYYMMDD)


[oracle@station245 ~]$ mkdir /u01/app/oracle/rman

RMAN> backup database format '/u01/app/oracle/rman/dborclfull_%U';

RMAN> backup database format '/u01/app/oracle/rman/orcl_%T_%s';
 

--

run { }     --大括号中间能够加任意备份命令

RMAN> run { backup database; }   --备全库


copy的使用:
RMAN> copy current controlfile to '/u01/app/oracle/rman/bakcontrl.ctl';
 --等效于 SQL> alter database backup controlfile to '/u01/app/oracle/rman/bakcontrl.ctl'; 

RMAN> copy datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/u01/app/oracle/rman/users01.dbf';
 --等效于SQL> alter tablespace users begin backup;
cp  /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/rman/users01.dbf
  SQL>alter tablespace users end backup;


copy是物理备份,用得少,主要仍是用backup

 

list  查看备份集命令

RMAN> list backup;
RMAN> delete noprompt expired backup;

RMAN> list backup of tablespace users;  --列出users表空间的备份

RMAN> list backup of controlfile;

RMAN> list backup of archivelog all;

RMAN> list backup of spfile;

RMAN> list copy;

RMAN> list copy of tablespace users;

RMAN> list copy of datafile 4;

RMAN> list copy of controlfile;

RMAN> list copy of archivelog all;

 

 

crosscheck 核对备份信息
 确保rman资料库信息与备份文件信息保持同步,此命令检查rman资料库记录的备份文件;备份文件的状态有avaliable,expired等

====================

RMAN> crosscheck backup;

crosschecked backup piece: found to be 'AVAILABLE' --一个备份为available状态

物理上rm掉它  --手动在物理上干掉它

RMAN> crosscheck backup; 

crosschecked backup piece: found to be 'EXPIRED' --再次检测就是expired状态
 
RMAN> delete expired backup; --这样删除它,可是要求用户去Y/N确认

RMAN> delete noprompt expired backup; --能够加一个noprompt直接确认

============================

RMAN> crosscheck backup of tablespace users;

RMAN> crosscheck backup of controlfile;

RMAN> crosscheck backup of spfile;

RMAN> crosscheck backup of database;

RMAN> crosscheck backup of archivelog all;

RMAN> crosscheck copy;

RMAN> crosscheck copy of database;

RMAN> crosscheck copy of controlfile;

RMAN> crosscheck copy of tablespace users;

RMAN> crosscheck copy of spfile;

RMAN> crosscheck copy of archivelog all;

 


delete 

RMAN> delete noprompt expired backup;

RMAN> delete obsolete;  --删除除旧的备份,与rman保留策略有关

RMAN> delete noprompt backupset 23; --指定删除第23号备份集

RMAN> delete noprompt backuppiece '/u01/app/oracle/rman/orcl_20110122_23';
  --指定删除一个备份片

RMAN> delete backup; --删除全部的backup备份

RMAN> delete copy; --删除全部的copy备份

 


change
  
RMAN> change backupset 21 unavailable;  --把备份集21改成unavailable状态;那么crosscheck都不SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf' size 10m;
去检测它

RMAN> change backupset 21 available;


RMAN> change backupset 21 keep forever logs;  --配置21号备份集永久保留,须要恢复目录的情况

RMAN> change backupset 21 keep until time 'sysdate+100' logs;
    --保留100天

RMAN> change backupset 21 nokeep;
  --删除它的保留属性

 

=====================================


rman环境的配置:

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10g/dbs/snapcf_orcl.f'; # default

 


1,备份保留策略:
 分为两种:
一种:冗余策略
 若是冗余备份的数量超过了指定数量,多的将会被标记为obsolete
另外一种:时间策略
 表示至少有一个备份能恢复到指定的日期

RMAN> CONFIGURE RETENTION POLICY TO recovery window of 10 days;
  --十天内的备份都不会被标记为obsolete

RMAN>CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf' size 10m;

         第二个策略中说明至少须要有三个冗余的备份存在,若是多余三个备份
以上的备份将标记为obsolete


2,配置存储类型

磁盘 DISK
磁带 SBT

RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT;
RMAN> backup spfile;  --会报错,由于没有磁带链接这台机
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK; --改加磁盘

 

3,控制文件的自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on; --打开以后,会在任何backup或者copy命令以后,或者任何数据库的结构改变以后

RMAN>  CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/rman/%F';
 --配置自动备份控制文件的路径,默认是在闪回区里;这里配置到了/u01/app/oracle/rman下


RMAN> backup spfile; --配置完成后,随便备一下,就会在最后看到下面的信息

Starting Control File and SPFILE Autobackup at 23-JAN-11
piece handle=/u01/app/oracle/rman/c-1268875410-20110123-00 comment=NONE
Finished Control File and SPFILE Autobackup at 23-JAN-11


--继续验证:
RMAN> copy datafile 4 to '/u01/app/oracle/rman/db4.dbf';
 --这样也会引起控制文件的自动备份


SQL> create tablespace t1 datafile '/u01/app/oracle/oradata/orcl/t1.dbf' size 20M;
 --也会引起控制文件的自动备份

SQL> drop tablespace t1 including contents and datafiles;
 --会

SQL> create table t1 as select * from scott.emp;
 --不会,由于建表并无改变数据库的结构


4,配置多通道
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2;   --把并行度配置为2

下面再来对通道进行配置

RMAN> configure channel 1 device type disk format '/u01/app/oracle/rman/%U';
  --设置通道1备份到/u01/app/oracle/rman/%U
RMAN> configure channel 2 device type disk format '/u01/app/oracle/rman2/%U';  --设置通道2备份到/u01/app/oracle/rman2/%U

RMAN> backup database;     --验证成功

 

5,配置最大备份集的大小
RMAN> CONFIGURE MAXSETSIZE TO 1G;


6,配置备份集的优化:
RMAN> CONFIGURE BACKUP OPTIMIZATION on;

 

=================================================================

上面的环境配置是默认状况,但通常咱们写脚本手工指定通道,备份路径,最大备份集的大小等等)


run  脚本

[oracle@station245 ~]$ vim /u01/app/oracle/rman01.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database;
release channel a1;
release channel a2;
}

======================


[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman01.sql   --运行刚才的这个脚本;这个脚本里的语句也能够直接在rman下运行


[oracle@station245 ~]$ vim /u01/app/oracle/rman02.sql

run {
allocate channel a1 type disk maxpiecesize 100m; --一个通道最大100M
allocate channel a2 type disk maxpiecesize 100m;
backup database format '/u01/app/oracle/rman/%U'; --使用format指定路径
release channel a1;
release channel a2;
}

======================


[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman02.sql


run {
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database filesperset 2;  --指定每两个数据文件一个备份集
release channel a1;
release channel a2;
}

[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman03.sql


==================


[oracle@station245 ~]$ vim /u01/app/oracle/rman04.sql
run {
allocate channel a1 type disk;
allocate channel a2 type disk;
copy datafile 4 to '/u01/app/oracle/rman/db4.dbf';
copy datafile 5 to '/u01/app/oracle/rman/db5.dbf';
release channel a1;
release channel a2;
}

[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman04.sql

 

=====================

--写一个全备脚本,先把rman环境都还原,再运行下面的脚本
[oracle@station245 ~]$ vim /u01/app/oracle/rman_full.sql

run {
allocate channel a1 type disk;
allocate channel a2 type disk;
allocate channel a3 type disk;
backup database format '/u01/app/oracle/rman/full_%U';
sql 'alter system archive log current';
backup archivelog all format '/u01/app/oracle/rman/arch_%U' delete input;
backup format '/u01/app/oracle/rman/ctl_%U' current controlfile;
backup spfile format '/u01/app/oracle/rman/spfile_%U';
crosscheck backup;
crosscheck archivelog all;
delete noprompt backup of database completed before 'sysdate-10';
delete noprompt backup of archivelog all completed before 'sysdate-20';
release channel a1;
release channel a2;
release channel a3;
}

[oracle@station245 ~]$ rman target / @ /u01/app/oracle/rman_full.sql
 --执行全备

[oracle@station245 ~]$ ls /u01/app/oracle/rman
arch_2dm2rd8b_1_1  full_28m2rd7n_1_1  full_2bm2rd87_1_1
arch_2em2rd8b_1_1  full_29m2rd7n_1_1  full_2cm2rd87_1_1
ctl_2fm2rd8f_1_1   full_2am2rd7o_1_1  spfile_2gm2rd8g_1_1

 

查看备份进度的语句
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND TOTALWORK != 0 AND SOFAR <> TOTALWORK;

 


================================================================


rman恢复

数据文件丢失:
能够脱机的 在线恢复
不能够脱机的 在mount状态恢复

 

1,能够脱机的数据文件丢失的恢复方法:

[oracle@station245 ~]$ rm /u01/app/oracle/oradata/orcl/users01.dbf
 --物理上丢失user01.dbf
[oracle@station245 ~]$ rman target /

RMAN> sql 'alter database datafile 4 offline';
 --把4号数据文件脱机,若是不知道编号也能够直接写/u01/app/oracle/oradata/orcl/users01.dbf
RMAN> restore datafile 4; --还原,表示从备份物理还原到它的位置

RMAN> recover datafile 4; --介质恢复,应用日志,恢复备份时间点到如今的改变

RMAN> sql 'alter database datafile 4 online';
  
 
2,不能够脱机
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/undotbs01.dbf
  --物理上丢失undotbs01.dbf
 

SQL> startup force mount

[oracle@station245 ~]$ rman target /
connected to target database: ORCL (DBID=1268875410, not open)
     --能够看到是mount状态

RMAN> restore datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
  --还原
RMAN> recover datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
  --恢复
RMAN> alter database open;
  --能够open了

 


3,控制文件恢复

RMAN> backup current controlfile;

[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/control0*


SQL> startup force nomount

[oracle@station245 ~]$ rman target /
connected to target database: orcl (not mounted)


RMAN> restore controlfile from '/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_01_23/o1_mf_ncnnf_TAG20110123T155927_6mqqz05y_.bkp';
  --从一个控制文件备份里还原,若是打开控制文件自动备份的话,可使用restore controlfile from autobackup;

RMAN> alter database mount;

RMAN> recover database;

RMAN> alter database open resetlogs; --须要resetlogs打开,那么之前的备份无效,须要从新全备

 

4,dbf所在磁盘故障,恢复时并rename到另外一个磁盘
[oracle@station245 etc]$ rm /u01/app/oracle/oradata/orcl/users01.dbf  -rf

RMAN> run {
2> sql 'alter database datafile 4 offline';
3> set newname for datafile 4 to '/u01/app/oracle/oradata/user01.dbf';
4> restore datafile 4;
5> switch datafile '/u01/app/oracle/oradata/user01.dbf';  --后接新路径
6> recover datafile 4;
7> sql 'alter database datafile 4 online';
8> }

 

5,在rman全备以后,有改变过数据库结构(好比说建立过数据文件),如何恢复?
 
先全备

再建立下面这个表空间
SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/orcl/t3.dbf' size 10m;

SQL> create table t3 tablespace t3 as select * from scott.emp;

SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where table_name='T3';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T3                             T3

[oracle@station245 ~]$ rm /u01/app/oracle/oradata/orcl/t3.dbf
  --模拟t3表空间丢失

RMAN> sql 'alter database datafile 8 offline';

RMAN> restore datafile 8; --这样不成功,由于备份里没有它,不能还原

RMAN> sql "alter database create datafile ''/u01/app/oracle/oradata/orcl/t3.dbf'' as ''/u01/app/oracle/oradata/orcl/t3.dbf''";

RMAN> recover datafile 8;

RMAN> sql 'alter database datafile 8 online';


--


rman-level   增量 

 目地:为了减小备份时的备分量,达到减小备份时间和备份时的负载
  可是,恢复时步骤加长了

 

dump  系统备份命令    也有增量备份的概念


两种:
差别增量备份  level 0-4        0级别为全备

   数字n表明备份上一个小于等于n级别以来的差别增量


累计增量备份  level 0-4c  c表示cumulative
    备份是表明备份上一个小于等于n-1级别以来的增量


备份方案
  星期    天 一 二 三 四 五 六

  级别 0 2 2 1 2 2 2 


恢复时的状况:


星期一崩溃: 恢复星期天的0级+星期一的2级+日志
星期二崩溃: 恢复星期天的0级+星期一的2级+星期二的2级+日志
星期三崩溃: 恢复星期天的0级+星期三的1级+日志 --这里能够看到在星期三设计1级是为了减小的恢复的步骤
星期四崩溃: 恢复星期天的0级+星期三的1级+星期四的2级+日志
星期五:。。。。。。。
星期六:。。。。。。。


另外一种备份策略:


0    4    3   2 2     1     2    2     1   2    2       1     2      2


元旦 天天 每周日 二月 三月   四月 五月 六月 七月 八月 九月   十月 十一月 十二月

 

恢复的状况:(假如第一个周日为1月7号)

一月3号崩溃:    恢复元旦的0级+2号的4级+3号的4级+日志
一月9号崩溃:  恢复元旦的0级+7号的3级+8号的4级+日志
二月3号崩溃:  恢复元旦的0级+2月1号的2级+2月2号的4级+2月3号的4级+日志
五月2号崩溃:  恢复元旦的0级+4月1号的1级+5月1号的2级+5月2号的4级+日志
十一月23号崩溃(假如11月22号为周日):
 恢复元旦的0级+10月1号的1级+11月1号的2级+11月22号的3级+11月23号的4级+日志

 

上面的备份策略是每周一轮,和每一年一轮,能够本身去设定好比说10天一轮,半月一轮,一月一轮,一季度一轮


如:

天数 1   2 3 4 5 6 7 8 9 10 

级别 0   2 2 1 2 2 1 2 2 1

 


再来看累计差别增量:
备份方案
  星期    天 一 二 三 四 五 六

  级别 0 2 2c 1 2 2c 2c

恢复的状况:

星期一崩溃: 恢复星期天的0级+星期一的2级+日志
星期二崩溃: 恢复星期天的0级+星期二的2c级+日志
星期五崩溃: 恢复星期天的0级+星期三的1级+星期五的2c级+日志

 

=====================================

备份的写法:

如下是零级备份的例子
backup incremental level 0 database;
一级差别增量例子
backup incremental level 1 database;
一级累计增量例子
backup incremental level 1 cumulative database;

 

验证增量备份:
RMAN> backup incremental level 0 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';

piece handle=/u01/oracle/rmanbak/ORCL_4_1


RMAN> sql 'create table scott.test01 as select * from scott.emp';
 --作这一步的目地就是作一些差别

RMAN> backup incremental level 2 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';

piece handle=/u01/oracle/rmanbak/ORCL_5_1

--再作一些差别
RMAN> sql 'insert into scott.test01 select * from scott.test01';
RMAN> sql 'commit';

RMAN> backup incremental level 2 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';

piece handle=/u01/oracle/rmanbak/ORCL_6_1

RMAN> backup incremental level 1 tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';

piece handle=/u01/oracle/rmanbak/ORCL_7_1


RMAN> backup incremental level 1 cumulative tablespace users format '/u01/oracle/rmanbak/%d_%s_%p';

piece handle=/u01/oracle/rmanbak/ORCL_8_1


RMAN> list backup of tablespace users;
   --比较大小去验证

 

=========================================


上面的策略制定OK后,如今就是要把脚本写好,并自动运行

备份方案
  星期    天 一 二 三 四 五 六

  级别 0 2 2 1 2 2 2

以上面的方案为例:
[oracle@li ~]$ vim /u01/oracle/level0.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 0 database plus archivelog delete input;
release channel aa;
release channel bb;
}

[oracle@li ~]$ vim /u01/oracle/level1.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 1 database plus archivelog delete input;
release channel aa;
release channel bb;
}

[oracle@li ~]$ vim /u01/oracle/level2.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 2 database plus archivelog delete input;
release channel aa;
release channel bb;
}


周日执行
rman target / @/u01/oracle/level0.rman


周三执行
rman target / @/u01/oracle/level1.rman

周一,二,四,五执行
rman target / @/u01/oracle/level2.rman


使用linux的crontab服务让它自动运行

su - oracle
crontab -e

01 03 * * 0 rman target / @/u01/oracle/level0.rman
01 03 * * 1,2,4,5 rman target / @/u01/oracle/level2.rman
01 03 * * 3 rman target / @/u01/oracle/level1.rman


[root@li ~]# /etc/init.d/crond restart
[root@li ~]# chkconfig crond on

 

====================================


把下面的备份策略,写好脚本,让它自动运行

0    4    3   2 2     1     2    2     1   2    2       1     2      2


元旦 天天 每周日 二月 三月   四月 五月 六月 七月 八月 九月   十月 十一月 十二月


[oracle@li ~]$ vim /u01/oracle/level0.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 0 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}

 

[oracle@li ~]$ vim /u01/oracle/level1.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 1 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}
 
[oracle@li ~]$ vim /u01/oracle/level2.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 2 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}

[oracle@li ~]$ vim /u01/oracle/level3.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 3 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}

[oracle@li ~]$ vim /u01/oracle/level4.rman
run {
allocate channel aa type disk;
allocate channel bb type disk;
backup incremental level 4 database;
backup current controlfile;
backup archivelog all delete input;
release channel aa;
release channel bb;
}


crontab -e
01 03 1 1 * rman target / @/u01/oracle/level0.rman
01 03 1 4,7,10 * rman target / @/u01/oracle/level1.rman
01 03 1 2,3,5,6,8,9,11,12 * rman target / @/u01/oracle/level2.rman
01 03 * * 0 rman target / @/u01/oracle/level3.rman
01 03 2-31 * 1-6 rman target / @/u01/oracle/level4.rman

 

===============================================================================