关于rman的概念啊,优势啊神马的,这些就不复制粘贴了,有兴趣的同学可以去google一下,本篇主要是笔者在实验过程中的一些感想。

以下的rman都是建立在nocatalog的基础上的,使用nocatalog的意思简单来说就是用controlfile来代替catalog记录rman的备份信息

首先是,rman的实用小命令们:
1.rman中可以直接startup,shutdown [abort/transaction/immediate]

2.host,在rman登录以后,打入host以后就可以进入操作系统提示符了,想回到rman就再打exit

3.sql'alter system **********************',用这样的方式可以在rman中执行sql语句。(在rman中用select语句是没有效果的,多数都是一些配置,例如‘alter database open’这样的)

rman的配置:
1.show all,这个即使是小白也应该知道吧……显示出rman当前所有的配置情况,如果在显示配置信息的时候发现后面跟着# default,那就说明这是rman的初始配置,没有被更改过

2.configure 这个命令用来改变rman的配置,应该也是非常常用的命令,配置决定了备份时候的具体动作嘛!
这里笔者做了一个实验:默认情况下
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
笔者敲入命令:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;(看上去没什么意义)
以后,show all 显示:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
虽然配置是一样的,但是# default没有了……,那想要恢复默认的该怎么办呢?
答案是:configure retention policy clear;
另外,关于冗余策略,可以制定成根据备份数量的(如上),也可以指定成根据时间的:CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
关 于冗余策略还有一点不得不说的是,如果采用的是和笔者一样的nocatalog的话,那备份信息都是存储在控制文件中的,。这里有一个参数叫 CONTROL_FILE_RECORD_KEEP_TIME,表示的是记录在控制文件中保存的最少时间,默认为7天,也就是说如果空间不够需要覆盖的 话,那有可能部分信息被覆盖掉,那的冗余策略会产生影响。所以要根据情况设定这个参数,比如如果冗余策略是根据时间的话,那建议 CONTROL_FILE_RECORD_KEEP_TIME的值设置大于冗余策略的时间值。

rman的备份操作:
1.list
查看备份信息的,可以查看备份信息,也可以查看镜像拷贝的信息(p_w_picpath copy,关于backup和copy笔者稍后再解释),包括可以列出已经expired的备份。(关于expired稍后解释)
例如:
list backup [of database/tablespace name/datafile number];
list copies
list expired backup

2.report
这个是ocp时代就遗留下来的问题,为什么不把report和list并起来呢,一定要分开两个呢?好吧,就硬记住算了。report比较常用是同need backp和obsolete搭配。
例如:
report obsolete
report need backup [days 7/ days = 7 / redundancy 2] need backup默认是根据冗余策略进行报告的,当然也可以自己手工指定。

3.crosscheck
核查备份集信息的命令。主要是核对rman的备份集信息在硬盘上是否存在,如果不存在就会显示将备份集标识为expired,表明备份已经丢失或损坏。正常情况下是available
(看到这里想必大家已经清楚了,expired就是指备份物理上不可用了,损坏或者丢失了,而obsolete则是rman通过冗余策略来判断哪些备份是多余的,需要注意的是expired是和list配合使用的,而obsolete是和report配合使用的)
例如:
crosscheck backup [of database/tablespace name/datafile number];

4.delete
删除,没啥好说的。
例如:
delete obsolete;
delete expired backup;
delete backup of tablespace users;

5.noprompt
这个命令也很实用,相当于linux中配合rm使用的参数-f,在写脚本的时候,delete时候常加这个参数,不然的话就要选择yes/no可,也就是静默。

rman的备份:
基础的操作就不演示了,g一下比比皆是,笔者主要记录了自己实验后的感想。

1.backup和copy
backup故名思意就是备份了,rman自己做的备份,是bkp后缀的,而copy,也就是p_w_picpath copy是dbf为后缀的,也就是数据文件,简单来说copy就是os级别的复制粘贴,和做热备没什么区别,笔者感觉应该还是backup用得比较多一点。

2.增量备份
增量备份:
两种类型:差异增量备份(DIFFERENTIAL)和累积增量备份(CUMULATIVE),而每种都有0 1 2 这三个等级。

差异增量增量备份的话认可和自己同级别的等级的备份(1级做的备份是基于上一次1级增量备份,如果上一次有1级的话),累积增量备份就不认可了(1级做的备份是基于上一次0级而不是1级做的备份,即使有1级的话)。不指定类型的话默认是差异增量备份。
例如:
BACKUP INCREMENTAL LEVEL=2 CUMULATIVE DATABASE;


3.归档的备份
首 先是笔者自己的一次经历,和环境参数NLS_LANG有关。具体是这样的,笔者在数据库mount情况下执行backup archivelog all,成功,打开数据库后(open),再执行相同语句失败,错误信息是database not set,经查,必须把NLS_LANG设置成和数据库一样的形式,设置以后再备份,成功。笔者打破砂锅,把NLS_LANG乱改一下,rman无法登陆, 然后改成空,rman成功登录并且可以备份……至今这段神奇的经历也不知道所以然,反正笔者就记住了要把NLS_LANG设置成和数据库一样……


然 后是身为小白的笔者很搞笑的单独去执行了 delete all input……后来才知道要放在一句backup语句里面,放在backup 语句后面就可以了……通常是这样,backup archivelog all delete all input;在备份归档的时候可以删除归档,如果对于一般的数据文件使用delete all input的话那就会报错。

4.duplex backup
原来以为这个只是简单的定制备份片的copy的份数,没想到自己做实验的时候还是有不少东西可以和大家分享的。
1.用这句命令的话应该是在run {}中,他的作用域也就是自己的这块代码块,不影响其他代码的执行,如果直接在rman>提示符中打入这条语句,那就会报错。
2.区分copies和redundancy,copies再多,一次backup也只是产生一份备份,只是利用存成了不同的名字或者放在了不同的地方而已,也就是说,这句话和redundancy是没有任何关系的。
3. 用这句话必须指定备份片的名字或者目录,如果直接备份(backup tablespace users),通常情况下是直接备份到recovery area里面,但是指定了copies以后就会报错,ORA-19806: cannot make duplex backups in recovery area,如果只指定名字(backup format '%U','%u' tablespace users),那就会将备份放到$ORACLE_HOME/dbs/下。

笔者感想:不知不觉已经写这么长了,本来想把恢复也写进 去的,看篇幅还是分成开吧,rman其实基础的使用并不是很难,但是rman还有是有很多道道可以深入研究的,比如备份优化,压缩备份等,笔者这里对 rman只是浅尝辄止,都是一些最基本的使用,等以后有时间再去细细研究。