Concept-第15章翻译

15 备份和恢复

备份和恢复过程防止数据库的数据丢失并且在数据丢失时可以重新构建数据。数据的重新构建是通过介质恢复实现的,介质恢复包括各种操作:数据库文件的备份文件的恢复,前滚以及回滚。这篇文章介绍了基本的概念来设计一个备份和恢复策略。

这篇文章包含下面的主题:

*备份的介绍

*恢复的介绍

*决定使用哪个恢复技术

*回闪恢复区域

 

备份的介绍

一个备份是一个数据的复制品。这种复制品包括数据库的重要部分,比如:控制文件和数据文件。一个备份是一个对意外数据丢失和应用程序错误情形的一种数据保护。如果你丢失原始数据,然后你能够通过一个备份来重新构建数据。

备份被分为物理备份和逻辑备份。物理备份,在数据库备份和恢复策略中是主要的焦点,是物理数据库文件的复件。你可以使用或者恢复管理(RMAN)工具或者操作系统工具来制作物理备份。相反,逻辑备份包含使用oracle工具抽取的和以二进制存储的逻辑数据(例如;表和存储过程)。你可以使用逻辑备份来补充物理备份。

有两种方式来执行oracle备份和恢复:恢复管理(RMAN)的备份和恢复和手动管理的备份和恢复。

恢复管理(RMAN)是一个能够备份和恢复数据库文件的oracle工具。这个是oracle数据库的一个特性并且需要单独的安装。

你也可以使用操作系统命令备份和SQL*PLUS来恢复。这种方法,也叫手动管理的备份和恢复,也oracle技术所支持,尽管oracle推荐使用使用RMAN因为RMAN会更加地稳健并且使管理更加简单化。

无论你使用RMAN还是手动管理方式,你可以使用EXPORT工具所生成的对象的逻辑备份补充你的物理备份。EXPORT工具将来自oracle数据库中的数据写进二进制的操作系统文件中。你可以一之后使用Import来恢复这个数据到一个数据库中去。

这部分包含下面的内容:

*一致和不一致的备份

*整个数据库和部分数据库备份

*RMAN和手动备份

 

一致和不一致的备份

一致的备份是其中被备份的文件包含都到达同一个系统改变号(SCN)的所有变更。这意味着在备份中的所有文件包含来自同一个时间点上的所有数据。不象不一致备份,一致的整个数据库备份在它恢复之后不需要任何其他恢复操作。

不一致的备份是当数据库被打开或者当数据库被不正常关闭的情形下对一个或者多个数据库文件的一个备份。

 

一致的备份

一致的一个数据库或者数据库部分的备份是所有的读/写数据文件和控制文件是已经被检查过并且是具有同样的SCN的一个备份。

制作一致的整个数据库备份的仅有的方式是使用normal,immediate,transactional选项来关闭数据库并且当数据库被关闭时所制作的备份。如果一个数据库没有完全关闭,例如:一个实例故障或者你使用shutdown abort语句来关闭数据库,然后数据库文件总是会处于不一致的状态除非数据库是一个只读数据库。

在一个数据库检查点操作期间oracle使控制文件和数据文件一致的处于同一个SCN。在一致的备份中允许具有旧的SCNs的仅有的表空间是只读的并且是脱机的正常表空间,这些表空间在备份中仍然是和备份中的其他文件处于一致的状态因为对这些表空间没有做过任何改变。

重要的一点是在恢复一个一致的整个数据库备份之后你可以不需要做任何恢复的打开数据库,因为数据已经处于一致状态:不需要对恢复数据文件做任何的纠正。因此,你可以恢复一年前的一致的数据库备份并且不需要运行介质恢复和不需要oracle运行实例恢复。当然,当你没有应用redo来恢复一个一致的整个数据库备份,你将丢失自从备份之后以来的所有所做的事务。

一致的整个数据库备份是在非归档模式下的数据库中仅有的有效的备份选项,因为非一致备份所做的复原数据库需要恢复操作来确保数据库处于一致。在非归档模式中,oracle不需要对redo日志文件归档,所以需要的redo日志文件可能不会在磁盘中存在。一致的整个数据库备份对于在归档模式下运行的数据库中也是一个有效的备份选项。当这种备份类型被恢复并且归档日志是可获取的,你可以立即打开数据库并且会丢失一些自从备份之后所做的一些事务操作,或者应用归档日志文件来恢复这些事务。

 

不一致的备份

一个不一致的备份是被备份的文件所包含的所有改变不具备相同的SCNs。换句话说,一些改变在备份文件中是缺少的。这意味着在备份中的文件包含来自不同时间点上的数据。这种情况是可能发生的因为当备份在被制作时数据文件正在被修改。Oracle恢复通过读取所有的归档和在线日志文件来使不一致的备份处于一致状态,从数据文件头中的任何一个带有最早的SCN开始,并且将来自日志文件中的变更应用到数据文件中。

