分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
RMAN恢复原理
首先还是得理解Oracle数据库恢复的一个原理。数据库恢复是指将数据库恢复到一个一致性的状态,整个恢复操作可以分为两个步骤,数据库修复(RESTORE)和恢复(RECOVER)。
Oracle官方文档上关于Restore和Recover的解释:
The two most important RMAN commands used in database recovery are:
- RESTORE, which retrieves files from RMAN backups based on the contents of the RMAN repository
- RECOVER, which performs complete or point-in-time media recovery using available datafiles and redo logs.
Restore是指将要恢复的文件从备份集中读取出来。
Recover是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分REDO,将数据库恢复到指定的时间点。
![](https://i-blog.csdnimg.cn/blog_migrate/2843d5b7c569426b2e27777d1d379678.png)
上图是一个最典型的恢复过程,数据库在SCN=100时执行了数据库备份,在SCN=500时数据库出现介质错误,需要通过备份进行恢复。
操作步骤:
1.首先使用SCN=100时创建的数据库备份将数据库恢复到备份时的状态,这个操作就是修复(RESTORE)。
2.然后重新应用SCN 100~500之间生成的所有重做日志,这个操作就是恢复(RECOVER),最后数据库被恢复到崩溃前的状态。
由上可知,Oracle数据库中的备份恢复必然是先有备份,然后才能做恢复的操作。不管是RMAN备份恢复,或者是用户管理的备份和恢复,恢复操作都是从备份时间点向前进行恢复,不可能直接将当前状态向后恢复到之前的某个时间点(Oracle 10g R2新推出的Flashback Database特性开始支持,直接从当前时间点向之前的时间点恢复)。
RMAN如何选择备份集
很多新接触RMAN的朋友都会有这样的疑问:我执行过很多次备份,早也备份是晚也备份,昨天也备份今天也备份,在恢复的时候,RMAN怎么知道从哪个备份集中选择文件用来恢复呢?
答案其实很简单,RMAN一开始也不知道,它只是遵循固定的规则,按照你的要求去寻找合适的备份集罢了,
首先是寻找最近的可用的备份集(如果没有指定UNTIL子句则从最近的备份开始,如果指定了UNTIL,则从满足UNTIL的备份集开始),
如果能找到,那么运气不错,恢复将会继续正常进行,如果找到了多个,还有更加细致的规则,从中选择一个RMAN觉着最优的备份集来做恢复(如优先选择镜像复制,因为RMAN认为这样恢复时会更快)。如果最终一个备份集都没找到,嘿嘿,那就只有一个选择了:报错。
RMAN能做哪些恢复
在之前的文章
Oracle数据库备份与恢复 - RMAN备份 里,写到了RMAN可以做多种备份,包括:
1.整库备份、2.表空间的备份、3.数据文件的备份、4.控制文件备份、5.归档文件的备份、6.初始化参数文件的备份、7.对备份集备份
对于恢复,RMAN中提供了多种不同级别的恢复方式,你既可以恢复整个数据库,也可以只恢复某个或某几个表空间,或某个或某几个数据文件,还可以单独恢复控制文件、初始化参数文件,或者归档文件。说白了就一条,用RMAN备份的就都能被恢复。
1.对数据库进行完全恢复
如果当前数据库只剩下控制文件和SPFILE,其他数据文件因为某些原因导致全部丢失,不过幸运的是之前创建过整库的备份,并且执行备份操作之后,所有的归档文件和重做日志文件都还在,这种情况下你就可以将数据库恢复到崩溃前那一刻的状态,而这种恢复方式,就叫做完全介质恢复。
做数据库完全恢复,需要数据库处于MOUNT状态(如果数据库处于OPEN状态会
报ORA-19573错误)
启动数据库到加载状态:
RMAN> STARTUP MOUNT;
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 637534672 bytes
Database Buffers 427819008 bytes
Redo Buffers 4603904 bytes
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 637534672 bytes
Database Buffers 427819008 bytes
Redo Buffers 4603904 bytes
执行恢复操作(恢复分两步,有先有后的):
RMAN> restore database;
Starting restore at 15-JUL-15
allocated channel: ORA_DISK_1
channel
Starting restore at 15-JUL-15
allocated channel: ORA_DISK_1
channel