ORACLE恢复原理

一、恢复类型
1、Instance and Crash Recovery
Crash recovery常常用在单例程或者多例程(RAC)失败恢复的情况。Instance recovery指在oracle RAC环境数据库中用正常的例程来恢复失败的例程的场合。
目标:还原位于停止了的例程中的改变了的数据块以及关闭还打开的重做线程,instance and crash recovery仅仅使用在线重做日志和当前在线的数据文件。oracle还一起恢复停止了的例程中重做线程。
特性:
使用当前数据文件,重做所有改变
仅仅是使用线重做日志并且从来不用归档日志
恢复的时间取决于失败的例程数、上上次checkpoint以来产生的重做日志量,以及用户的一些配置,如重做日志文件的大小,checkpoint频率,以及并行恢复设置等。
在两种场合下,oracle可以自动完成恢复:
在单例程或者RAC配置下数据库(crash recovery)所有例程在例程失败后的第一次打开当RAC环境下的一些或其中一个例程失败,恢复会自动通过一个正常的例程完成重要的在crash和instance recovery自动应用重做,提供重做日志而不需要用户干涉,然后可以通过设置服务器及参数,可以优化crash recovery过程,并且可以通过分别地调优rolling forword和rolling back过程,最后还可以调节checkpointing以便优化恢复时间。


2、Media Recovery
媒体恢复又可能分成以下两种情况:
数据文件media recovery
Block media recovery
特别地,一般我们术语“media recovery”就是指恢复数据文件,而块的恢复只能用在rman 恢复中。
1)datafile media recovery
数据文件恢复一般指恢复丢失或者有危险的数据文件或控制文件,也可以用来恢复那些当表空间没有使用offline normal选项进行offline时那些改变丢失。数据文件恢复和例程恢复共同点就是需要是数据库修正并实现其完整性,又因为数据文件恢复有以下特性而不同:
使用被损坏的数据文件的备份应用需要的改变
能使用归档重做日志同在线日志
需要用户干预
不需要探测媒体失败(也就是说,需要还原一个备份)自动地,当一个备份被还原后,然后探测需要用到的恢复会通过媒体恢复自动完成
恢复时间取决于用户策略,(例:备份频率,并行恢复参数)犹胜于oracle内部机制

数据库是不能被打开如果有任何在线数据文件需要媒体恢复,需要恢复的数据文件也不能改为online,直到媒体恢复完成,下面的场合需要媒体恢复。
当还原了一个数据文件的备份
当还原了一个控制文件(即使所有数据文件are current)
当一个数据文件被offline(不管是你还是oracle系统自动) 而没有使用offline normal选项

除非数据库没有被任何例程打开,数据文件媒体恢复只能针对offline datafiles,你可以开始数据文件媒体恢复在打开数据库之前,即使当crash recovery需要执行,crash recovery仍旧会自动运行在数据库打开时。
注意:当一个文件需要媒体恢复时,你必须完成媒体恢复即使所有需要的改变都已经包含在在线重做日志中,换句话说,你必须仍旧执行恢复即使不需要归档日志,媒体恢复会发现没有什么事需要去做,并且会出现错误提示如下‘no recovery required’。

2)block media recovery
块恢复是一种应用在还原和恢复单独数据块的一种技术,直到所有的数据文件保持在线或者可得到。如果失败的介质只局限于数据文件的一个子集中的少数块,这时块恢复可能会是一中更好的选择。
RMAN提供块恢复,如果你还没有使用RMAN作为数据库的恢复解决方案,那么你仍旧可以完成块恢复通过cataloging into the RMAN repository the necessary user-managed datafile and archived redo log backups.