如果数据库必须连续一天24小时,一周7天不同停地工作,这样你没有选择只有执行对整个数据库的不一致恢复。一个在线数据文件的备份被称为在线备份。这个需要你的数据库运行在归档模式下。

如果你运行数据库在归档模式下,然后你没有必要在一次就备份整个数据库。例如;如果你的数据库包含7个表空间,并且如果你每天晚上备份控制文件和一个不同的表空间,然后在一周之内你将备份数据库中所有的表空间以及控制文件。你可以考虑这种交错的数据库备份作为数据库的完全备份。但是,如果这样的一个交错备份必须被恢复,然后你需要使用自从上次备份以来所创建的所有的归档日志文件来恢复。

注意;oracle强烈地推荐在非归档模式下不要做不一致的关闭数据库的备份。如果这样的一个备份被用来恢复数据库时,然后会导致数据损坏。

 

     归档没有被归档的重做日志文件

在联机备份或者关闭数据库后进行的不一致备份之后,总是要通过归档所有未归档的重做日志文件来保证你有必要的重做日志来恢复备份。

 

备份归档日志和控制文件

oracle建议备份在备份期间的所产生的所有归档日志,并且然后在备份完成之后备份控制文件。如果你没有在备份期间的所产生的所有归档日志,然后你不能够恢复备份因为你没有必要的使数据库恢复一致的所有重做日志记录。

 

整个数据库和部分数据库备份

这部分包含下面的内容:

*整个的数据库备份

*表空间备份

*数据文件备份

*控制文件备份

 

整个数据库备份

一个整个数据库备份是数据库中的每个文件的一个备份,加上控制文件。整个数据库备份是备份中最常见的类型。

整个数据库备份能够在归档模式下或者在非归档模式下。在运行整个数据库备份之前,要注意备份是归档模式下还是在非归档模式下。

5-1说明显示了数据库完全备份时所有有效可能的备份方案

5-1 全备份的方案

数据库完全备份既可以是一致性备份或者是不一致的备份。一个备份是否是一致的备份将决定在恢复这个备份之后是否需要应用重做日志。

 

表空间备份

一个表空间备份是对组成表空间文件的备份。例如;如果users表空间包含数据文件234,然后表空间users的备份就是备份这三个数据文件。

表空间备份,不管是联机的还是脱机的备份,如果数据库是在归档模式下运行的话这些备份都是有效的。原因是重做日志可以被获取用来恢复该表空间并且恢复为和其他表空间能够保持一致。

 

数据文件的备份

一个数据文件备份是一个单独的数据文件的备份。数据文件备份,没有表空间备份频繁使用,在归档模式下是有效的。在非归档模式下只有在下面的时间一个数据文件备份才是有效的:

*在表空间的每个数据文件被备份。你不能够恢复整个数据库除非所有的数据文件都被备份。

*数据文件是只读的或者是处于脱机状态下的。

 

RMAN和手动管理备份

有两种类型的备份;镜象副本和备份集。镜象副本是数据文件,控制文件或者归档日志文件的一个完全一致的副本。你可以使用操作系统工具或者使用RMAN来创建物理文件的副本,并且你可以使用或者操作系统或者RMAN工具来恢复这些副本就象没有执行过额外的处理一样。

注意;不象操作系统复制,RMAN验证在文件中的数据块的有效性然后在资料库中记录这些副本。

备份集是由被称为备份成员的一个或者多个物理文件组成的,并且其格式是RMAN的自有格式。备份集不同于镜象副本因为备份集包含不止一个数据库的文件,并且备份集是使用特别的处理方式来来备份的,比如:备份的压缩或者增量备份等。你必须使用RMAN工具来恢复一个备份集。

 

使用RMAN进行联机备份

因为在联机备份过程中数据库连续地向数据文件中写数据,在数据块中会有备份了不一致数据的可能性。例如;假设当数据库写进程在更新数据块的过程中RMAN工具或者操作系统工具读数据块。在这种情形下,RMAN或者复制工具可能会读取数据块顶部的旧数据并且读取在数据块底部的新数据。数据块是一个无效的数据块,意味着这个数据块中的数据上一不一致的。

在使用RMAN备份过程中,oracle数据库服务负责读数据文件,而不是操作系统读数据文件。服务读每个数据块并且决定是否这个数据块是无效的。如果这个数据块是无效的,然后oracle重新读该数据块直到oracle获得一致的数据块。

当你使用操作系统工具(而不是使用RMAN)来备份联机数据文件时,你必须使用不同的方法来处理无效的数据块。你必须在备份模式下使用alter tablespace begin backup语句来首先放置文件来备份一个单独的表空间,或者使用alter database begin backup语句来备份整个数据库。在一个联机的备份结束之后,你必须运行alter tablespace…end backup或者alter database end backup语句来使表空间不再在备份模式下。

当更新那些在备份模式下的文件时,额外的重做数据被记录下来。需要额外的数据来修理那些操作系统工具备份过程中可能包含的无效的数据块。

 

控制文件备份

