huhahapz 发表于 2018-9-24 08:31:24

oracle rman-linuxart

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

  RMAN>>  using target database control file instead of recovery catalog
  database mounted

  RMAN>>  database opened
  $ rman target /--直接这样去连

  Recovery Manager:>  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
  $ 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>>  RMAN> backup database skip readonly; --这样备份就可以看到跳过备份users01.dbf

  SQL>>  ============================================================
  上面可以看到备份全部备份到闪回区
  --如何备份到指定的路径 使用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)
  $ 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>>  RMAN> copy datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/u01/app/oracle/rman/users01.dbf';

  --等效于SQL>>  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'>  去检测它
  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'>  第二个策略中说明至少需要有三个冗余的备份存在,如果多余三个备份
  以上的备份将标记为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'>  --也会引发控制文件的自动备份
  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脚本
  $ 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;
  }
  ======================
  $ rman target / @ /u01/app/oracle/rman01.sql   --运行刚才的这个脚本;这个脚本里的语句也可以直接在rman下运行
  $ 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;
  }
  ======================
  $ 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;
  }
  $ rman target / @ /u01/app/oracle/rman03.sql
  ==================
  $ 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;
  }
  $ rman target / @ /u01/app/oracle/rman04.sql
  =====================
  --写一个全备脚本,先把rman环境都还原,再运行下面的脚本
  $ 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;
  }
  $ rman target / @ /u01/app/oracle/rman_full.sql
  --执行全备
  $ ls /u01/app/oracle/rman
  arch_2dm2rd8b_1_1full_28m2rd7n_1_1full_2bm2rd87_1_1
  arch_2em2rd8b_1_1full_29m2rd7n_1_1full_2cm2rd87_1_1
  ctl_2fm2rd8f_1_1   full_2am2rd7o_1_1spfile_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 SOFARTOTALWORK;
  ================================================================
  rman恢复
  数据文件丢失:
  可以脱机的 在线恢复
  不可以脱机的 在mount状态恢复
  1,可以脱机的数据文件丢失的恢复方法:
  $ rm /u01/app/oracle/oradata/orcl/users01.dbf
  --物理上丢失user01.dbf
  $ 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,不可以脱机
  $ rm /u01/app/oracle/oradata/orcl/undotbs01.dbf
  --物理上丢失undotbs01.dbf
  SQL> startup force mount
  $ 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>>  --可以open了
  3,控制文件恢复
  RMAN> backup current controlfile;
  $ rm /u01/app/oracle/oradata/orcl/control0*
  SQL> startup force nomount
  $ 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>>  RMAN> recover database;

  RMAN>>  4,dbf所在磁盘故障,恢复时并rename到另一个磁盘
  $ 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'>  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
  $ 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-4cc表示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
  以上面的方案为例:
  $ 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;
  }
  $ 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;
  }
  $ 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
  # /etc/init.d/crond restart
  # chkconfig crond on
  ====================================
  把下面的备份策略,写好脚本,让它自动运行
  0    4    3   2 2   1   2    2   1   2    2       1   2      2
  元旦 每天 每周日 二月 三月   四月 五月 六月 七月 八月 九月   十月 十一月 十二月
  $ 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;
  }
  $ 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;
  }
  $ 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;
  }
  $ 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;
  }
  $ 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
  ===============================================================================

页: [1]
查看完整版本: oracle rman-linuxart