二、在恢复期间重做应用
媒体恢复是通过应用数据文件的重做,当一个数据文件发生改变,所做的改变第一时间会记录在在线重做日志中,媒体恢复选择并应用这些在在线或归档重做日志中的改变的记录,并在restored datafile基础上前滚。
主要有以下几个内容:
about redo application
cache recovery
transaction recovery
1、about redo application
在sga中的数据缓冲区在需要的时候会被写到磁盘,应用lru算法,并有dbwn进程应用这个算法去写数据缓冲区中的数据到数据文件,数据文件有可能包含一些块的修改通过未提交的事务以及提交事务中的一些丢失的块
当例程失败会包含两个潜在的问题:
在提交时间,数据块的修改还没有来得及写到数据文件这时仅仅是在redo log中,因此重做日志包含改变需要被应用到例程恢复过程中去
在前滚阶段之后,数据文件可能包含未提交的改变在失败的时刻,这些未提交的改变必须回滚保证数据一致性。这些改变有可能被保留在数据中当失败之前,或者前滚阶段。
所以,数据库需要分两步来执行,前滚和回滚,rolling with the redo log(cache recovery)和rolling back with the rollback or undo segments(transaction recovery)

2、cache recovery
在线重做日志是一系列操作系统文件用来记录数据库的所有改变,包括数据,索引,回滚段,不管改变是提交或者是未提交,所有对数据块的改变都被记录到在线重做日志中。
在例程或介质失败后恢复的第一步被称为cache recovery or rolling forward,包括应用所有对于数据文件的改变的在线重做日志,因为回滚数据也记录在重做日志中,前滚操作也重新生成相应的回滚段
前滚通过许多需要的重做日志文件把数据库运送到一个时间点上,前滚常常包括在线重做日志文件 (instance recovery or media recovery)和可能包括归档重做日志(media recovery only)
前滚操作后,数据块包含所有已提交的数据,也可能包含未提交的改变在失败前被保存在数据文件中,或者被记录在重做日志中和在cache recovery过程引入的。

3、transaction recovery
oracle可以运行在manual undo management mode 或者 automatic undo management mode下,下手工模式中,你必须创建和管理回滚段去保存修改前数据的影象(before-image),在自动撤消管理模式中,需要创建一个或多个 undotablespaces,这些撤消表空间包含撤消段类似传统的回滚段。
撤消块记录数据库的行为以便将要因某些操作中需要undone,在数据库恢复中,undo block回滚那些在前滚阶段中未提交的受影响的事务。
前滚后,任何未提交的事务改变都必须undone,oracle应用undo block去回滚数据块中未提交的改变,这些需要回滚的数据块是在crash前被写入的或者在cache recovery过程中redo application 中引入的。这个过程被称为回滚或者事

务恢复。
oracle可以根据需要同时回滚多个事务,所有在失败时间还在活动的事务会被标志为dead,取而代之是等待smon进程去回滚dead transactions,新的事务能自身恢复块级事务去得到行锁他们需要的。

三、完全和不完全介质(media)恢复
媒体恢复更新一个备份到当前状态或者非当前的一个时间点,实行一个媒体恢复时,能去恢复整个数据库,一个表空间,或者一个数据文件,在任何场合,总是需要一个备份来实现恢复。

1、Complete Recovery
完全备份包括使用重做数据或者增量备份联合一个备份有关数据库,表空间或者数据文件去更新到一个非常current的时间点,完全备份上oracle应用所有的重做改变包含归档和在线重做日志到备份上,特别地,去完成完全介质恢复在数据文件湖者控制文件失败后。
你可以实现完全恢复应用到一个数据库,表空间及数据文件,如果完全恢复一个数据库,不管是使用RMAN或SQL*PLUS你都得必须:
a、mount the database
b、确定你想恢复的数据文件online
c、还原(restore)一个你想恢复的全库或者文件备份
d、应用在线或者归档重做日志,或者两者的组合
如果正在进行一个表空间或者数据文件的完全恢复,你必须做以下事情:
a、使将要恢复的表空间或者数据文件offline,如果是数据库打开的情况下
b、还原你计划要去恢复的文件的备份
c、应用在线或者归档重做日志,或者两者的组合