备份控制文件是备份和恢复中最重要的最关键的一个方面。没有控制文件,你不能够加载数据库或者不能够打开数据库。

无论你什么时候运行备份作业,你可以命令RMAN工具来自动地备份控制文件。这个命令是CONFIGURE CONTROLFILE AUTOBACKUP。因为自动备份是使用默认的文件名,即使RMAN资料库不能被访问RMAN工具也能够恢复数据库。因此,这个特征在灾难情景下是非常有用的。

你能够使用下面的方法来对控制文件进行手动备份:

*RMAN中的BACKUP CURRENET CONTROLFILE命令会对控制文件制作一个二进制的备份,这个备份或者是备份集或者是镜像副本。

*SQL语句alter database backup controlfile制作一个控制文件的二进制备份。

*SQL语句alter database backup controlfile to trace会将控制文件的内容导到一个SQL脚本文件中去。你可以使用这个脚本来创建一个新的控制文件。跟踪文件备份有一个主要的劣势:它们不包含归档重做日志的任何记录,以及RMAN备份和副本。因为这个原因,二进制格式的备份是更好的选择。

 

归档重做日志文件备份

归档重做日志文件上对于恢复一个不一致的备份来说是最基本的。如果没有归档日志那么恢复一个不一致的备份仅有的方式是使用RMAN的增量备份。为了能够恢复一个备份到最近的日志点,那么则需要从复原点到最近日志点之间的所有产生的日志文件。换句话说,如果日志173丢失的话你就不能从日志点100恢复到日志点200。如果日志点173丢失的话,然后你必须在日志点172停止恢复并且使用resetlogs选项来打开数据库。

因为归档重做日志文件对于恢复来说是最基本的。。你应该周期地备份这些归档文件。如果可能的话,然后周期地将这些归档文件备份到磁带中去。

你能够通过下面的方法来备份归档日志文件:

*RMAN工具中的BACK ARCHIVELOG命令

*RMAN中的BACKUP …PLUS ARCHIVELOG命令

*操作系统工具

 

恢复的介绍

恢复数据文件或者控制文件的一个物理备份就是重新构建这些文件并且让数据库服务端能够使用它们。恢复一个复原的数据文件就是通过应用归档日志文件和联机重做日志文件来更写这些数据文件,这些归档日志文件和联机重做日志是在备份过后对数据库所做的变更记录。如果你使用RMAN工具,然后你也能够使用增量备份来恢复数据文件,增量备份是只包含自从上一次增量备份之后数据文件中对数据块所做的变更的备份。

在必要的文件恢复之后,介质恢复必须通过用户来发起。无论什么时候一个变更发生在一个数据文件中,这些变更被首先记录在联机重做日志文件中。介质恢复有选择地将在联机和归档重做日志文件中记录的变更应用到复原的数据文件中来进行前滚操作。

为了纠正由于逻辑数据损害或者用户错误所造成的问题,你可以使用oracle回闪功能。 Oracle回闪数据库和oracle回闪表让你很快的恢复到前一个时间点上。

15-2说明数据库上备份,恢复,以及执行介质恢复的基本原则

15-2 介质恢复

 

不象介质恢复,在实例故障之后oracle执行崩溃恢复和实例恢复。使用崩溃和实例恢复的方法来恢复一个数据库到实例故障之前的一个事务一致的状态。通过定义,崩溃恢复是对单实例系统发生崩溃或 Oracle RAC 系统中所有实例发生崩溃后进行的恢复。相反,实例恢复是在RAC配置中的正常实例对故障实例进行的恢复。

这部分主要包含下面的内容:

*介质恢复的介绍

*RMAN和手动复原和恢复的介绍

*使用oracle回闪技术恢复

*其他类型的数据库恢复

 

介质恢复

使用备份文件并且应用重做日志来恢复的类型被称为介质恢复。介质恢复能够将一个复原的备份更新到当前时间点或者介质故障之前的某个指定的时间点。通常这个“介质恢复”术语专指对数据文件的恢复。当在一个或者多个文件中的一些数据块被破坏时数据块介质恢复是你可以使用的一个更加特别的恢复操作。无论进行哪种恢复,首先都需要备份复原数据。

这部分内容包括下面的内容:

*完全恢复

*不完全恢复

*数据文件介质恢复

*数据块介质恢复

 

完全恢复

完全恢复使用重做数据或者增量备份并且结合一个数据库,表空间,或者数据文件的备份来更新数据库到最近的时间点上。这个叫完全恢复因为oracle对复原备份之后的数据应用包含在归档和联机日志文件中的所有的重做变更。通常,在一个介质故障损坏数据文件或者控制文件之后你可以执行完全的介质恢复。

你可以对数据库,表空间,或者数据文件运行完全的恢复。如果你正在对整个数据库进行完全的恢复,然后你必须:

*加载数据库

*确保你想恢复的所有数据文件是联机的

*复原你想恢复的整个数据库或者文件的一个备份

*应用联机的或者归档的重做日志,或者两者的结合

 

