分类: Oracle
2010-03-12 11:13:41
Oracle 备份与恢复
备份与恢复是数据库管理中最重要的方面之一。如果数据库崩溃却没有办法恢复它,那么对企业造成的毁灭性结果可能会是数据丢失、收入减少、客户不满等。不管公司是使用单个数据库还是多个数据库来存储数百 GB 或 TB 的数据,它们都有一个共同点,即需要制订一个备份与恢复方案来备份重要数据并使自身免于灾难。
备份与恢复基础
备份是数据的一个代表性副本。该副本会包含数据库的重要部分,如控制文件、重做日志和数据文件。备份通过提供一种还原原始数据的方法保护数据不受应用程序错误的影响并防止数据的意外丢失。备份分为物理备份和逻备份。物理备份是物理数据库文件的副本。“备份与恢复”通常指将复制的文件从一个位置转移到另一个位置,同时对这些文件执行各种操作。
相比而言,逻辑备份包含使用 SQL 命令导出并存储在二进制文件中的数据。Oracle 在重做日志缓冲区中记录提交的和未提交的更改。逻辑备份用于补充物理备份。还原物理备份意味着重建它并将其提供给 Oracle 服务器。要恢复还原的备份,需要使用事务日志中的重做记录来更新数据。事务日志记录在执行备份之后对数据库所做的更改。
Oracle 在例程故障之后自动执行崩溃恢复和实例恢复。在出现介质故障的情况下,数据库管理员 (DBA) 必须启动恢复操作。恢复备份涉及两种不同的操作:通过应用重做数据将备份前滚至一个较近的时间;将在未提交的事务中所做的所有更改回滚至其原来状态。一般而言,恢复指在还原、前滚和回滚备份中涉及的各种操作。备份与恢复指在防止数据库丢失数据和在丢失数据时重建数据库的过程中涉及的各种策略和操作。
备份与恢复操作
备份是数据文件、表空间或某个时间点的数据库等的快照。如果对数据库进行了周期性备份,则在数据丢失时用户可以将存储的重做信息应用到他们最新的备份中,从而恢复数据库的当前状态。Oracle 使用户能够还原一个较早的备份和仅应用某些重做数据,从而将数据库恢复到一个较早的时间点。这种恢复称为不完全介质恢复。如果备份是一致的,那么根本不需要用户应用任何重做数据。
下面用介质恢复的一个简单例子来解释一下这个概念。假定用户在中午为数据库作了一个备份。从中午开始,每一分钟对数据库进行一次更改。在下午 1 点时,一个磁盘驱动器出现故障,导致那个磁盘上的所有数据丢失。幸运的是,Oracle 在重做日志中记录了所有更改。则用户可以将中午的备份还原到一个正常运转的磁盘驱动器上,使用重做数据将数据库恢复到下午 1 点,从而重建丢失的更改。
备份与恢复策略要素
尽管备份与恢复操作非常复杂并随因企业而异,但基本原则均遵循这四个简单的步骤:
只要用户在安全的存储器备份了数据库并存档了重做日志,就可以重建原始数据库。
备份与恢复的主要数据结构
在用户开始认真考虑备份与恢复策略之前,必须明确与备份和恢复操作相关的物理数据结构。本节讨论了以下物理数据结构:
数据文件
每个 Oracle 数据库都有属于称为表空间的逻辑结构的一个或多个物理数据文件。数据文件被分为更小的称为数据块的单元。逻辑数据库结构的数据(如表和索引)物理上位于为数据库分配的数据文件的块中。数据文件具有以下特性:
每个数据文件的第一个块均为头 (header)。头包括诸如文件大小、块大小、表空间和创建时间戳记等重要信息。只要打开数据库,Oracle 就检查数据文件头信息是否与存储在控制文件中的信息匹配。如果不匹配,则必须进行恢复。Oracle 在正常操作期间读取数据文件中的数据,并将其存储在缓冲区高速缓存中。例如,假定用户要访问表中的一些数据。如果请求的信息尚未出现缓冲区高速缓存中,则 Oracle 将从相应的数据文件中读取它并将其存储在内存中。
控制文件
每个 Oracle 数据库都有一个控制文件,该文件包含组成数据库的所有其它文件的操作系统文件名。这个重要的文件还包含在恢复期间使用的一致性信息,如:
用户可以创建控制文件的多个副本,从而允许 Oracle 写控制文件的多个副本以防止灾难的发生。如果操作系统支持磁盘镜像,那么也可以创建控制文件的镜像,从而允许 O/S 将控制文件的一个副本写到多个磁盘上。每一次用户挂载 Oracle 数据库时,均使用它的控制文件来识别数据文件和联机重做日志文件(必须为数据库操作而打开)。如果更改了数据库的物理组成,如创建了一个新的数据文件或重做日志文件,则 Oracle 将修改数据库的控制文件以反映该更改。只要更改了数据库的结构,就应备份控制文件。结构更改可能包括添加、删除或更改数据文件或表空间以及添加或删除联机重做日志。
联机重做日志文件
重做日志对于恢复绝对至关重要。例如,假定一次电力中断使 Oracle 无法将修改的数据永久写入数据文件中。在这种情况下,可以把数据文件中较早版本的数据与记录在联机重做日志中的最近更改结合起来重建丢失的数据。每个 Oracle 数据库都包含一组两个或多个联机重做日志文件。Oracle 为每个重做日志文件分配一个日志序列号以唯一地标识它。该组数据库重做日志文件共同称为数据库的重做日志。
Oracle 使用重做日志记录对数据库所做的所有更改。Oracle 在重做记录(重做缓冲区中一个描述更改的条目)中记录每一个更改。例如,假定用户更新了工资单表中的一个列值(从 5 改为 7)。Oracle 将旧值记录在撤销记录中,将新值记录在重做记录中。因为重做日志存储了对数据库所做的每次更改,所以这个事务的重做记录实际上包含了三个部分:
如果用户随后提交了对工资单表所做的更新 — 使得由 SQL 语句执行的更改变为永久性的 — 那么 Oracle 将生成另一条重做记录。通过这种方式,系统仔细地监视着在数据库中发生的一切。
重做日志文件的循环使用
日志写入器 (LGWR) 将重做日志条目写到磁盘上。重做日志数据是在系统全局区的重做日志缓冲区中生成的。随着事务的提交和日志缓冲区的充满,LGWR 将重做日志条目写到一个联机重做日志文件中。LGWR 以循环方式书写联机重做日志文件:当它写满了当前联机重做日志文件(称为活动文件)时,LGWR 将写入下一个可用非活动重做日志文件。LGWR 循环使用据库中的联机重做日志文件,覆盖旧的重做数据。根据是否启用了存档,写满的重做日志文件可按以下方式进行重用:
存档重做日志文件
存档日志文件是 Oracle 已经在其中写满了重做条目、将其以非活动状态提供并拷贝到一个或多个日志存档目标位置的重做日志。Oracle 可以在两种模式中的任意一种之下运行:
在 ARCHIVELOG 模式下运行数据库有以下好处:
在 NOARCHIVELOG 模式下运行数据库有以下后果:
自动管理的撤消
每个 Oracle 数据库都必须有一种方法来保留用于回滚或撤对数据库所做更改的信息。这种信息包含了事务的操作的记录(主要在提交这些操作之前)。Oracle 将这些记录统称为撤消。过去,Oracle 曾使用回滚段存储撤消。事实证明,对这些回滚段的空间管理十分复杂。Oracle 现在提供了存储撤消的另一种方法,它消除了管理回滚段空间的复杂性,并为 DBA 提供对撤消被覆盖前所保留时间的控制。这种方法使用一个撤消表空间。撤销记录用于:
当执行回滚语句时,撤销记录用于撤销由未提交的事务对数据库所做的更改。在数据库恢复期间,撤销记录用于撤销从重做日志应用到数据文件中的任何未提交的更改。在一个用户更改数据的同时,撤销记录将为访问数据的另一用户保留数据的前镜像,从而提供读一致性。
了解基本备份
备份策略为防止数据丢失提供了安全防护。回答以下问题可以帮助数据库管理员制订一个强大的备份策略:
可能出现何种类型的故障?
数据丢失的原因各种各样。下面是可能导致数据丢失的一些最常见的故障类型。
语句故障 是 Oracle 程序在处理语句时的逻辑错误。例如,用户执行了无效 SQL 结构的语句。当发生语句故障时,Oracle 自动撤销语句的所有效果并将控制返回给用户。
进程故障 是访问 Oracle 的用户进程中出现的故障(即异常断开或进程终止)。尽管 Oracle 和其他的用户进可以继续工作,但出现故障的用户进程将不能继续工作。如果用户进程在更改数据库时出现故障,则 Oracle 后台进程将撤销未提交事务的效果。
实例故障 是使 Oracle 实例(即 SGA 和后台进程)无法继续工作的问题。实例故障可能源于硬件问题(如电力中断)或软件问题(如操作系统崩溃)。当实例出现故障时,Oracle 不会将 SGA 缓冲区中的数据写到数据文件中。
用户或应用程序错误 是导致数据丢失的用户错误。例如,用户可能无意地从工资单表中删除数据。这种用户错误可能需要将数据库或对象恢复到该错误发生前的某个时间点上。为了允许从用户错误中恢复过来并满足其他独特的恢复要求,Oracle 提供了闪回技术。了解关于的更多信息。
介质故障 是当 Oracle 试图写或读操作数据库所需要的文件时出现的物理问题。一个常见的例子是磁盘头损坏,它将导致磁盘驱动器上的所有数据丢失。磁盘故障可能影响各种文件(包括数据文件、重做日志文件和控制文件)。因为数据库实例无法继续正常工作,所以它无法将 SGA 的数据库缓冲区中的数据写到数据文件中。
应当备份哪些信息?
一个数据库包含各种类型的数据。当制订备份策略时,DBA 必须确定他们要复制哪些信息。基本的备份类型包括:
在确定要备份的信息时,基本的原则是根据数据的重要性和更改的程度来确定数据的优先级。例如,然存档日志不发生变化,但它们对恢复数据库至关重要,因此如果可能应维护多个副本。然而,费用帐户表被用户不断更新。因此,应当经常备份该表空间,以防止在恢复时不得不应用过多的重做数据。
可以以多方式组合备份。例如,DBA 可以决定每周执行整个数据库的备份,以确保获得原始数据库信息的一个相对较新的副本,而每天备份使用最频繁的表空间。DBA 还可以为所有重要的控制文件和存档重做日志创建多个副本作为额外的安全防护。
联机数据库备份
联机备份也称为开放备份,其中所有的读-写数据文件和控制文件都没有对相同的 SCN 设置检查点。例如,一个读-写数据文件头可能包含一个为 100 的 SCN,而其他读-写数据文件头包含一个为 95 或 90 的 SCN。在所有这些头 SCN 一致前,即将联机重做日志中记录的所有更改都保存到磁盘上的数据文件前,Oracle 无法打开数据库。如果数据库必须保持不间断运行,则您除了在 ARCHIVELOG 模式下执行整个数据库的联机备份之外别无选择。
离线数据库备份
在这种备份中,所有的数据文件和控制文件在相同的时间点上都保持一致 — 例如,对相同的 SCN 保持一致。在一个一致的备份中被允许拥有旧 SCN 的唯一表空间是只读且“离线-正常”的表空间,它们与备份中的其他数据文件保持一致。这种类型的备份允许用户打开由备份创建的文件集,而无需应用重做日志,这是因为数据已经是一致的了。执行这种备份的唯一方式是正常关闭数据库,然后在数据库关闭时执行备份。一个一致的整个数据库备份是为在 NOARCHIVELOG 模式下运行的数据库提供的唯一有效的备份选择。
整个数库备份
这种最常见的备份类型 — 整个数据库备份 — 包含了控制文件以及属于该数据库的所有数据库文件。如果在 ARCHIVELOG 模式下运行,则 DBA 还可以选择在一段时间内备份数据库的不同部分,从而一部分一部分地构建整个数据库备份。
表空间备份
表空间备份是数据库的一个子集。表空间备份只有当数据库在 ARCHIVELOG 模式下运行时才有效。表空间备份对于在 NOARCHIVELOG 模式下运行的数据库有效的唯一时间是当该表空间只读或离线正常时。
数据文件备份
数据文件备份是单个数据文件的备份。数据文件备份没有表空间备份那么常见,并且只有当数据库在 ARCHIVELOG 模式下运行时才有效。数据文件备份对于在 NOARCHIVELOG 模式下运行的数据库有效的唯一时间是当数据文件是表空间中唯一的文件时。例如,备份是表空间备份,但表空间只包含一个文件并且只读或离线正常。
控制文件备份
控制文件备份是数据库控制文件的备份。如果数据库是打开的,那么用户可以通过执行以下 SQL 语句或使用恢复管理器 (RMAN) 来创建有效的备份:ALTER DATABASE BACKUP CONTROLFILE to 'location'。
存档重做日志备份
存档重做日志是成功的介质恢复的关键。您希望根据可用磁盘空间和在数据库上执行的事务的数量在磁盘上尽可能长时间地保留存档日志,并定期备份它们以确保较完整的恢复。
配置文件
配置文件可能包含 spfile 文件或 init.ora、口令文件、tnsnames.ora 和 sqlnet.ora。因为这些文件不经常变化,所以它们不需要频繁备份。如果您丢失了某个配置文件,您可以很容易地重手动创建它。当还原时间更重要时,还原配置文件的一个备份要比以特定格式手动创建一个文件要快得多。
应当使用哪种备份方法?
Oracle 为用户提供了几种创建备份的基本方法以备选择。这些方法包括:
创建恢复管理器备份
恢复管理器 (RMAN) 是一个强大的通用程序,它允许用户创建 RMAN 备份或用户数据的镜像副本。当用户使用 RMAN BACKUP 命令指定文件或存档日志时,RMAN 默认创建一个备份集作为输出。一个备份集是专有格式的一个文件或一些文件,它需要使用 RMAN RESTORE 命令来进行恢复操作。相比而言,当使用 BACKUP AS COPY 命令创建文件的镜像副本时,它是实例可用 (instance-usable) 格式的 — 用户不需要调用恢复管理器即可还原或恢复它。
当执行 RMAN 命令(如备份或还原)时,恢复管理器建立了一个与 Oracle 服务器进程的连接。然后服务器进程从目标数据库中备份指定的数据文件、控制文件或存档日志。恢复目录是包含各种对备份和恢复有用的信息的中央信息库。RMAN 自动建立备份所需的所有文件的名称和位置。恢复管理器还支持增量备份 — 仅备份那些自上次备份以来发生变化的块。在传统的备份方法中,必须备份数据文件中用到的所有数据块。
自动的基于磁盘的备份和恢复
创建不同的与备份和恢复相关的文件的组件对彼此一无所知,或者也不了解它们存储数据的文件系统的大小。利用自动的基于磁盘的备份和恢复,您可以创建一个闪回恢复区,它将使与备份相关的文件的管理自动化。在磁盘上选择一个位置和存储空间的上界,并设置一个保留策略 — 它控制需要为恢复保留备份文件的时间。数据库在这个空间内为您的数据库管理用于备份的存储器、存档日志和其他与恢复相关的文件。当 RMAN 需要为新的文件回收空间时,可以删除不再需要的文件。如果您不使用闪回恢复区,则您必须为与备份相关的文件手动管理磁盘空间并平衡不同类型文件间的空间使用。Oracle Corporation 建议您启用一个闪回恢复区以简化您的备份管理。
了解关于 的更多信息
Oracle 企业管理器
尽管通常把恢复管理器用作一个命令行实用程序,但 Oracle 企业管理器中的备份向导是 GUI 界面,通过点击即可实现备份与恢复。Oracle 企业管理器 (EM) 支持用户常用的备份与恢复特性。
了解关于 的更多信息
使用 Data Pump 提供额外备份保护
可以使用 Data Pump 实用程序创建数据的逻辑备份来补充物理备份。逻辑备份存储为数据库创建的模式对象的相关信息。Data Pump 以专有格式将数据从数据库写入 Oracle 文件中,然后可以使用导入实用程序将这些文件导入数据库中。
了解关于 Data Pump 的更多信息
用户管理的备份
可以使用操作系统命令(如 UNIX dd 或 tar 命令)来创建备份。还可以通过编写脚本来使备份操作自动化。用户可以一次性创建整个数据库的备份或备份个别的表空间、数据文件、控制文件或存档日志。个别表空间、数据文件、控制文件和存档日志的备份可以补充整个数据库备份。如果数据库关闭或数据库进入热备份模式来执行联机备份,则还可以使用 O/S 命令来执行这些备份。
了解基本的恢复策略
基本的恢复包含两个部分:还原物理备份,然后用自最后一次备份以来对数据库所做的更改更新它。恢复的最重要方面是确保所有的数据文件就相同时间点而言是一致的。Oracle 具有完整性检查,以防止用户在所有数据文件彼此保持一致之前打开数据库。在准备恢复策略时,了解这些问题的答案至关重要:
恢复如何工作?
在每一种类型的恢复中,Oracle 都按顺序将重做数据应用到数据块中。Oracle 使用控制文件和数据文件头中的信息来确定是否必须进行恢复。恢复有两个部分:前滚和回滚。当 Oracle 前滚时,它将重做数据应到相应的数据块中。Oracle 系统地遍览重做日志,以确定它需要将哪些更改应用到哪些块中,然后更改这些块。例如,如果用户向表中添加了一行,但服务器在将更改保存到磁盘之前就崩溃了,则 Oracle 可以使用这个事务的重做记录来更新该数据块以反映该新行。
一旦 Oracle 完成了前滚阶段,就可以打开 Oracle 数据库了。回滚阶段在数据库打开后开始。回滚信息存储在事务表中。Oracle 在整个表中搜索未提交的事务,撤销它找到的任何未提交的事务。例如,如果用户从未提交添加行的 SQL 语句,则 Oracle 将在事务表中发现这一事实并撤销该更改。
恢复的类型有哪些?
有三种基本的恢复类型:实例恢复、崩溃恢复和介质恢复。Oracle 在实例启动时自动执行前两种恢复。只有介质恢复需要用户执行命令。当一个实例发现另一个实例已经崩溃时,实例恢复(只可能在 Oracle 真正应用集群配置中存在)将在打开的数据库中进行。一个幸存的实例将自动使用重做日志来恢复数据库缓冲区中已提交但在实例出现故障时丢失的数据。Oracle 还将撤销当实例崩溃时在出现故障的实例上正在进行的任何事务,然后在恢复完成之后清除崩溃的实例拥有的任何锁。
崩溃恢复在单实例数据库崩溃或多实例数据库的所有实例崩溃时发生。在崩溃恢复中,实例必须首先打开数据库,然后执行恢复操作。一般而言,在崩溃或关机退出之后第一个打开数据库的实例将自动执行崩溃恢复。
与崩溃恢复和实例恢复不同,介质恢复通常响应介质故障并根据用户的命令来执行。在介质恢复中,可以使用联机或存档重做日志来使还原的备份为最新或将其更新至一个特定的时间点。介质恢复可以还原整个数据库、一个表空间一个数据文件并将它们还原至指定的时间。无论何时使用重做日志或将数据库恢复到某个非当前时间,都将执行介质恢复。
总可以使用还原的备份来执行该种恢复。介质恢复主要分为完全恢复和不完全恢复。完全恢复涉及将重做数据与数据库、表空间或数据文件等的备份结合使用以将其更新至最新的时间点。它之所以称为完全备份是因为 Oracle 将所有重做更改应用到备份上。通常,介质恢复在介质故障损坏了数据文件或控制文件之后执行。
了解关于 的更多信息
恢复选项
如果用户没有将数据库完全恢复至最新时间,那么必须指示 Oracle 要恢复到什么程度。用户可以执行:
如果使用了恢复管理器,那么日志序列恢复将一直恢复到一个指定的日志序列号。当执行不完全恢复时,用户必须在打开数据库时重置联机重做日志。重置数据库的新版本称为一个新化身。用 RESETLOGS 选项打开数据库将告知 Oracle 丢弃一些重做。在 Oracle 数据库 10g 中,控制文件增加了新的结构,这些结构提供了利用先前化身的备份通过 RESETLOGS 操作进行恢复的能力。
从人为错误中恢复
Oracle 数据库 10g 体系结构利用了人为错误的数据库恢复领域中独有的技术进展。闪回技术提供了一组新功能,可及时查看数据并在时间上前后滚动数据。使用闪回功能,可以查询模式对象的过去版本、查询历史数据、执行变化分析,或执行自助修复,以便在数据库联机时从逻辑损坏中恢复。利用 Oracle 数据库 10g 闪回技术,您完全可以取消过去的操作!
了解关于 的更多信息
应当使用哪种备份方法?
用户有两种物理文件恢复基本方法可以选择。他们可以:
使用恢复管理器进行恢复
基本的 RMAN 命令是 RESTORE 和 RECOVER。RMAN 可用于从备份集或镜像副本中将数据文件还原至它们当前的位置或一个新位置。如果需要任何存档的重做日志来完成恢复操作,RMAN 将自动还原并应用它们。在恢复目录中,RMAN 保留了一个包含与执行过的每次备份相关的所有基本信息的记录。如果没有使用恢复目录,则 RMAN 将使用控制文件来获取必需的信息。RMAN RECOVER 命令可以用来执行完全介质恢复,应用增量备份,以及执行不完全介质恢复。
了解关于 的更多信息
使用 SQL*Plus 进行恢复
管理员能够在命令行使用 SQL*Plus 实用程序在文件上进行还原和执行介质恢复。用户可以恢复数据库、表空间或数据文件。在执行恢复之前,用户需要:
结论
Oracle 数据库的备份和恢复对于保护数据不受崩溃、硬件故障和数据故障的影响非常重要。虽然 Oracle 提供了许多特性来保护您的数据,但备份是无法替代的。