2、Incomplete Recovery
不完全恢复是使用一个备份制造出一个不是当前版本的数据库,换句话说,你不是aply所有产生的日志记录在最近的备份之后,一般实现全库的不完全恢复有以下几种情况:
a、在线重做日志被破坏部分或者全部
b、一个用户错误导致数据丢失,例如,误删除一个表
c、因为一部分归档日志丢失,而不能实现完全恢复
d、丢失当前控制文件并且必须使用一个备份的控制文件去打开数据库
去完成不完全恢复,你必须从一个你想恢复到的时间之前的备份中还原所有的数据文件,并且当你恢复完成后打开数据库使用resetlogs选项,resetlogs操作创建一个新的数据库的替身,换句话就是,一个数据库将使用新的日志序列号从log sequence 1开始。
1)表空间基于时间点的恢复(tablespace point-in-time recovery,TSPITR)
TSPITR特性能使你去恢复一个或多个表空间到to a point-in-time that is different from the rest of the database,TSPITR在以下一些要实现的情况下非常有用:
a、恢复一个错误的drop 或者 truncate table 操作
b、恢复一个逻辑损坏的表
c、从一个不正确的批处理或者其他的会对数据库的一部分产生影响的其他dml语句中恢复
d、恢复一个单独的模式到不同于其他物理数据库的一个点
e、恢复一个表在一个很大的数据库(VLDB)rather than restore the whole database from a backup and perform
a complete database roll-forword
媒体恢复选项
Type of Recovery Function
Time-based recovery Recovers the data up to a specified point in time.
Cancel-based recovery Recovers until you issue the CANCEL statement (not available when using Recovery

Manager).
Change-based recovery Recovers until the specified SCN.
Log sequence recovery Recovers until the specified log sequence number (only available when using Recovery Manager).

四、rman和user-managed restore and recovery
两中恢复物理文件的基本方法是:
使用RMAN去还原和恢复数据库
还原备份使用操作系统命令,恢复通过执行SQL*PLUS Recover 命令

无论哪种方法,你都可以用来恢复一个数据库,表空间或数据文件,在实现媒体恢复之前,需要去决定是哪个数据文件需要恢复,通常可以使用固定视图V$RECOVER_FILE,这个视图列出了所有需要恢复的文件及需要恢复的错误原因解释说明。
1、RMAN Restore and Recovery
基本的RMAN恢复命令是:restore和recover,使用restore去从备份集(backup sets或image copies)restore数据文件,还原到它们目前的位置或者到一个新的位置,你也能restore backup sets包含归档重做日志,使用RMAN recover

命令去完成媒体恢复和应用归档日志或者增量备份。
RMAN自动恢复和还原backups and copies这个过程,例如,运行以下命令within RMAN去还原和恢复数据库到当前状态
SHUTDOWN IMMEDIATE; # shuts down database
STARTUP MOUNT; # starts and mounts database
RESTORE DATABASE; # restores all datafiles
RECOVER DATABASE; # recovers database using all available redo
ALTER DATABASE OPEN; # reopens the database

2、User-Managed Restore and Recovery
如果你不使用RMAN,那么你能使用os copy工具还原备份并且使用sql*plus recover命令去恢复数据库,必须有以下基本步骤:
1)在证实了那些文件是危险之后,把数据库置于合适的状态便于还原和恢复,例如,如果是一些而不是所有的数据文件是受损的,那么只需要使有影响的表空间offline 当数据库处于打开状态时。
2)使用操作系统工具如copy去还原备份,如果你没有一个备份,如果你拥有自从该数据文件创建以来的所有重做日志以及控制文件包含这个受损的文件信息,那么也可以进行恢复。
如果还原备份到一个新的位置而不是原来的位置,那么需要在控制文件里面改变这个位置的信息
3)还原任何需要的归档重做日志文件
4)使用sql*plus recover命令去恢复这个数据文件的备份
例如:假如丢失了/oracle/dbs/users1.dbf这个数据文件,该数据文件包含在users表空间中,这时出现了media failure,假定有一个备份是/dsk2/backup/user1.dbf在另一个分开的磁盘上,通过查询该数据文件的数据返回了一个

数据文件丢失的警告提示,那么将需要去进行media recovery恢复。
步骤如下:
a、sql>alter tablespace user offline immediate;
b、% cp /dsk2/backup/users1.dbf /oracle/dbs/sers1.dbf
c、sql>recover automatic datafile '/oracle/dbs/user1.dbf';
d sql>alter tablespace users online;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值