如果你正在对表空间,或者数据文件运行完全恢复,然后你必须:

*如果数据库处于打开状态,将需要被恢复的表空间或者数据文件脱机

*复原你想恢复的数据文件的一个备份

*应用联机或者归档重做日志,或者是两者的结合

 

不完全恢复

不完全恢复或者称为时间点上的恢复,指没有将数据库恢复到当前时间点上的恢复。换句话说,你不能够应用在最近的一次备份之后所产生的所有的重做记录。你通常在下面的情形下运行整个数据库的不完全恢复:

*介质故障破坏了一些或者所有的联机日志文件

*一个用户错误引起的数据丢失,例如;一个用户不注意地删除了一张表

*你不能执行完全恢复因为一个归档重做日志文件丢失了

*你丢失了当前的控制文件并且使用一个备份控制文件来打开数据库

 

为了运行不完全介质恢复,你必须得到你想恢复的时间点之前的备份,然后复原所有的数据文件,并且当恢复完成时使用resetlogs选项来打开数据库。Resetlogs操作会为数据库创建一个新的化身,换句话说,使数据库使用新的一套日志序列号(从1开始),使当前的数据库和重做日志有效。

在一个不完全恢复之后使用open resetlogs命令以读/写模式来打开数据库之前,首先以只读模式打开数据库是一个好主意,并且之后检查数据来确保数据库被恢复到一个正确的时间点上。如果恢复到一个错误的时间点上,如果open resetlogs命令还没有执行可以很容易地通过重新运行恢复来使恢复到一个正确的时间点上。如果你以只读模式打开数据库发现恢复结果早于指定的时间点,可以重新运行恢复到指定的时间点上。如果发现恢复结果超过了指定的时间点,然后你必须重新复原数据库并且重新运行恢复操作。

注意;回闪数据库操作也是一种进行不完全恢复的方法。

 

表空间按照时间点恢复

表空间按照时间恢复(TSPITR)特征让你恢复一个或者多个表空间到一个与其他表空间不同的时间点。TSPITR在下面的情况下使用是最有用的:

*因错误地删除或者清除表而进行的恢复

*恢复一张逻辑上已经受损的表

*由于不正确的批作业或者是其他DML语句的执行影响到数据库中的部分数据,因而需要的恢复

*将一个独立的方案恢复到于一个物理数据库中其他方案不同的时间点上。(在数据库中不同的方案使用不同的表空间)

*恢复一个大型的表空间而不用使用复原整个数据库然后执行一个完整的数据库前滚

 

TSPITR

*你不能在SYSTEM表空间,UNDO表空间,或者任何包含回滚段的表空间上使用TSPITR

*包含相互依赖的数据的表空间必须一起恢复,例如;如果在不同的表空间上有两张表并且这两张表之间有外键关系,然后这两个表空间必须被恢复到同一个时间点上;你不能只恢复这两个表空间中的一个。当oracle检查到通过数据库约束显式地声明数据之间的关系,oracle会强制保证这种恢复的同时性。数据库也会存在没有使用数据库约束但是确实存在这种数据之间的关系。Oracle不能检查到这些,并且DBA必须对于恢复一致的表空间集合要非常小心注意。

 

不完全的介质恢复

因为你不能完全恢复数据库到最当前的时间点上,你必须告诉oracle什么时候停止恢复。你可以执行下面几种类型的介质恢复:

恢复类型

功能

基于时间的恢复

恢复数据到一个指定的时间点上

用户控制的恢复

恢复直到你声明cancel这个语句(当使用RMAN时这个是无效的)

基于SCN的恢复

恢复到一个指定的SCN

按重做日志序号恢复

恢复到一个指定的重做日志序号(当使用RMAN时才可以使用这种恢复)

 

数据文件介质恢复

数据文件介质恢复是对当前的数据文件或者控制文件受损或者丢失的情况下进行的恢复。当一个表空间没有使用offline normal选项正常脱机,造成变更的数据丢失的情形下也可以使用数据文件介质恢复。数据文件介质恢复和上实例恢复都是用来修复数据库的完整性。但是,这两种恢复在特性上都有不同的地方。介质恢复有下面的特征:

*对受损数据文件复原之后的文件应用重做日志中记录的改变

*既可以使用归档日志也可以使用联机重做日志

*需要用户显式地调用

*不能自动检测介质故障(也就是不能自动执行复原操作)。实在数据库已经被复原之后,可以自动检测是否需要介质恢复来恢复数据

*恢复所需的时间是由用户所采用的备份和恢复策略所决定(例如:备份的频率,并行恢复参数,自从上次备份以来数据库事务的数量),而不是由oracle内部机制所决定。

 

如果联机数据文件需要介质恢复,数据库是不能够被打开的,此需要介质恢复的数据文件也不能够联机直到介质恢复结束之后才能够联机。下面的情形是需要介质恢复的:

*使用备份复原了一个数据文件

*你使用备份复原了一个控制文件(即使所有的数据文件是最新的)

