码迷,mamicode.com
首页 > 数据库 > 详细

Oracle备份之RMAN

时间:2014-11-19 23:44:54      阅读:412      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   io   ar   os   使用   sp   for   

1.备份:物理备份时文件层次的备份,逻辑备份时数据层次的备份,物理备份为主,逻辑备份作为补充。
物理备份分为用户管理备份和RMAN备份,前者使用SQL命令和OS的cp命令进行文件备份,后者使用RMAN工具份。
Undo Segment:修改记录过程中,记录修改前的状态会被记录到Undo Segment中,这条记录叫作前镜像(before images)。当需要撤销修改比如执行rollback时,就用这条前镜像覆盖现有记录。对于Insert操作,前镜像就是一个空记录,对于Update,Delete操作,前镜像就是修改之前的状态。
2.在数据库恢复过程中,日志和Undo Segment是共同起作用的,二者保证了最终恢复的一致状态。对应两个阶段:前滚(rollforward)和(rollback)。在前滚阶段,在文件上重演日志文件,以把文件恢复到数据库关闭时的状态;但是数据库关闭的时可能很多修改没有提交,这些操作需要回滚,这就需要利用Undo Segment的内容了。
RMAN是一个客户端工具,它本身不能进行真正的恢复工作,真正的工作由服务器上的Server Process完成的,当RMAN连接到数据库,会分配一个Server Process,并由它完成备份恢复操作。备份活动记录可以放在Target Database的控制文件,也可以保存一个单独的数据库catalog,需要考虑catalog数据库备份策略。
3.RMAN支持备份磁盘和磁带,如果使用磁带库,需要通过厂商提供的介质管理库(Media Management Library,MML)进行操作。

Flash Recovery Area空间监控:当空间使用达到90%时,会触发自动删除。删除过程会在alert中记录,如果没有空间可以释放,并且空间使用超过85%,就会记录一个warning日志;如果超过97%,会记录一条critical warning日志,这些日志内容可以从DBA_OUTSTANDING_ALERTS视图中看到。Image Copy不能备份到磁带上,只能备份到磁盘上。
4.备份和恢复:DBA在SCN=100的时刻对数据库做了一个全备份,日志文件(包括归档日志和联机日志文件)中记录了随后的数据库修改操作。在SCN=500的时刻,数据库发生故障,比如因为存储介质故障导致数据文件丢失。这时,就需要从之前的备份中恢复出SCN=500的数据文件,然后在这个文件上重演100--500之间的日志(这些日志在归档日志和联机日志文件中),最后利用UNDO内容对未提交修改进行回滚,最终恢复到SCN=500的一致状态继续对外服务。具体过程如下图:

bubuko.com,布布扣

