讲到rman就要讲到catalog,也就是恢复目录,这个东东我觉得没有太大的用,如果数据库没有打到open状态,恢复目录数据库根本连接不上。我个人建议可以不使用catalog数据库,当然为了全面的了解rman,还是要简单了解下catalog数据库是用来做什么的,catalog数据库是专门供rman使用,用来存储备份信息(不是存储备份文件)及备份脚本的地方。

  如果我们不用catalog的时候,备份信息就存放在控制文件当中,这些备份信息是做恢复的时候需要用到的信息。
 
情景一:使用catalog数据库
 
1. 创建catalog表空间
  create tablespace rman_ts
        datafile  xxxxxxxx/rman_ts01.dbf
        size 10m;
 
2. 创建rman用户
  create user rman identified by rman 
 default tablespace rman_ts 
 temporary tablespace temp 
 quota unlimited on rman_ts
 
3. 用户授权
  grant recovery_catalog_owner to rman
  grant resource,connect to rman
 
4. 在目录数据库中创建恢复目录
  rman catalog rman/rman
  create catalog tablespace rman_ts
 
这个时候我们就可以正常使用catalog数据库了,可以做下测试
[oracle@ora10 ~]$ rman target / catalog rman/rman
Recovery Manager: Release 10.2.0.4.0 - Production on Thu Mar 28 15:05:06 2013
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
connected to target database: QDYX (DBID=3280546065)
connected to recovery catalog database
 
情景二:不使用恢复目录
 
rman target /
 
做个全备份
run  {
allocate channel n1 type disk;
allocate channel n2 type disk;
backup as compressed backupset database
format '/disk01/backup/ora10_%d_%s_%p';
release channel n1;
release channel n2;
}
 
做增量备份(差异增量)
run {
    allocate channel c1 type disk;
    backup incremental level 0
    format '/disk01/backup/rmanbak/inc0_%u_%T'
    database;
    release channel c1;
}
 
备份数据文件
backup datafile 8;
 
备份表空间
backup tablespace users;
 
备份归档日志
backup archivelog all delete all input;
 
备份数据库同时备份归档日志,并删除归档日志
backup as compressed backupset database plus archivelog delete all input
format   '/disk01/backup/ora10_%d_%s_%p';
 
注意:这里可以使用run{}生成一段代码,定制一些参数就行备份,也可以直接使用默认参数备份。在备份时如果不指定备份的路径,则默认保存在flash_recovery_area目录下。
 
重点讲下恢复
 
1. 恢复口令文件
 口令文件丢失,会导致sys用户不能远程连接数据库。仅需要重建口令文件即可
Orapwd file=orapwqdyx password=xxxxx
 
2. 恢复spfile
   RMAN>  startup nomount;
   RMAN>  restore spfile from autobackup;
   RMAN>  alter database open;
 
记得开启控制文件的自动备份,这样在每次做备份时控制文件与初始化参数文件都会被自动备份。
 
3. 恢复控制文件
   RMAN>  startup nomount;
   RMAN>  restore controlfile from autobackup;
   RMAN>  alter database mount;
   RMAN>  recover database;
   RMAN>  alter database open resetlogs;
 
4. 恢复重做日志
  SQL>startup mount;
  SQL>recover database until cancel;
  SQL>alter database open resetlogs;
注意:凡是resetlogs启动数据库后,之前的备份都将失效,需要重新做数据库全备。
 
5. 恢复数据文件
   RMAN>  sql  alter database datafile 8 offline ;
   RMAN>  restore datafile 8;
   RMAN>  recover datafile 8;
   RMAN>  sql  alter database datafile 8 online ;
 
6. 恢复表空间
   RMAN>  sql  alter tablespace PINO offline ;
   RMAN>  restore tablespace PINO;
   RMAN>  recover tablespace PINO;
   RMAN>  sql  alter tablespace PINO online ;
 