*数据文件脱机时(无论是使用手动执行的还是oracle自动执行的)没有使用offline normal选项

 

在数据库被实例打开时,数据文件的介质恢复只针对脱机的数据文件进行操作。当只需进行崩溃恢复时,你也可以在数据库被打开之前执行介质恢复操作。如果这样,崩溃恢复也会在数据库被打开时自动地运行。

注意当一个文件需要介质恢复时,你必须执行介质恢复即使所有必须的变更都包含在联机日志文件中。换句话说,即使无需应用归档日志文件你也必须运行介质恢复。如果对无须介质恢复的文件进行调用介质恢复,介质恢复发现自己无须做任何处理,然后发出“无需恢复”的错误。

 

数据块介质恢复

当数据库所有的文件保持联机并且是处于可获取状态时,数据块恢复是一种用来复原和恢复单个数据块的技术。如果损坏是仅限制在数据库文件集合中一些数据块中,然后对于数据文件的恢复来说采用数据块介质恢复的方法是比较好的。

数据块恢复的接口是由RMAN提供的。如果你没有准备使用RMAN作为主要的备份和恢复策略,然后你可以将必要的手动管理的数据文件和归档日志文件备份添加到RMAN的资料库中去,然后也可以执行数据块介质恢复。

 

RMAN和手动管理的复原和恢复的介绍

在恢复物理文件的两个基本方法中你有一个选择,你可以:

*使用RMAN工具来复原和恢复数据库

*通过操作系统工具的方式复原备份,并且然后通过在SQL*PLUS下使用RECOVER命令运行这个恢复操作。

无论你选择哪种方法,你可以恢复一个数据库,恢复一个表空间或者恢复数据文件。在执行介质恢复之前,你需要决定哪个数据文件需要恢复。经常你可以使用固定的视图V$RECOVER_FILE来查看哪些文件需要恢复。这个视图列出了需要恢复的所有文件和解释了导致错误从而需要恢复的原因。

 

RMAN复原和恢复

基本的RMAN恢复命令是RESTORERECOVERRESTORE命令可以来使用备份集或者磁盘上的镜像副本来复原数据文件到当前位置或者到一个新位置。你也可以复原包含归档重做日志文件的备份集,但是这个通常是不需要的,因为RMAN自动地复原在恢复过程中需要的归档日志并且在恢复完成之后自动删除它们。使用RMANRECOVER命令来执行介质恢复并且应用归档日志或者是增量备份。

RMAN使恢复和复原你的备份和副本的过程自动化。

 

手动管理的复原和恢复

如果你不使用RMAN,然后你能够使用操作系统工具来复原备份并且在SQL*PLUS中运行RECOVER命令来恢复数据库。你必须遵循下面的这些基本的步骤:

1、  在识别出哪个文件受损之后,然后将数据库放置适当的状态以便数据库复原和恢复。例如:如果一些数据文件但不是所有数据文件受损,当数据库处于打开状态时然后将受影响的表空间脱机;

2、  使用操作系统工具复原文件。如果你没有一个备份,如果你有自从当数据文件被第一次被创建和控制文件包含受损文件的名字那个时间点以来的必要的重做日志文件。那么执行恢复操作是可能的;

如果你不能够复原数据文件到它的原始位置,然后重新放置被复原的数据文件并且在控制文件中改变其对应的位置;

3、  复原任何必要的归档重做日志文件;

4、  SQL*PLUS中使用RECOVER命令来恢复数据文件的备份

 

使用oracle回闪技术实现恢复

为了纠正由于逻辑数据受损或者用户错误所导致的问题,你可以使用oracle回闪技术。数据库回闪和表回闪让你很快恢复到之前的时间上。

这部分包含下面的内容:

*oracle回闪介绍

*表回闪介绍

 

数据库回闪介绍

数据库回闪技术让你很快地恢复数据库到一个之前的时间点上来纠正由于逻辑数据受损或者用户错误操作造成的问题。

如果oracle管理的磁盘区域,被称为回闪恢复区域被配置的话。并且如果你使用了回闪功能,然后你可以使用RMANSQL中的FLASHBACK DATABASE命令来将数据库恢复到之前的一个时间点上。回闪数据库不是真正的介质恢复,因为它不包含复原物理文件的过程。但是,回闪在一些情况下更倾向于使用RESTORERECOVER命令,因为这样更快更简单,并且不需要复原整个数据库。

为了回闪一个数据库,oracle使用过去的数据块镜像来收回对数据库所做的变更。在正常的数据库操作期间,oracle偶尔地在回闪日志中记录这些数据块镜像。回闪日志是顺序地写的,并且这些回闪日志不归档的。Oracle自动地创建,删除,并且重新设置在回闪恢复区域中的回闪日志区域的大小。为了监控性能你只需要关注回闪日志,以及为了存储回闪日志决定需要分配多少的磁盘空间给回闪恢复区域。