5.配置备份保留策略:基于恢复窗口和基于冗余的策略。
a.基于恢复窗口的策略:RMAN>configure retention policy to recovery window of 7 days;
保留的备份文件必须要保证恢复到近7天的任意时间点。
恢复窗口用来定义数据库能够恢复到的最早时间点。
假设备份策略是每周执行一次全备,本月1号、14号分作了一次全备,恢复窗口定义是7天,现在日期是23号。对于23号而言,恢复窗口7天就意味着要能确保恢复到7天前(也就是16号)的数据库状态。为了达到这个目的
必须保留14号的全备份和14号之后的所有归档日志,因此,oracle把1号的备份、1号到14号的归档日志评估为过期(Obsolete)并可以删除,而14号的备份以及14号以后的归档日志就不能删除。
b.基于冗余的策略:定义每个文件至少保留几份备份
RMAN>configure retention policy to redundancy 2;
每个文件至少要保留2份备份,如果有3个备份,则按照时间排序,最早那个备份会被评估为过期(Obsolete),可以删除。
c.和保留策略相关的其他操作
(1)查看备份策略:RMAN>show retention policy;
(2)查看过期的Obsolete文件:RMAN>report obsolete;
如果没定义备份策略,report obsolete会报错,RMAN>congfigure retention policy to none;
RMAN>report obsolete;
RMAN-00571:===============================================
RMAN-00569:===========ERROR MESSAGE STACK FOLLOWS=========
RMAN-00571:===============================================
(3)通过指定Recovery Window:
RMAN>report obsolete recovery window of 7 days;
(4)通过指定Redundancy策略:
RMAN>report obsolete redundancy 2;
(5)根据保留策略删除过期文件
RMAN>delete obsolete;
(6)指定Redundancy备份策略:
RMAN>delete obsolete redundancy 2;
(7)指定Recovery Window策略的删除
RMAN>delete obsolete recovery window of 4 days;
(8)禁止保留策略:
禁用备份策略以后,所有的备份都不会被评估为过期(Obsolete)的
RMAN>configure retention policy to none;
6.完全备份和增量备份
如果采用Backup Set方式,全备份就是把数据文件中所有使用到得数据块进行备份;如果采用image copy方式,全备份就是对数据文件一个完整拷贝。而增量备份是把从某一个特定点以来发生变化的数据块做一次备份,这个特定点一般式指上次增量备份的时间点。增量备份产生的文件是backup Set,RMAN只能对数据文件进行增量备份,控制文件,日日志文件不能增量备份。增量备份是在数据块级别上的备份,是对从上次增量备份以来发生变化的数据块进行备份。这个机制有两个优势。其一,介质恢复时,直接用Backup Set中的数据块内容覆盖数据文件中的数据块内容就可以了,而如果使用归档日志进行恢复需要的步骤很多,因此使用增量备份进行恢复要比
使用归档日志进行恢复快得多;其二,增量备份能够获取NOLOGGING操作的数据变化,而这些操作不会被记录到日志上,因此增量备份比只备份归档日志提供更多的数据保护。
7.完全备份:
RMAN>backup database;
RMAN>backup as compressed backupset database;
RMAN>backup as copy database;
例子:先配置控制文件自动备份,然后配置自动备份的控制文件位置在/backup/test/autobackup/,文件格式%F,最后以Image Copy方式对数据库做完全备份,备份文件和数据文件名相同。
run{
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to ‘/bakcup/test/autobackup/%F‘;
    backup as copy db_file_name_convert(‘+data/wxxrzxm‘,‘/backup/test‘) database;
}
在完成数据库备份后,自动备份控制文件,在使用Image Copy方式备份时,通过希望哎指定目录下产生的备份文件和原文件同名,这个可以通过db_file_name_convert参数实现。但注意这个关键字的位置是在datafile或database之前。
RMAN>backup as copy db_file_name_convert=(‘+data/wxxrzxm/datafile‘,‘/backup/test‘) database;
如果想把ASM上的数据文件备份到ASM上,这种方法可能会报错。ORA-15046
RMAN>BACKUP AS COPY DB_FILE_NAME_CONVERT(‘+data/wxxrzxm/datafile‘,‘+arch/wxxrzxm2/datafile‘)database;
ASM是用OMF方式管理数据文件的,OMF方式产生的数据文件名就是tag_name.file_number.incarnation number格式的,其中“incarnation number”是oracle内部产生的用来唯一标识每个文件的数字,这个值不允许手工指定。而上面的命令希望手工指定。因此会报错。
可以用DBCA创建数据库时指去掉OMF功能,去掉OMF的方法就是选择第2个“Use Common Location for all Database Files”。
8.增量备份
a.增量备份只备份发生变化的内容。Oracle是以数据块作为基本存储单位的,每个数据块的块头都有SCN,代表最新的版本号。增量备份通过读取每个数据块头的SCN号,并与上次备份时Checkpoint SCN做比较,如果数据块的SCN大于等于checkponit SCN,就说明这个
数据块可能发生了变化,RMAN就会对这个数据块做一个拷贝,并放在备份文件中。在以前的版本中,Oracle允许定义多个级别的增量备份,在oracle10g只允许0和1两级了,0级相当于做了一次全备份,但是全完备份不能做增量备份的0级使用。增量备份可以加快恢复速度和减少数据丢失,无论备份文件格式Backup Set还是Image Copy都可以享用增量备份的好处,但是只有image copy才能使用增量恢复备份。(Incrementally Updated Backup)
b.增量备份种类
增量备份算法可以分成两类:差异增量备份和累积增量备份
c.差异增量备份(Differential Incremental Backup)
备份要点在于,每次备份的内容是从上次0级或1级备份以来发生改变的内容。比如周日做0级备份,周一到周五都是1级备份,则周一备份的是周一当天发生的改变,依次类推。
差异增量备份的语法:RMAN>backup incremental level=1 database;
d.累积增量备份(Cumulative Incremental backup)
重点在于每次备份的是从上次0级或1级备份以来发生的变化。比如周一备份的是周一发生的变化,周二备份的是周一和周二共2天的变化,周三备份的是周一、周二、周三共3天发生的变化。见图如下:

bubuko.com,布布扣