7. 完全恢复
  假定控制文件,数据文件,重做日志文件全部丢失,数据库崩溃;
   Rman target /
    RMAN>  startup nomount;
    RMAN>  restore controlfile from autobackup;
    RMAN>  alter database mount;
   RMAN> restore database;
   SQL>  alter system set "_allow_resetlogs_corruption"=true scope=spfile;
   SQL>shutdown immediate
   SQL>startup mount;
   SQL>alter database open resetlogs;
 
注意:这里有几个要注意的地方,当redolog丢失,数据库默认是不能进行recover的,可以通过在初始化参数中添加一个隐含参数强制打开数据库,跳过某些不一致检查。记得做一个数据库全备份。
 
一些常用的rman管理命令
 
1. 查看备份集摘要信息
  list backup summary;
 
2. 查看备份集具体信息
  list backup;
 
3. 查看拷贝
  list copy;
 
4. 查看某个数据文件备份
  list backup of datafile 8;
 
5. 查看某个表空间备份
  list backup of tablespace PINO;
 
6. 查看归档日志
  list archivelog all;
 
7. 查看备份的归档日志
  list backup of archivelog all;
 
8. 查看无效的备份集与归档日志
  list expired backup;
  list expired archivelog all;
 
9. 删除无效的备份集与归档日志
  delete expired backup;
  delete expired archivelog all;
 
10. 查看丢弃的备份集
  report obsolete;
 
11. 删除丢弃的备份集
  delete obsolete;
注意:这里的丢充备份集是指按照备份保留策略已经超过备份窗口或者保留冗余数的备份集。
 
12. 检查一致性
crosscheck archivelog all;
crosscheck backup;
注意:crosscheck的作用主要是用来检查备份是否还存在于存储介质上,如果存在则将控制文件中标记为Aavaible有效),如果不存在控制文件中标记为Xexpired失效)。
 
13. 查看全部数据文件
  report schema
 
14. 查看默认配置参数
  show all;
 
rman target / catalog rman/rman
15. 查看脚本
list script names;
 
16. 打印脚本内容
print script fullback
 
17. 执行脚本
run {execute script fullback;}
 
通过脚本做RMAN增量备份(差异增量),备份计划如下:
星期日:0级增量
星期一:2级增量
星期二:2级增量
星期三:1级增量
星期四:2级增量
星期五:2级增量
星期六:2级增量
 
差异增量与累积增量的区别:
差异增量是备份自上次备份以来比自己级别低或者相同级别变化的数据块
累积增量是备份自上次备份以来比自己级别低变化的数据块
这样就比较好理解了,比如上面的备份计划就是一个差异备份,如果要恢复周四的数据,需要周日,周三再加上周四的备份就行了。累积增量备份相比差异增量多了一个c umulative 的参数。
 
我们可以在/home/oracle/目录下存放三个脚本,分别是bakl0bakl1bakl2,然后通过编辑crontab -e来添加到定制任务。
bakl0内容如下:
run {
    allocate channel c1 type disk;
    backup incremental level 0
    format '/disk01/backup/rmanbak/ lev 0_%u_%T'
    database;
    release channel c1;
    }
其它的类似。
然后在crontab -e 添加以下内容:
45 23 * * 0 rman target / msglog=bakl0.log cmdfile=/home/oracle/bakl0
45 23 * * 1 rman target / msglog=bakl2.log cmdfile=/home/oracle/bakl2
45 23 * * 2 rman target / msglog=bakl2.log cmdfile=/home/oracle/bakl2
45 23 * * 3 rman target / msglog=bakl1.log cmdfile=/home/oracle/bakl1
45 23 * * 4 rman target / msglog=bakl2.log cmdfile=/home/oracle/bakl2
45 23 * * 5 rman target / msglog=bakl2.log cmdfile=/home/oracle/bakl2
45 23 * * 6 rman target / msglog=bakl2.log cmdfile=/home/oracle/bakl2
 
这样就可以实现 一周的自动rman差异增量备份了,非常棒!
当然,如果不确定脚本是否有效,可以用at做下测试
 
at 17:45
at>  rman target / msglog=bakl0.log cmdfile=/home/oracle/bakl0
Ctl +D
保存并退出
 
查看任务
atq
 
取消任务
atrm 5