回闪一个数据库所消耗的时间是和你需要将数据库回溯到多长的时间是成比例的,而不是复原和恢复整个数据库所花费的时间(这个时间可能会更长)。在回闪日志中的前镜像只用于将数据库复原到过去的一个时间点上,并且向前恢复是用来将数据库放置到过去的某个时间点上的一致状态下。Oracle只能将数据文件恢复到过去的某个时间点上,但是不能恢复其他文件,例如;初始参数文件。

 

回闪表功能的介绍

Oracle回闪表功能让你使用一个语句将表恢复到一个指定的时间点上。当数据库处于联机状态时,你可以复原表数据,以及相关的索引,触发器,以及约束,来撤消对特定表的所有变更。回闪表不能处理物理损坏的故障,例如;磁盘受损或者数据段和索引的不一致问题。

回闪表就象一个自我服务的修复工具工作。假设一个用户意外地删除了表中以些重要的记录,并且想恢复这些被删除的记录。你可以使用FLASHBACK TABLE语句来复原该表到删除之前的时间点上并且查看在该表中的那些丢失的数据。

你可以将表以及表中的内容回复到一个指定的时间点上回者用户指定的SCN上。使用回闪版本查询和回闪事务查询来确定表应该回闪恢复到哪个具体的时间点上。

为了使回闪表能够成功,系统必须保留足够的回滚信息来满足指定的SCN和时间点的回滚,并且复原的数据也不违反定义在该表上的完整性约束。并且被还原的表必须允许行移动。

你使用回闪表功能能够还原到多长时间之前取决于系统的还原信息保留周期参数。Oracle 10g 数据库自动地调整这个叫还原信息保留周期的参数值。这个参数表示在旧的还原信息即被提交的事务的旧信息保留多久就会被覆盖。数据库收集使用统计信息并且根据这些统计信息和回滚表空间的大小来优化还原信息保留周期。

注意:oracle强烈地推荐你使用自动回滚段管理模式来运行数据库,设置还原信息保留周期到足够的大来包含你期望需要的最旧的数据。

 

Oracle恢复的其他类型

这部分包含下面的内容:

*重做应用的概述

*实例恢复和崩溃恢复的概述

 

重做应用的概述

SGA中的缓冲区中的数据库缓冲数据只有当必要的时候依据最近最少使用算法来才会被写进磁盘中去。由于数据库写进程使用这种算法来将数据库缓冲数据写进数据文件的这种方式,数据文件可能包含一些被未提交的事务所修改的数据块,还有一些被已提交的事务修改过的数据块但是没有包含在数据文件中。

如果一个实例故障发生的话,两个潜在的问题可能会导致:

*被事务修改的数据块可能在提交的时间点上没有写进数据文件并且可能只出现在重做日志中。因此,重做日志包含在恢复过程中必须被重新应用到数据库中的变更记录;

*在前滚结束之后,数据文件能够包含在发生故障的时间点上但还没有提交的事务所做的变更。这些未提交的变更必须被回滚以确保事务的一致性。这些变更或者在故障发生之前被保存或者在前滚阶段被写入数据文件。

为了解决这个问题,一个系统故障恢复过程oracle一般分两步来操作:使用重做日志文件来进行前滚(缓冲恢复)以及使用回滚段或者撤消表空间来进行回滚操作(事务恢复)。

 

缓冲恢复概述

联机重做日志是记录在数据库数据块上所做的所有变更的操作系统文件的一个集合,包括数据,索引,以及回滚段,不管这些变更是否已经被提交或者还没有被提交。对oracle数据块的所有变更都被记录在联机日志文件中。

从一个实例故障或者磁盘故障中恢复的第一步被成为缓存恢复或者叫前滚,这步也包括重新应用在重做日志文件中的所有变更到数据文件中去。因为回滚数据也别记录在重做日志中,前滚也重新产生了相关的回滚段。

前滚就是利用必要的重做日志文件来将数据库前滚到某个时间点上。前滚通常包括联机重做日志文件(实例恢复或者介质恢复)以及可能包括归档重做日志文件(只有介质恢复)。

在前滚之后,数据块包含所有已经被提交的数据。这些数据块也包含还没有提交的变更,这些变更或许是在故障发生之前被保存到数据文件中去,或者是被记录在重做日志中并且是在缓冲恢复过程中被写进数据文件中去。

 

事务恢复概述

你可以将数据库运行在手动还原管理模式下或者是自动还原管理模式。在手动模式下,你必须创建和管理回滚段来记录对数据库变更的前镜像。在自动还原管理模式中,你创建一个或者多个还原表空间。这些还原表空间包含类似于传统回滚段的回滚段。主要的不同是oracle来帮助你来管理这些回滚段。

还原块(无论是在回滚段中或者是在还原表空间中)记录了在一些数据库操作中可能会被还原的数据库行为。在数据库恢复过程中,还原数据块回滚了先前通过在前滚操作过程中已经被应用到数据文件中但还没有提交的事务。