累积增量备份语法:RMAN>backup incremental level 1 cumulative database;
Level 0:
RMAN>run {
backup as copy db_file_name_convert(‘+data/wxxrzxm‘,‘/backup/test‘) incremental level 0 database tag ‘full_backup‘;
}
Level 1:
RMAN>run {
backup incremental level 1 cumulative for recover of copy with tag ‘full_backup‘ database;
recover coyp of database with tag ‘full_backup‘;
}
9.Block Change Tracing(块改变跟踪)
a.传统的增量备份为了获得需要备份的数据块,必须对数据文件中的所有数据块进行遍历,虽然增量备份减少了备份文件的体积,但是备份效率并不高。
oracle提供了一个特殊的文件叫作Block Change Tracing File,每当数据块发生变化时,相关信息同时记录到这个文件中,这样当RMAN进行增量备份时,
从这个文件就可以获得需要备份的数据块列表,而不必对所有数据块进行遍历,因此提高了增量备份的效率。
b.启动Block Change Tracing
Block Change Tracing功能缺省是关闭的,启用这个功能
SQL>alter database enable block change tracing;
如果不指定文件名称,Oracle会使用缺省的文件位置,这个文件可以从视图中查看:
SQL>select * from v$block_change_tracking;
通过命令手工指定文件位置:
SQL>alter database enable block change tracking using file ‘/u04/oradata/ord/changetracking/chg01.dbf‘;
启动Block change tracking之后就,Oracle会启动一个ctwr进程负责跟踪数据变化。
ps -ef|grep ctwr;
关闭Block Change Tracking
SQL>alter database disable block change tracking;
(1)查看是否启用Block change tracking
SQL>select * from v$block_change_tracking;
(2)1启动功能,指定文件
SQL>alter database enable block change tracking using file ‘/backup/bck‘;
(3)确认修改生效
SQL>select * from v$block_change_tracking;
(4)关闭功能并确认
SQL>alter database disable block change tracking;
select * from v$block_change_tracking;
10.其他的RMAN命令
备份数据库:backup database;
备份归档日志:backup archivelog all;
备份数据库,归档日志、同时删除归档日志:backup database plus archivelog delete input;
Oracle 10g的备份命令增加了duration子句,可以明确告诉Oracle在备份过程中允许的资源消耗,比如希望在2个小时内完成备份:
RMAN>backup duration 2:00 database;
如果在指定的时间无法完成备份任务,RMAN会跑出错误,ORA-19591说明了错误原因是因为超出了指定的时间范围。
如果不希望这种结果,可以使用partial关键字,RMAN会备份尽可能多的文件,而没有来得及备份的文件就会取消。使用Partial时,Oracle推荐同时指定fileperset 1参数,这样能保证产生的每个备份文件都对应一个数据文件。
RMAN>backup duration 0:05 partial database fileperset 1;
如果在指定的时间内没有完成备份,会把未完成的备份任务取消,而已经完成的保留。
使用duration语句时,还可以通过关键字minimize load/time指定希望的负载状态。比如minimize load是希望备份消耗的负载最小。
RMAN>backup duration 0:01 minimize load database;
minimize time是希望花费时间最小:
RMAN>backup duration 0:01 minimize time database;
11.恢复命令
数据库的恢复命令包括两个阶段restore和recover,分别对应者同名命令。
在Oracle10g中,restore命令增加了一个preview子命令,这个命令可以用来提前确定RMAN将使用那些设备进行恢复。
C:/>rman target /
RMAN>spool log to abc.log;
RMAN>restore datafile 1 preview;
RMAN>restore database preview summary;
RMAN>spool log off;
RMAN>exit;
restore datafile 1 preview的输出,可以看出RMAN将选择/backup/test/system01.dbf这个备份文件进行恢复,但是缺少必须的归档日志。
12.查看、检查、维护备份记录
RMAN>list backup;
RMAN>list copy;
如果是EXPIRED或者是X,则说明这个文件不可用,可能从磁盘上删除了。但是RMAN不会自动进行检查,必须使用crosscheck命令检查。
RMAN>crosscheck copy; 输出的failed,succeeded表明检查结果,之后用list命令重新查看,这回对应的文件状态都变成了X,也就是说这些磁盘文件不复存在了。
RMAN>delete expired copy;
13.通过视图查看备份状态
Oracle 10g中新增了2个视图:v$rman_output和v$rman_status,从第一个视图中可以查看每个任务的日志,第2个视图可以查看备份任务的完成状态。
SQL>select output from v$rman_output;
查看每次备份任务的完成状态:
select command_id,row_type,operation,status from v$rman_status order by command_id desc

 

 

转自:http://blog.sina.com.cn/s/blog_a32eff2801011fhn.html

Oracle备份之RMAN

标签:des   blog   http   io   ar   os   使用   sp   for   

原文地址:http://www.cnblogs.com/z-books/p/4109369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!