RMAN (recovery manager)
使用rman前,先确认库为归档模式
默认使用控制文件存放备份与恢复的信息,所以控制文件变得很重要
[oracle@station245 ~]$ echo $ORACLE_SID
orcl
[oracle@station245 ~]$ rman
RMAN> connect target / --以sys连接当前sid所对应的库
connected to target database (not started) --可以看到是没有启动的状态
RMAN> startup nomount --在rman下可以启库直到open状态;
RMAN> alter database mount;
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
===============================================================================