在前滚之后,任何还没有提交的事务必须被还原。Oracle应用还原数据块来回滚掉在数据块中一些没有提交的事务所做的变更,这些变更或者是在故障发生之前被写进数据块中或者是在缓存恢复过程中重做日志的应用而被写进数据块中去的。这个过程被称为回滚或者被称为事务恢复。

15-3说明了前滚和回滚,这两个过程是在系统故障时进行恢复的必要的两个步骤。

15-3 基本的恢复步骤:前滚和回滚

15-3显示了一个利用备份复原数据库的过程。首先,重做日志将已经提交的事务和还没有提交的事务应用到数据库中去,然后使用还原数据块将数据库中还未提交的事务进行还原。

Oracle根据需要可以同时回滚多个事务。系统内所有活动的事务在故障发生的时候都被标志为终止状态。不是等待SMON进程来回滚被标志为终止的事务,新的事务也能够恢复被阻塞的事务来获取他们需要的行锁。

 

实例恢复和崩溃恢复的概述

崩溃恢复被用来从一个故障中复原,这个故障可能是单个实例的数据库发生故障或者是ORACLERAC数据库中的所有实例发生故障。在RAC环境中,利用依然健在的实例来恢复一个发生故障的实例被称为实例恢复。

崩溃恢复和实例恢复的目标是复原放置在被终止的实例的缓存中的数据块变更并且关闭实例终止时还未结束的重做进程。崩溃恢复和实例恢复只使用联机重做日志和当前的联机数据文件。Oracle也恢复与被终止的实例一起的重做进程。

 

崩溃恢复和实例恢复包括两个独特的操作:通过应用包含在联机的重做记录中的已经提交的和未提交的事务前滚当前的,联机的数据文件,另一个操作是回滚那些还没有提交的事务所做的变更到数据文件的原始状态。

 

崩溃恢复和实例恢复有下面的共享的特征:

*使用当前联机的数据文件来重做这些变更(这些联机文件即在发生故障或者执行shutdown abort命令之后保存在磁盘上的文件)

*只使用联机重做日志并且从来不需要使用归档日志文件

*恢复所需的时间由下面的因素决定;被异常终止的实例的数量,自从上一个检查点以来在每个被终止的重做进程所产生的重做记录的数量,以及用户配置的因素比如:重做日志文件的大小,检查点频率,以及并行恢复设置。

 

Oracle在下面两种情况下自动地执行恢复:

*在单实例数据库或者RAC环境中所有的实例(此时进行崩溃恢复)发生故障之后在数据库第一次被打开时。

*当一些但不是RAC环境中所有的实例都故障时(此时进行实例恢复)。这个恢复是由在配置中的一个没有发生故障的实例来执行。

最重要的一点是在崩溃恢复和实例恢复中,oracle自动地应用重做记录:不需要用户自己干涉来提供重做日志。但是,你可以在数据库中设置参数来优化实例恢复和崩溃恢复的性能。同时,你也能够分别地的优化实例恢复中前滚和回滚阶段。

 

决定使用哪种恢复技术

这部分包含下面的内容:

*什么时候使用介质恢复

*什么时候oracle回闪

*什么时候使用create table as select恢复

*什么时候使用IMPORT/EXPORT工具恢复

*什么时候使用表空间按时间点恢复

 

何时采用介质恢复

当一个或者多个数据文件物理受损时可以使用介质恢复。这个可能发生在硬件错误或者用户错误造成的,比如;意外地删除了一个文件。完全的介质恢复被用来恢复一个单独的数据文件,表空间或者整个数据库。

当数据库被逻辑地损坏时可以使用不完全的介质恢复。这个一般发生在应用程序错误或者用户错误造成的,例如:意外地删除一张表或者一个表空间。不完全的介质恢复被用来恢复整个数据库,而不是单独的数据文件或者表空间。(如果你不想进行对整个数据库的不完全恢复,你可以对表空间按时间点恢复)。

当在一个文件中有小部分的数据块物理受损时可以使用数据块介质恢复。这种恢复通常发生在由于硬件的错误造成,比如:一个坏的磁盘控制器,或者操作系统的I/O错误。数据块介质恢复是用来对单独的数据块,并且数据库的其他部分在恢复期间可以保持联机。

 

何时使用oracle回闪

回闪表是一个简单的解决方法来让一张表的内容复原到一个指定的时间点上。基于回闪查询的应用也可以实现这个功能,但是效率比较地差。

回闪数据库应用到整个数据库。使用回闪数据库需要需要配置和消耗一定的资源,但是回闪数据库可以代替执行数据库的不完全恢复,且非常地快捷。

回闪表使用在还原表空间中的信息来复原表中的内容。这种方法与介质恢复在使用的方便性上,可用性上以及恢复的快速性上相比,有更好的优势。回闪数据库和回闪表在粒度上,性能上以及约束上不同。对于一个主要的数据库,在下面的形式下考虑使用回闪数据库而不是使用回闪表:

*存在一个逻辑数据受损,特别地是还原表空间受损

*一个用户的错误影响到整个数据库

*一个用户的错误影响到一张表或者一系列表,但是由于表之间的逻辑关系所以对这一系列表的复原对整个数据库的影响还不确定

*一个用户的错误影响到一张表或者一系列表,但是使用回闪表会失败是由于回闪表对DDL操作的恢复有所限制。

*回闪数据库对所有的DDL操作都起恢复作用的,而回闪表则并不会。同时,回闪数据库会移动整个数据库到某个时间点上,并且恢复后的数据库约束也不会被破坏,但是使用回闪表的话数据库的约束可能会违背。回闪表功能不能在备用库中使用。

 

何时使用create table as select语句恢复

为了能够在一个新的位置复原数据,使用回闪查询中的“AS OFSQL语句来执行一个CTASCREATE TABLE AS SELECT 。。AS OF。。)。例如:为了创建一张表在某个时间点上的副本:

CREATE TABLE old_emp AS SELECT *

FROM employee AS OF TIMESTAMP ‘ 2002-02-05 14:15: 00’

在新的位置恢复表时,你只是将数据恢复。约束,索引,以及等等信息并没有被复原。这种方法将比使用回闪表花费更多的时间和空间资源。回闪表只会复原在指定时间点之后被修改的数据块,这样就会比CTAS效率更高。

 

何时使用IMPORT/EXPORT 工具恢复

与物理备份不同,逻辑备份可以将表,存储过程等方案对象导出到一个二进制文件中去。Oracle工具被用来将oracle的方案对象移进和移出oracleEXPORT,或者是数据泵EXPORT,将来自oracle数据库中的数据写进二进制的操作系统文件中去。IMPORT,或者数据泵IMPORT,读取导出文件并且将相应的数据复原到一个存在的数据库中去。

尽管导入和导出是被设计用来移动oracle数据的,但是你也可以使用它们在数据库中作为一个保护数据的补充方法。你不应该使用oracle导入和导出工具作为你备份数据的唯一方法。

Oracle的导入和导出工具工作时类似于CTAS,但是Oracle的导入和导出工具可以复原约束,索引等等。如果一个导出操作在回闪点之前被执行过,那么对整张表的重新创建工作是非常高效的。回闪表功能将会比导入/导出工具在导数据性能上会更好,因为回闪表只复原那些别修改过的记录的集合。

 

何时使用表空间按照时间恢复

当一个或者多个表空间已经逻辑受损并且你也不想对整个数据库进行不完全介质恢复时,可以使用表空间按照时间恢复。表空间按照时间恢复的对象是整个表空间。

 

回闪恢复区域

回闪恢复区域是一个oracle管理的文件夹,或者是文件系统,或者是自动存储管理磁盘组,是一个可以为备份和恢复文件提供一个集中存放的地点。Oracle在回闪恢复区域中创建归档日志。RMAN可以在回闪恢复区域中存放它的备份文件,并且在介质恢复期间当复原文件时RMAN可以使用回闪恢复区域中的备份文件。回闪恢复区域也可以当作磁带机的磁盘缓存。

Oracle恢复组件和回闪恢复区域相互作用来确保回闪恢复区域中的文件满足数据库恢复的要求。在一个介质故障之后恢复数据库所需要的所有文件都存储在回闪恢复区域中。

 

下面列出了在回闪区域中与恢复相关的文件:

*当前的控制文件

*联机日志

*归档日志

*回闪日志

*控制文件的自动备份

*控制文件副本

*数据文件副本

*备份成员

 

回闪恢复区域的磁盘限额

Oracle让你定义一个磁盘限额,这个限额表示在回闪恢复区域中oracle能够使用的空间容量。一个磁盘限额可以让回闪恢复区域不会全部站用磁盘上的所有空间而是可以留一部分空间用于其他的目的。磁盘限额不包括非oracle管理的存储开销。例如;回闪恢复区域磁盘限额不包含那些文件系统被压缩,被镜像,或者一些其他的冗余机制所需要的额外存储空间。

OracleRMAN在回闪恢复区域中创建文件直到所使用的空间达到了回闪恢复区域磁盘限额。然后,oracle删除在回闪恢复区域中存在的过于陈旧的,冗余的副本,或者将这些文件备份到第三方的存储中。当可用的磁盘空间小于整个磁盘空间的15%时,Oracle会通知用户,但是oracle会继续填充磁盘直到回闪恢复区域限额的100%

回闪恢复区域越到,其发挥作用也越大。数据库建议磁盘限额的大小可以设置为数据库的大小,增量备份的大小,以及所有还没有复制到磁带机中去的归档日志文件的大小之和。

如果回闪恢复区域足够到到可能存放表空间的副本,然后这些表空间就不需要备份到第三方存储中。回闪恢复区域的最小的大小应该是能够容纳下所有还没有复制到磁带机中去的归档日志文件。例如:如果一个100GB 大小的ASM磁盘组并且ASM磁盘组使用正常冗余,那么回闪恢复区域的磁盘限额必须设置为50GB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值