Page LI-193 Oracle 备份与恢复 1 第 1 章 归档设置 ............................................................................................................................ 1 1.1 归档的作用 ..................................................................................................................... 3 1.2 归档模式设置与取消 ..................................................................................................... 5 1.2.1 确定数据库当前状态 .......................................................................................... 5 1.2.2 更改归档模式 ...................................................................................................... 6 1.2.3 设置归档目的地 .................................................................................................. 9 1.2.4 归档目的地的 mandatory与Optional ................................................................... 9 1.2.5 手动归档与自动归档 ........................................................................................ 10 1.3 归档模式详细介绍 ........................................................................................................ 11 1.3.1 指定多个归档进程 ............................................................................................ 12 1.3.2 自动归档的管理 ................................................................................................ 12 1.3.3 手动归档 ............................................................................................................ 14 1.3.4 控制归档到目标 ................................................................................................ 15 1.3.5 指定归档文件格式 ............................................................................................ 15 1.4 归档相关视图 ............................................................................................................... 15 1.4.1 v$archived_log视图 ........................................................................................... 16 1.4.2 V$ARCHIVE_DEST视图 ................................................................................. 17 1.4.3 v$log_history视图 .............................................................................................. 19 1.4.4 V$DATABASE视图 ........................................................................................... 19 1.4.5 V$ARCHIVE_PROCESSES视图 ...................................................................... 21 第 2 章 Oracle备份与恢复原理 .................................................................................................. 21 2.1 数据库备份、还原和恢复的基本原理 ....................................................................... 22 2.1.1 为什么需要恢复 ................................................................................................ 24 2.1.2 检查点与 CKPT进程 .......................................................................................... 24 2.1.3 LGWR进程 ........................................................................................................ 25 2.1.4 日志缓存 ............................................................................................................ 25 2.1.5 联机重做日志文件 ............................................................................................ 26 2.2 Oracle 环境中可能发生的故障类型 ........................................................................... 27 2.2.1 语句故障 ............................................................................................................ 28 2.2.2 用户进程故障 .................................................................................................... 28 2.2.3 用户错误 ............................................................................................................ 29 2.2.4 数据库崩溃与实例恢复 .................................................................................... 29 2.2.5 介质故障与介质恢复 ........................................................................................ 30 2.3 备份和恢复策略 .................................................................................................... 31 2.3.1 为什么要制定备份恢复策略 ............................................................................ 31 2.3.2 必须考虑的因素 ................................................................................................ 32 2.3.3 优化例程恢复的方法 ........................................................................................ 33 2.4 备份和恢复分类简介 ............................................................................................ 34 第 3 章 用户管理的备份 .............................................................................................................. 35 3.1 相关术语 ....................................................................................................................... 36 3.2 什么是用户管理的备份恢复 ....................................................................................... 38 3.3 冷备份 ........................................................................................................................... 40 3.4 热备份 ........................................................................................................................... 42 3.4.1 联机表空间备份 ................................................................................................ 43 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 www.enhan.com.cnoracle技术交流群:69291477 Page LI-193 Oracle 备份与恢复 2 3.4.2 只读表空间备份 ................................................................................................. 45 3.4.3 备份控制文件和初始化参数 ............................................................................. 45 3.4.4 在联机备份失败后执行清除 ............................................................................. 46 3.5 使用DBVERIFY 实用程序检测损坏块 ...................................................................... 48 第 4 章 用户管理的恢复 .............................................................................................................. 50 4.1 用户管理的完全恢复 .................................................................................................... 51 4.1.1 介质恢复 .......................................................................................................... 52 4.1.2 ARCHIVELOG和NOARCHIVELOG比较 ................................................................... 52 4.1.3 在NOARCHIVELOG 模式下执行恢复 ................................................................. 52 4.1.4 在ARCHIVELOG 模式下执行完全恢复 ............................................................. 54 4.1.5 完全恢复关闭的数据库 ................................................................................... 57 4.1.6 恢复打开的数据库(数据库最初是打开的) ............................................... 58 4.1.7 恢复打开的数据库(数据库最初是关闭的) ............................................... 60 4.1.8 在没有备份的情况下恢复数据文件 ............................................................... 62 4.1.9 只读表空间恢复 ............................................................................................... 64 4.1.10 丢失控制文件的恢复 ..................................................................................... 65 4.2 用户管理的不完全恢复 ................................................................................................ 65 4.2.1 不完全恢复的步骤 ........................................................................................... 68 4.2.2 执行不完全数据库恢复 ................................................................................... 69 4.2.3 当前联机重做日志文件的丢失的恢复 ........................................................... 73 第 5 章 RMAN简介与配置 .............................................................................................................. 74 5.1 RMAN备份恢复简介 .................................................................................................... 75 5.1.1 RMAN功能简介 ................................................................................................. 76 5.1.2 RMAN的常用组件 ............................................................................................. 76 5.2 RMAN配置 ................................................................................................................... 78 5.2.1 RMAN恢复目录和控制文件的用法 ................................................................. 79 5.2.2 通道分配 ............................................................................................................ 79 5.2.3 介质管理 ............................................................................................................ 81 5.2.4 与RMAN 连接的类型 ....................................................................................... 82 5.2.5 恢复管理器模式 ................................................................................................. 82 5.2.6 RMAN命令与参数 ............................................................................................. 83 5.2.7 配置RMAN 环境 ............................................................................................... 84 5.2.8 使用RMAN的注意事项 ..................................................................................... 87 第 6 章 RMAN备份 .......................................................................................................................... 88 6.1 RMAN备份 ................................................................................................................... 88 6.1.1 恢复管理器备份的概念 ..................................................................................... 89 6.1.2 确定RMAN特定的备份类型 ............................................................................. 89 6.1.3 使用RMAN BACKUP 命令创建备份集 .......................................................... 90 6.1.4 备份控制文件 ..................................................................................................... 96 6.1.5 备份归档重做日志文件 ..................................................................................... 97 6.1.6 RMAN备份的要求 ............................................................................................. 97 6.2 使用RMAN COPY 命令创建映像副本 ...................................................................... 98 6.2.1 RMAN映像副本的特性 ..................................................................................... 99 6.2.2 使用RMAN COPY 命令创建映像副本 ......................................................... 100 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 3 6.3 RMAN备份类型 ......................................................................................................... 102 6.3.1 完全备份 .......................................................................................................... 102 6.3.2 差异增量备份 .................................................................................................. 103 6.3.3 累计增量备份 .................................................................................................. 104 6.3.4 在NOARCHIVELOG 模式下进行备份 ........................................................ 105 6.3.5 自动备份RMAN 控制文件 ............................................................................ 105 6.4 RMAN问题与监控 ..................................................................................................... 106 6.4.1 RMAN动态视图 .............................................................................................. 106 6.4.2 监视RMAN 备份 ............................................................................................ 107 6.4.3 RMAN其他问题 .............................................................................................. 107 第 7 章 RMAN恢复 ........................................................................................................................ 109 7.1 RMAN完全恢复 .......................................................................................................... 110 7.1.1 RMAN 在还原和恢复操作中的用法 ............................................................... 110 7.1.2 ARCHIVELOG 模式下执行完全恢复 ............................................................... 111 7.1.3 将数据文件还原到其它位置 ......................................................................... 111 7.1.4 使用RMAN恢复表空间和重新定位表空间 ..................................................... 111 7.2 RMAN不完全恢复 ...................................................................................................... 113 7.2.1 使用RMAN进行不完全恢复的过程 ................................................................. 113 7.2.2 使用UNTIL TIME 进行不完全数据库恢复 ................................................... 114 7.2.3 使用UNTIL SEQUENCE 进行不完全数据库恢复 ........................................... 114 第 8 章 备份恢复示例 ................................................................................................................. 116 8.1 非归档模式下的备份与恢复 ...................................................................................... 117 8.2 归档模式下丢失或损坏一个数据文件 ..................................................................... 120 8.2.1 OS备份方案 ...................................................................................................... 120 8.2.2 RMAN备份方案 .............................................................................................. 123 8.3 丢失多个数据文件,实现整个数据库的恢复 ......................................................... 128 8.3.1 OS备份方案 ...................................................................................................... 129 8.3.2 RMAN备份方案 .................................................................................................. 133 8.4 不完全恢复案例 ......................................................................................................... 139 8.4.1 OS备份下的基于时间的恢复 .......................................................................... 140 8.4.2 RMAN备份下的基于改变的恢复 ...................................................................... 142 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 4 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航www.enhan.com.cn 武汉引航www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 1 序 言 任何数据库在长期使用过程中,都会存在一定的安全隐患。对于数据库管理员来说不 能仅寄希望于计算机操作系统的安全运行,而是要建立一整套的数据库备份与恢复机制。当 任何人为的或是自然的灾难一旦出现,而导致数据库崩溃、物理介质损坏等,就可以及时恢 复系统中重要的数据,不影响整个单位业务的运作。然而如果没有可靠的备份数据和恢复机 制,就会带来系统瘫痪、工作停滞、经济损失等等不堪设想的后果。本文介绍 ORACLE 数 据库的备份恢复。 备份与恢复是数据库管理中最重要的方面之一。如果数据库崩溃却没有办法恢复它,那 么对企业造成的毁灭性结果可能会是数据丢失、收入减少、客户不满等。不管公司是使用单 个数据库还是多个数据库来存储数百 GB 或 TB 的数据,它们都有一个共同点,即需要制 订一个备份与恢复方案来备份重要数据并使自身免于灾难。 备份是数据的一个代表性副本。该副本会包含数据库的重要部分,如控制文件、重做日 志和数据文件。备份通过提供一种还原原始数据的方法保护数据不受应用程序错误的影响并 防止数据的意外丢失。备份分为物理备份和逻备份。物理备份是物理数据库文件的副本。“备 份与恢复”通常指将复制的文件从一个位置转移到另一个位置,同时对这些文件执行各种操 作。 相比而言,逻辑备份包含使用 SQL 命令导出并存储在二进制文件中的数据。 Oracle 在 重做日志缓冲区中记录提交的和未提交的更改。逻辑备份用于补充物理备份。还原物理备份 意味着重建它并将其提供给 Oracle 服务器。要恢复还原的备份,需要使用事务日志中的重 做记录来更新数据。事务日志记录在执行备份之后对数据库所做的更改。 Oracle 在例程故障之后自动执行崩溃恢复和实例恢复。在出现介质故障的情况下,数 据库管理员 (DBA) 必须启动恢复操作。恢复备份涉及两种不同的操作:通过应用重做数据 将备份前滚至一个较近的时间;将在未提交的事务中所做的所有更改回滚至其原来状态。一 般而言,恢复指 在还原、前滚和回滚备份中涉及的各种操作。备份与恢复指在防止数据库丢 失数据和在丢失数据时重建数据库的过程中涉及的各种策略和操作。 备份是数据文件、表空间或某个时间点的数据库等的快照。如果对数据库进行了周期 性备份,则在数据丢失时用户可以将存储的重做信息应用到他们最新的备份中,从而恢复数 据库的当前状态。 Oracle 使用户能够还原一个较早的备份和仅应用某些重做数据,从而将 数据库恢复到一个较早的时间点。这种恢复称为不完全介质恢复。如果备份是一致的,那么 根本不需要用户应用任何重做数据。 本文从物理备份的基础归档开始,主要介绍 Oracle 数据库的物理备份,包括用户管理 的备份、RMAN 备份,并用实例展示备份恢复的步骤。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 2 第 1 章 归档设置 第 一 章 归档设置 归档的作用 归档模式设置与取消 归档模式详细介绍 归档模式的问题解决 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 3 1.1 归档的作用 Oracle 通过 Redo 来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被 恢复。Redo 对于 Oracle 数据库来说至关重要。在数据库中, Redo 的功能主要通过 3 个组件 来实现:Redo Log Buffer、LGWR 后台进程和 Redo Log File(在归档模式下,Redo Log File 最终会写出为归档日志文件)。 在 Oracle 的 SGA 中,存在一块共享内存,称为 Redo Log Buffer,Redo Log Buffer 位于 SGA 之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。这些信息以重 做条目(Redo Entries)形式存储(Redo Entries 也经常被称为 Redo Records)。 Redo Entries 包含重构、重做数据库变更的重要信息,这些变更包括 INSERT、UPDATE、DELETE、 CREATE、ALTER 或者 DROP 等。在必要的时候 Redo Entries 被用于数据库恢复。 Redo Entries 的内容被 Oracle 数据库进程从用户的内存空间复制到 SGA 中的 Redo Log Buffer 之中。Redo Entries 在内存中占用连续的顺序空间,由于 Redo Log Buffer 是循环使用 的,Oracle 通过一个后台进程 LGWR 不断地把 Redo Log Buffer 的内容写出到 Redo Log File 中。 当用户在 Buffer Cache 中修改数据时,Oracle 并不会立即将修改数据写出到数据文件上, 因为那样做效率会很低,到目前为止,计算机系统中最繁忙的部分是磁盘的 I/O 操作,Oracle 这样做的目的是为了减少 IO 的次数,当修改过的数据达到一定数量之后,可以进行高效地 批量写出。 第 一 节 归档的作用 归档的作用是在出现故障时可以恢复数据 归档日志其实是重做日志的复本,通过 ARCn 归档 进程复制重做日志文件而生成 归档只有在数据库被配置为“归档模式”时才会被 启用 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 4 同 Redo Log Buffer 类似,Redo Log File 也是循环使用的, Oracle 允许使用最少两个日 志组。缺省情况下,数据库创建时会建立 3 个日志组。 SQL> select group#,members,status from v$log; GROUP# MEMBERS STATUS ---------- ---------- ---------------- 1 1 INACTIVE 2 1 CURRENT 3 1 INACTIVE 当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为 Log Switch。 Log Switch 会触发一个检查点,促使 DBWR 进程将写满的日志文件保护的变更数据写回到 数据库。在检查点完成之前,日志文件是不能够被重用的。 在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重 做记录对于崩溃 /实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从最后一次完 成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在归 档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来 恢复数据库故障。 如果数据库配置为 NOARCHIVELOG 模式,则没有重做历史记录保存到归档日志文件 中,恢复操作将受到限制,并且可能会导致事务处理工作丢失。这是日志文件自动循环的结 果,在该循环 过程中,恢复操作所需的较旧的日志文件被覆盖,只有该事务历史记录的最新 部分可用。 可以以将数据库配置为 ARCHIVELOG 模式,以便重做信息的历史记录可以保留在归 档文件中。归档重做日志文件可以用于介质恢复。 数据库最初可以在 ARCHIVELOG 模式下创建,但缺省情况下配置为 NOARCHIVELOG 模式。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 5 1.2 归档模式设置与取消 将数据库设置为 ARCHIVELOG 模式的含义: 出现介质故障时,可以防止数据库丢失数据。可以在数据库联机 时对其进行备份。由于 介质故障导致表空间(非 SYSTEM)脱机时,数据库的其余部分仍可用,因为表空间(非 SYSTEM)可以在数据库打开时恢复。 介质恢复选项: 无论数据库处于联机或脱机状态,您都可以还原损坏文件的备份副本,并使用归档日志 文件将数据文件更新为当前的版本。可以将数据库恢复至特定的时间点。可以将数据库恢复 至指定归档日志文件的末尾。可以将数据库恢复至特定的系统更改号(SCN)。 1.2.1 确定数据库当前状态 通过在 sqlplus 或者其他客户端软件里面输入 archive log list 可以查看所当前连接的数 据库,如下所示: SQL> archive log list 数据库日志模式 存档模式 自动存档 启用 存档终点 c:\arc_zero 第 二 节 归档模式的设置与取消 确定当前数据库的状态 更改归档模式 设置归档目的地 归档目的地 mandatory 手动归档与自动归档 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 6 最早的联机日志序列 1 下一个存档日志序列 2 当前日志序列 2 我们可以看到,当前数据库处于归档模式,自动存档设置为启用,归档地点为’ c:\arc_zero’,最早的联机日值学列为 1,下一个存档日值序列为 2,当前日值序列为 2。 1.2.2 更改归档模式 初始归档模式在 CREATE DATABASE 语句中进行设置。缺省值为 NOARCHIVELOG 模式,在该模式下,不对创建数据库过程中生成的重做信息进行归档。 可以在数据库处于装 载状态时使用 ALTER DATABASE 命令更改 ARCHIVELOG 模式。 SQL> ALTER DATABASE [ archivelog | noarchivelog ] 其中: archivelog 将重做日志文件组设置为 ARCHIVELOG 模式 noarchivelog 将重做日志文件组设置为 NOARCHIVELOG 模式 将数据库模式从 NOARCHIVELOG 模式更改为 ARCHIVELOG 模式后,您必须备份所 有数据库文件和控制文件。您上一次的备份不再有用,因为它是在数据库处于 NOARCHIVELOG 模式下备份的。将数据库置于 ARCHIVELOG 模式之后进行的新备份, 将由所有以后的归档重做日志文件应用。将数据库设置为 ARCHIVELOG 模式并不启用归 档程序(ARCn) 进程。 ORACLE 9i 数据库默认的归档模式为 NOARCHIVELOG,图 1.1 给出了更改归档模式 的过程: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 7 图 1.1 下面我们看看实际的例子,通常,我们是将数据库由非归档模式改为归档模式的,但 是,在数据仓库或者特殊的应用情况下,我们需要将数据库由归档模式改为非归档模式。 通过 shutdown normal 关闭数据库,并修改数据库为归档模式: SQL> shutdown normal; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount; ORACLE 例程已经启动。 Total System Global Area 289406976 bytes Fixed Size 1290208 bytes Variable Size 104857632 bytes Database Buffers 180355072 bytes Redo Buffers 2904064 bytes 数据库装载完毕。 SQL> alter database archivelog; 数据库已更改。 SQL> alter database open; 数据库已更改。 SQL> archive log list 数据库日志模式 存档模式 自动存档 启用 存档终点 c:\arc_zero 最早的联机日志序列 1 下一个存档日志序列 2 当前日志序列 2 通过 shutdown transactional 关闭数据库,并修改数据库为归档模式: SQL> shutdown transactional; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount; ORACLE 例程已经启动。 Total System Global Area 289406976 bytes 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 8 Fixed Size 1290208 bytes Variable Size 109051936 bytes Database Buffers 176160768 bytes Redo Buffers 2904064 bytes 数据库装载完毕。 SQL> alter database archivelog; 数据库已更改。 SQL> alter database open; 数据库已更改。 SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 c:\arc_zero 最早的联机日志序列 1 下一个存档日志序列 2 当前日志序列 2 通过 shutdown immediate 关闭数据库,并修改数据库为非归档模式: SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount; ORACLE 例程已经启动。 Total System Global Area 289406976 bytes Fixed Size 1290208 bytes Variable Size 100663328 bytes Database Buffers 184549376 bytes Redo Buffers 2904064 bytes 数据库装载完毕。 SQL> alter database noarchivelog; 数据库已更改。 SQL> alter database open; 数据库已更改。 SQL> archive log list 数据库日志模式 非存档模式 自动存档 禁用 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 9 存档终点 c:\arc_zero 最早的联机日志序列 1 当前日志序列 2 在上面的三个例子中,我们分别将数据库置为归档模式和非归档 模式,他们之间的区 别就是,是否启用归档,是否自动归档。 在设置归档、非归档之前,需要将数据库 shutdown,有三个选项 normal、transactional、 immediate。其他关闭数据库的方式不能正常的设置归档模式。也可以使用 OEM(Oracle Enterprise Manager)改变数据库的归档模式。 1.2.3 设置归档目的地 使用 LOG_ARCHIVE_DEST_n 参数(其中, n = 1、2、3、4、5...10)最多可定义 10 个 归档日志目标。该参数仅在安装了 Oracle 企业版 后才有效。在 Oracle8i 中,您最多可定义 5 个目标。 使用 LOG_ARCHIVE_DEST_n 最多可指定归档目标, LOG_ARCHIVE_DEST_n 是动 态参数,可以在系统级或会话级对其进行修改。通过添加后缀 1 到 10,最多可以指定十个 目标。 这些目标可位于本地磁盘和远程备用数据库: log_archive_dest_1 = "LOCATION=/archive1" log_archive_dest_2 = "SERVICE=standby_db1" 目标可以是本地文件系统位置,由关键字 LOCATION 定义。指定的位置必须是有效的, 并且不能是一个 NFS 装载的目录。也可以是远程目标的 Oracle Net 别名,由关键字 SERVICE 指定。指定的服务名通过使用本地的 tnsnames.ora 文件进行解析,以标识远程数 据库。Oracle9i 支持使用 IPC 或 TCP/IP 协议将归档日志文件发送到远程节点。只能为每个 远程数据库指定一个归档目标。必须为至少一个目标指定 LOCATION 参数。 使用 LOG_ARCHIVE_FORMAT 可在文件名中包括日志序列号和线程号。 1.2.4 归档目的地的 mandatory与Optional 使用 LOG_ARCHIVE_DEST_n 参数时,可以将目标指定为强制 (mandatory) 或可选 (optional),如下所示: MANDATORY 表示必须成功完成归档到该目标的操作才可以覆盖联机重做日志文件。 OPTIONAL 表示即使联机重做日志文件尚未成功地归档到该目标,也可以重新使用。 这是缺省设置。 log_archive_dest_1="LOCATION=/archive/ MANDATORY REOPEN" log_archive_dest_2="SERVICE=standby_db1 MANDATORY REOPEN=600" log_archive_dest_3="LOCATION=/archive2/ OPTIONAL" 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 10 REOPEN 属性定义发生故障时是否必须重新尝试归档到目标。如果为关键字 REOPEN 指定了值,如 REOPEN=600,则若发生故障,在经过指定时间(以秒计)后,归档程序将 尝试写入该目标。缺省值为 300 秒。归档到目标的尝试次数没有限制。归档中的所有错误 将在主站点的警报文件中报告。 如果未指定 REOPEN,则可选目标上的错误将被记录并忽略。不再将重做日志发送到 这些目标。在归档成功之前,强制目标上的错误将导致无法重新使用联机重做日志。只要归 档不成功,归档目标的状态就设置为 ERROR。 可以使用联机重做日志文件之前需要成功归档的目标数量是根据以下设置决定的:定义 为 MANDATORY 的目标的数量,LOG_ARCHIVE_MIN_SUCCEED_DEST 参数的值。该参 数用于为需要归档的本地目标数 指定一个下限值。如果该值小于强制本地目标的数量,则它对归档行为没有影响。如果 该值大于强制本地目标的数量,则本地归档目标的数量必须至少等于该值 ,才可以重新使用 联机重做日志文件。 示例:假定 LOG_ARCHIVE_MIN_SUCCEED_DEST 设置为 2 。如果强制本地目标的 数量为 3,则必须归档这 3 个位置,才可以重新使用联机重做日志文件。相反,如果强制本 地归档目标的数量为 1,则必须至少归档 1 个可选本地归档目标,才可以重新使用联机重做 日志文件。也就是说, LOG_ARCHIVE_MIN_SUCCEED_DEST 可以用于归档到一个或多个 可选强制目标,但反过来不行。 1.2.5 手动归档与自动归档 将数据库设置为 ARCHIVELOG 模式后,您必须决定是自动还是手动归档联机重做日 志文件。这是创建归档重做日志文件以便用于恢复时的第二步。 在自动归档过程中,将启用 ARCn 后台进程,该进程在重做日志文件填满后复制这些 文件。在手动归档过程中,必须使用 SQL*Plus 或 Oracle Enterprise Manager 复制文件。 建议您启用日志文件的自动归档。图 1.2 给出了自动归档和手动归档的区别: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 11 图 1.2 自动归档和手动归档 在决定归档模式(自动或手动)之前,必须将数据库设置为 ARCHIVELOG 模式。如 果未切换到 ARCHIVELOG 模式,将导致 ARCn 无法复制重做日志文件。 启用归档进程之前,应彻底关闭数据库(使用正常、立即或事务处理选项)。 如果由于某种原因导致归档进程(ARCn) 失败,一旦事务处理活动填满了所有重做日 志,Oracle 服务器就会停止。将数据库设置为 ARCHIVELOG 模式将通知 Oracle 服务器不 要覆盖联机重做日志,除非这些日志已经归档。因此,联机重做日志的归档必须与系统中 的事务处理活动(生成重做日志)保持同步。 1.3 归档模式详细介绍 第 三 节 归档模式详细介绍 指定多个归档进程 自动归档的管理 手动归档 控制归档到目标 指定归档的文件格式 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 12 1.3.1 指定多个归档进程 并行的数据定义语言(Data Definition Language, DDL) 和并行的数据操纵语言(Data Manipulation Language, DML) 操作可能会生成大量的重做日志文件。使用一个 ARC0 进程 来归档这些重做日志文件可能会不够用。 Oracle 将根据需要启动更多进程。不过,如果您 希望避免由于调用附加进程而造成运行时开销,可以指定在例程启动时将启动的进程数。 使用 LOG_ARCHIVE_MAX_PROCESSES 参数最多可指定十个 ARCn 进程。将 LOG_ARCHIVE_START 设置为 TRUE 后,Oracle 例程将按照 LOG_ARCHIVE_MAX_PROCESSES 定义的数量启动多个归档进程。在例程有效期内,您 一直可以衍生更多归档进程,只要不超过由 LOG_ARCHIVE_MAX_PROCESSES 设置的值, 也可随时终止归档进程。 在事务处理负载较重或活动较多的时期,可临时启动更多归档进程以避免归档瓶颈。事 务处理活动恢复到正常水平后,可停止部分 ARCn 进程。例如,在一个月中的每一天,可 以启动有两个归档进程的例程。在每个月的最后一天,活动量总是增 多,因此可以启动更多 进程: SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3; 这一天过后,如果例程未关闭,则可发出下面的 SQL 命令来停止附加的归档进程: SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=2; 1.3.2 自动归档的管理 可以在例程启动的时候设置自动归档: 如果数据库处于 ARCHIVELOG 模式,通过设置以下参数,可以在每次启动数据库例 程时启动归档程序进程: LOG_ARCHIVE_START = boolean 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 13 如果 Boolean 为 TRUE,将在例程启动时自动启动 n 个 ARCn 进程,其中 n 是由 LOG_ARCHIVE_MAX_PROCESSES 确定的值。 如果 Boolean 为 FALSE,将禁止在例程启动时启动 ARCn。 设置初始化参数后, ARCn 进程将在例程启动时自动启动,而无需您手动启动自动归 档。也可以在例程启动之后启用自动归档,如图 1.3 图 1.3 例程启动后启用自动归档 可以选择使用带有 TO 选项的 ALTER SYSTEM ARCHIVE LOG START 命令指定归档 目标。例如: UNIX :SQL> ALTER SYSTEM ARCHIVE LOG START TO '/ORADATA/ARCHIVE1'; Windows NT :SQL> ALTER SYSTEM ARCHIVE LOG START TO 'c:\u04\Oracle\TEST\log'; 也可以禁用自动归档,如图 1.4: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 14 图 1.4 禁用自动归档 通过设置以下初始化参数,确保未在例程启动时启用自动归档: LOG_ARCHIVE_START=FALSE 如果已启用 ARCn 进程,则执行以下命令以 停止 ARCn 进程: SQL> ALTER SYSTEM ARCHIVE LOG STOP; 停止 ARCn 进程并不会将数据库设置为 NOARCHIVELOG 模式。如果所有重做日志组 都已使用但未归档,处于 ARCHIVELOG 模式的数据库将会停止。 1.3.3 手动归档 如果数据库处于 ARCHIVELOG 模式,且未启用自动归档,则必须手动归档联机重做 日志文件。发出下面的命令进行手动归档: ALTER SYSTEM ARCHIVE LOG CURRENT; 例如: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; 系统已更改。 手动归档联机重做日志文件时,可以在 ALTER SYSTEM ARCHIVE LOG 命令中使用以 下选项: 选项 说明 THREAD 指定包含要归档的重做日志文件组的线程(用于 Oracle Parallel Server) SEQUENCE 归档由日志序列号标识的联机重做日志文件组 CHANGE 基于 SCN 进行归档 GROUP 归档联机重做日志文件组 CURRENT 归档指定线程的当前重做日志文件组 LOGFILE 归档包含有由文件名标识的成员的重做日志文件组 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -700-0056 LI-193 Oracle 备份与恢复 15 NEXT 将尚未归档的最旧的联机重做日志文件组进行归档 ALL 对指定线程的已满但尚未归档的所有联机重做日志文件组进行归档 START 启用重做日志文件组的自动归档 TO 指定重做日志文件组归档的目标位置 STOP 禁用重做日志文件组的自动归档 1.3.4 控制归档到目标 归档目标的状态可以动态地进行更改。缺省情况下,归档目标是 ENABLE 状态,表明 Oracle 服务器可以使用该目标。归档目标的状态可以通过设置相应的 LOG_ARCHIVE_DEST_STATE_n 参数来进行修改。例如,要在发生错误时暂时停止归档到 强制位置,可以将该目标的状态设置为 DEFER。在参数文件中可能定义了一个目标,但它 设置为 DEFER。当另一目标出现错误或需要维护时,可以启用该目标。 如果一个目标的状态设置为 DEFER,则不会执行归档到该目标的操作。如果该目标 的状态更改为 ENABLE,则必须手动将所有缺失的日志归档到该目标。 1.3.5 指定归档文件格式 通过指定 LOG_ARCHIVE_FORMAT = extension 参数来指定归档的文件格式,其中, extension 应包括日志序列号变量%s 或%S。缺省值是根据操作系统而定的。如下: UNIX:LOG_ARCHIVE_FORMAT=arch%s.arc Windows NT:LOG_ARCHIVE_FORMAT = %%ORACLE_SID%%T%TS%S.ARC,其中, %ORACLE_SID% 被转换为数据库 SID 文件名选项: %s 或%S:包括日志序列号,作为文件名的一部分。 %t 或%T:包括线程号,作为文件名的一部分。 使用%S 可通过在值的左侧用 0 来填补空位使该值长度保持固定。 1.4 归档相关视图 第 四 节 归档相关视图 V$ARCHIVED_LOG:归档视图 V$ARCHIVE_DEST:归档目的地状态信息视图 V$LOG_HISTORY:日志历史视图 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 16 与归档相关的动态视图有以下几个: V$ARCHIVED_LOG、V$ARCHIVE_DEST、 V$LOG_HISTORY、V$DATABASE、V$ARCHIVE_PROCESSES。 1.4.1 v$archived_log视图 v$archived_log 视图显示控制文件中的归档日志信息 。 SQL> desc v$archived_log; Name Type Nullable --------------------- ------------- -------- RECID NUMBER Y STAMP NUMBER Y NAME VARCHAR2(513) Y DEST_ID NUMBER Y THREAD# NUMBER Y SEQUENCE# NUMBER Y RESETLOGS_CHANGE# NUMBER Y RESETLOGS_TIME DATE Y RESETLOGS_ID NUMBER Y FIRST_CHANGE# NUMBER Y FIRST_TIME DATE Y NEXT_CHANGE# NUMBER Y NEXT_TIME DATE Y 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 17 BLOCKS NUMBER Y BLOCK_SIZE NUMBER Y CREATOR VARCHAR2(7) Y REGISTRAR VARCHAR2(7) Y STANDBY_DEST VARCHAR2(3) Y ARCHIVED VARCHAR2(3) Y APPLIED VARCHAR2(3) Y DELETED VARCHAR2(3) Y STATUS VARCHAR2(1) Y COMPLETION_TIME DATE Y DICTIONARY_BEGIN VARCHAR2(3) Y DICTIONARY_END VARCHAR2(3) Y END_OF_REDO VARCHAR2(3) Y BACKUP_COUNT NUMBER Y ARCHIVAL_THREAD# NUMBER Y ACTIVATION# NUMBER Y IS_RECOVERY_DEST_FILE VARCHAR2(3) Y COMPRESSED VARCHAR2(3) Y FAL VARCHAR2(3) Y END_OF_REDO_TYPE VARCHAR2(10) Y 1.4.2 V$ARCHIVE_DEST视图 对于当前例程,说明所有归档日志目标、当前值、模式和状态。 SQL> desc V$ARCHIVE_DEST Name Type Nullable --------------- ------------- -------- DEST_ID NUMBER Y DEST_NAME VARCHAR2(256) Y STATUS VARCHAR2(9) Y BINDING VARCHAR2(9) Y s NAME_SPACE VARCHAR2(7) Y TARGET VARCHAR2(7) Y ARCHIVER VARCHAR2(10) Y SCHEDULE VARCHAR2(8) Y DESTINATION VARCHAR2(256) Y LOG_SEQUENCE NUMBER Y REOPEN_SECS NUMBER Y 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 18 DELAY_MINS NUMBER Y MAX_CONNECTIONS NUMBER Y NET_TIMEOUT NUMBER Y PROCESS VARCHAR2(10) Y REGISTER VARCHAR2(3) Y FAIL_DATE DATE Y FAIL_SEQUENCE NUMBER Y FAIL_BLOCK NUMBER Y FAILURE_COUNT NUMBER Y MAX_FAILURE NUMBER Y ERROR VARCHAR2(256) Y ALTERNATE VARCHAR2(256) Y DEPENDENCY VARCHAR2(256) Y REMOTE_TEMPLATE VARCHAR2(256) Y QUOTA_SIZE NUMBER Y QUOTA_USED NUMBER Y MOUNTID NUMBER Y TRANSMIT_MODE VARCHAR2(12) Y ASYNC_BLOCKS NUMBER Y AFFIRM VARCHAR2(3) Y TYPE VARCHAR2(7) Y VALID_NOW VARCHAR2(16) Y VALID_TYPE VARCHAR2(15) Y VALID_ROLE VARCHAR2(12) Y DB_UNIQUE_NAME VARCHAR2(30) Y VERIFY VARCHAR2(3) Y SQL> SELECT destination, binding, target, status FROM v$archive_dest; DESTINATION BINDING TARGET STATUS --------------- --------- ------- --------- c:\arc_zero OPTIONAL PRIMARY VALID OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 19 OPTIONAL PRIMARY INACTIVE OPTIONAL PRIMARY INACTIVE 10 rows selected 1.4.3 v$log_history视图 v$log_history 包含控制文件中的日志文件信息。 SQL> desc v$log_history; Name Type Nullable ----------------- ------ -------- RECID NUMBER Y STAMP NUMBER Y THREAD# NUMBER Y SEQUENCE# NUMBER Y FIRST_CHANGE# NUMBER Y FIRST_TIME DATE Y NEXT_CHANGE# NUMBER Y RESETLOGS_CHANGE# NUMBER Y RESETLOGS_TIME DATE Y 1.4.4 V$DATABASE视图 V$DATABASE 视图显示归档的当前状态。 SQL> desc V$DATABASE; Name Type Nullable ---------------------------- ------------- -------- DBID NUMBER Y NAME VARCHAR2(9) Y CREATED DATE Y RESETLOGS_CHANGE# NUMBER Y RESETLOGS_TIME DATE Y PRIOR_RESETLOGS_CHANGE# NUMBER Y PRIOR_RESETLOGS_TIME DATE Y LOG_MODE VARCHAR2(12) Y CHECKPOINT_CHANGE# NUMBER Y ARCHIVE_CHANGE# NUMBER Y 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 20 CONTROLFILE_TYPE VARCHAR2(7) Y CONTROLFILE_CREATED DATE Y CONTROLFILE_SEQUENCE# NUMBER Y CONTROLFILE_CHANGE# NUMBER Y CONTROLFILE_TIME DATE Y OPEN_RESETLOGS VARCHAR2(11) Y VERSION_TIME DATE Y OPEN_MODE VARCHAR2(10) Y PROTECTION_MODE VARCHAR2(20) Y PROTECTION_LEVEL VARCHAR2(20) Y REMOTE_ARCHIVE VARCHAR2(8) Y ACTIVATION# NUMBER Y SWITCHOVER# NUMBER Y DATABASE_ROLE VARCHAR2(16) Y ARCHIVELOG_CHANGE# NUMBER Y ARCHIVELOG_COMPRESSION VARCHAR2(8) Y SWITCHOVER_STATUS VARCHAR2(20) Y DATAGUARD_BROKER VARCHAR2(8) Y GUARD_STATUS VARCHAR2(7) Y SUPPLEMENTAL_LOG_DATA_MIN VARCHAR2(8) Y SUPPLEMENTAL_LOG_DATA_PK VARCHAR2(3) Y SUPPLEMENTAL_LOG_DATA_UI VARCHAR2(3) Y FORCE_LOGGING VARCHAR2(3) Y PLATFORM_ID NUMBER Y PLATFORM_NAME VARCHAR2(101) Y RECOVERY_TARGET_INCARNATION# NUMBER Y LAST_OPEN_INCARNATION# NUMBER Y CURRENT_SCN NUMBER Y FLASHBACK_ON VARCHAR2(18) Y SUPPLEMENTAL_LOG_DATA_FK VARCHAR2(3) Y SUPPLEMENTAL_LOG_DATA_ALL VARCHAR2(3) Y DB_UNIQUE_NAME VARCHAR2(30) Y STANDBY_BECAME_PRIMARY_SCN NUMBER Y FS_FAILOVER_STATUS VARCHAR2(21) Y FS_FAILOVER_CURRENT_TARGET VARCHAR2(30) Y FS_FAILOVER_THRESHOLD NUMBER Y FS_FAILOVER_OBSERVER_PRESENT VARCHAR2(7) Y FS_FAILOVER_OBSERVER_HOST VARCHAR2(512) Y 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 21 1.4.5 V$ARCHIVE_PROCESSES视图 V$ARCHIVE_PROCESSES 提供有关例程的各种 ARCH 进程的状态的信息。 SQL> desc V$ARCHIVE_PROCESSES Name Type Nullable ------------ ------------ -------- PROCESS NUMBER Y STATUS VARCHAR2(10) Y LOG_SEQUENCE NUMBER Y STATE VARCHAR2(4) Y 第 2 章 Oracle备份与恢复原理 第 二 章 ORACLE 备份与恢复原理 备份、还原、恢复的基本原理 可能的故障类型 备份恢复策略 备份恢复分类简介 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 22 本章主要介绍数据库备份、恢复、还原的基本原理,列出 Oracle 环境中可能发生的故 障类型,并定义针对数据库的备份恢复策略。 数据库管理员(DBA) 的主要职责之一就是确保数据库可用。DBA 可以采取预防措施来 尽量减少系统故障。 尽管有预防措施,但期望永远不出现故障只能是一种幼稚的想法。数据库出现故障后, DBA 必须尽快使之恢复运行,尽量减少数据损失。 为了保护数据免受各种可能发生的故障的影响,DBA 必须定期备份数据库。如果没有 最新的备份,一旦发生文件损失, DBA 就不可能在不损失数据的情况下使数据库恢复运行。 备份对从各种类型的故障中进行恢复至关重要。无论如何强调验证备份都不为过。以 为备份存在而没有实际检查它是否存在,则一旦备份无效,代价可能会极其惨重。 2.1 数据库备份、还原和恢复的基本原理 第 一 节 数据库备份、还原、恢复 的基本原理 为什么需要恢复 检查点与 CKPT 进程 LGWR 进程 日志缓存 联机重做日志文件 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 23 备份可以分为逻辑备份与物理备份。简单的说,逻辑备份是按数据库中数据的备份,物 理备份是按存储介质,数据文件的备份。比如说,利用数据导入、导出工具进行数据库的导 出属于逻辑备份,而对于表空间 数据文件的拷贝就属于物理备份。因而,利用何种方式进行 的备份,相应的也需要对应的恢复方式进行恢复。逻辑备份与恢复一般是通过 Export/Import 等相应的工具进行,物理备份与恢复,请参考图 2.1: 图 2.1 物理备份与恢复 该图说明如下: 用户在 SCN=100 的时候,执行数据库备份,在 SCN=500 的时候发生介质损坏,需要执 行恢复,恢复時,取 SCN=100 時的数据库备份,再利用 SCN=100~500 這一段時間的归档 日值进行增量恢复,恢复成功后,数据库达到 SCN=500 时的状态。 另外要提一下实例恢复: 当数据库实例发生故障而发生停机,或用户利用 abort 选项关闭实例后,数据库再启动 后会自动执行实例恢复,实例恢复会回滚上次实例运行时未提交的事务以及一些其他的动 作,将数据库恢复到一致状态,这个过程对于用户来说是透明的,由实例自动进行,不需要 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 24 人工干预。 2.1.1 为什么需要恢复 2.1.2 检查点与CKPT进程 checkpoint 是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制 文件和数据文件。什么时候发生 checkpoint? 我们知道了 checkpoint 会刷新脏数据,但什么时 候会发生 checkpoint 呢?以下几种情况 会触发 checkpoint。 1.当发生日志组切换的时候 。 2. 当符合 LOG_CHECKPOINT_TIMEOUT , LOG_CHECKPOINT_INTERVAL , FAST_START_IO_TARGET,FAST_START_MTTR_TARGET 参数设置的时候。 3.当运行 ALTER SYSTEM SWITCH LOGFILE 的时候 。 4.当运行 ALTER SYSTEM CHECKPOINT 的时候。 5.当运行 alter tablespace XXX begin backup,end backup 的时候。 6.当运行 alter tablespace ,datafile offline 的时候。 增量检查点( incremental checkpoint),oracle8 以后推出了 incremental checkpoint 的机制, 在以前的版本里每次 checkpoint 时都会做一个 full thread checkpoint,这样的话所有脏数据会 被写到磁盘,巨大的 i/o 对系统性能带来很大影响。为了解决这个问题,oracle 引入了 checkpoint queue 机制, 每一个脏块会被移到检查点队列里面去,按照 low rdb(第一次对此 块修改对应的 redo block address)来排列,靠近检查点队列尾端的数据块的 low rba 值是最 小的,而且如果这些赃块被再次修改后它在检查点队列里的顺序也不会改变,这样就保证了 越早修改的块越早写入磁盘。每隔 3 秒钟 ckpt 会去更新控制文件和数据文件,记录 checkpoint 执行的情况。 增量检查点并不去更新数据文件头,只是在控制文件中记录了 checkpoint progress record 这个区域,记下 low rba,on-disk rba 等信息。这些信息就可以用来快速恢复。(解释)每隔 3 秒钟 ckpt 会去更新控制文件和数据文件,记录 checkpoint 执行的情况。 这里应该是只更新控制文件,每 3 秒不是更新数据文件,记录 checkpoint 的执行情况, 这个说法,没错,但不够详细,应该说,由于增量检查点和 checkpoint queue 的原理,ckpt 进程每次只是告诉 dbwr ,写 dirty buffer 将要一直写到最新这个位置,仅仅是告诉 dbwr 一个 checkpoint queue 中的结束点,而 ckpt 每 3 秒钟,在控制文件中报告一下 dbwr 最 新写入的位置。 这样使得,比如数据库要做恢复的时候( instance recovery)可以从这个 最新位置开始做恢复,而不是从数据文件中的 checkpoint scn 开始做恢复,这样将缩短恢 复时间,尤其是 instance crash 的情况下启动更快。 另外要注意的是,检查点发生的时候, ckpt 去更新数据文件头和控制文件,并不是把 当前检查点发生时候的 scn 更新进去,而是把上一次 dbwr 写入已经完成的检查点发生时候 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 25 的 scn 更新进去 ,也就是说,更 新控制文件和数据文件头 是 滞后于检查点的发生的, 这个从恢复的原理也很容易理解,因为检查点发生的时候 dirty buffer 还没有写入,自然不 能立即更新成当前的 scn 了。 CHECKPOINT (CKPT) 检查点进程用来在数据库里实现同步,实现之前会强制将脏数据 从内在里写到物理文件里。 会启动 DBWn 来写脏数据(SIGNALLING DBWn at CKPT),完后会更新 DATAFILE 的 HEADER 和控制文件的 HEADER.而 HEADER 中有同步所需要的信息,即 CHECKPOINT 的 信息。在 ORACLE 中,正常情况下,所有文件必须同期性地同步;靠 CHECKPOINT 来完成。 2.1.3 LGWR进程 LGWR, 当 transaction commit, 发生 LGWR, 把所有 redo buffer 记录到 online redolog 中。transaction 才能标记 commit 成功。 触发 LGWR 的条件有: 1) 每 3 秒 2) 在 DBWR 触发时,发现 dirty data 对应 redolog 还没有被写入 redo logfile, 触发 LGWR. 3) redolog 达到 redo buffer 的三分之一。 4) redolog 达到 1m 2.1.4 日志缓存 数据库在运行过程中,不可避免的要遇到各种能够导致数据块库损坏的情况。比如突然 断电、oracle 或者操作系统的程序 bug 导致数据库内部逻辑结构损坏、磁盘介质损坏等,都 有可能造成数据库崩溃,从而导致数据丢失的现象发生。 为了避免,或者说为了修复这些状况所导致的数据丢失现象, oracle 引入了日志缓冲区 和日志文件的概念。所谓日志,就是将所有数据库中所有改变数据块的操作,都原原本本的 记录下来。这些改变数据块的操作不仅包括对数据表的 DML 或者对数据字典的 DDL,还包 括对索引的改变、对回滚段数据块的改变、对临时表空间的临时段的改变等。只有将数据库 中所有的变化都记录下来,当发生数据库损坏时,才能够从损坏时的那一点开始,将之后数 据库中的变化重新运用一遍,从而达到恢复数据库的目的。既然是要记录,那就必然引出一 个问题,就是如何记录这些变化?比较容易想到的有两种方式。 第一种是使用逻辑的记录方式,也就是用描述性的语句来记录整个变化过程。比如对于 某个 update 更新操作来说来说,可以记录为两条语句: delete 旧值以及 insert 新值。这种方 式的优点是非常节省空间,因为对每个操作,只需要记录几条逻辑上的语句即可。但是缺点 也很明显,就是一旦需要进行恢复,就会非常消耗资源。设想一下,某个 update 操作更新 了非常多的数据块,由于 buffer cache 内存有限,很多脏数据块都已经写入了数据文件。但 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 26 就在更新快结束时,突然发生断电,所做的更新丢失。那么重新启动实例时, oracle 需要应 用日志文件里的记录,于是重新发出 delete 旧值以及 insert 新值的语句。这个过程需要重 新查找数据文件中符合条件的数据块,然后再挑出来进行更新。这个过程将非常消耗时间, 而且会占用大量的 buffer cache。 第二种方式是使用物理的记录方式,也就是将每个数据块改变前的镜像和改变后的镜像 都记录下来。这种方式优点就是恢复起来速度非常快,直接根据日志文件里所记录的数据块 地址和内容更新数据文件中对应的数据块。但是缺点也很明显,就是非常占用磁盘空间。 而 oracle 在记录日志的方式上,采用了逻辑和物理相结合的方式。也就是说, oracle 针 对每个数据块,记录了插入某个值或者删除某个值的描述语句。假如某个 update 更新了 100 个数据块,则 oracle 会针对每个数据块记录一对 delete 旧值和 insert 新值的语句,共有 100 对这样的描述语句。通过这种方式, oracle 获得了物理记录方式的快速恢复的优点,同时又 获得了逻辑记录方式的节省空间的优点。 为了临时存放所产生的日志信息,oracle 在 SGA 中开辟了一块内存区域。这块区域就 叫做日志缓冲区( log buffer),当满足一定条件以后,oracle 会使用名为 LGWR 的后台进程 将 log buffer 中的日志信息写入联机日志文件里。 可以使用初始化参数 log_buffer 来设置日志缓冲区的大小,单位是字节。 日志缓冲区只是日志信息临时存放的区域,这块区域是有限的,而且其中的每个块都是 能够循环使用的。这也就说明,日志缓冲区中的内容必须要写入磁盘上的文件里,才能永久 保留下来,才能在数据库崩溃时能够用来进行恢复。这个文件就叫做联机日志文件。在每个 日志缓冲区中的日志块被重用之前,其内容必然已经被写入了磁盘上的联机日志文件中。 2.1.5 联机重做日志文件 联机日志文件就是日志缓冲区的完全拷贝,组成日志文件的每个日志块的内容都来自于 日志缓冲区的日志块。每个日志缓冲区中 的日志块都对应到日志文件中的一个日志块。日志 缓冲区中的日志块根据发生的先后顺序,放入联机日 志文件。由于日志文件在故障恢复中的 重要性,建议至少使用两个日志文件组成一个日志文件组。同一个日志文件组中的日志文件 内容一摸一样,因为日志缓冲区中的日志块同时会写入日志文件组中的每个日志文件中。每 个数据库都必须至少拥有两个日志文件组。这是由于只要数据库一天不停止运行,就会不断 产生日志信息,就会不断写入联机日志文件,联机日志文件总会有写满的时候。我们不可能 让联机日志文件无限大,也不可能放无限多的联机日志文件,所以联机日志文件必须是循环 使用的,在若干个日志文件中轮流的进行写入。一个日志文件写满以后转换到另外一个日 志 文件继续写的过程叫做日志切换(log switch)。 当一个联机日志文件写满时,可以选择将其归档为脱机日志文件,通常叫做归档日志文 件。归档也就是拷贝,归档的过程也就是将写满的联机日志文件拷贝到预先指定的目录的过 程。只有当一个联机日志文件完成归档以后,该联机日志文件才能够被再次循环使用。强烈 建议在生产库中选择这种归档方式,只有在测试环境中可以不选择这种归档方式。 可以说,日志缓冲区和日志文件存在的唯一目的就是为了保证被修改的数据不会被丢 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 27 失。反过来说,也就是为了能够在数据库崩溃的时候,可以用来将数据库恢复到 崩溃的那个 时间点上。这也就是说,只有将被修改的数据块的日志信息写入了联机日志文件以后,该被 修改的数据块才可以说是安全的。如果日志信息在没有被写入日志文件时发生实例崩溃,这 时对数据的修改仍将丢失。由此我们可以看出,将日志缓冲区中的日志信息写入日志文件是 一个多么重要的过程,这个过程是由一个名为 LGWR 的后台进程完成的。LGWR 承担了维 护系统数据完整性的任务,它保证了数据在任何情况下都不会丢失。 2.2 Oracle 环境中可能发生的故障类型 Oracle 环境中可能发现虾米的故障类型:语句故障、用户进程故障、用户错误、网络故 障、例程故障、介质故障。 每种类型的故障都要求 DBA 不同程度地介入以便从中有效地进行恢复。在某些情况 下,恢复取决于已实施的备份策略的类型。例如,语句故障几乎不需要 DBA 干预,而介质 故障则要求 DBA 使用经过测试的恢复策略。 第 二 节 Oracle 环境中可能发生 的故障类型 语句故障 用户进程故障 用户错误 数据库崩溃与实例恢复 介质故障与介质恢复 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 28 2.2.1 语句故障 在 Oracle 程序中处理语句时如果出现逻辑故障就会导致语句故障。语句故障的类型包 括: 应用程序中出现逻辑错误。 用户试图向表中输入无效数据,可能破坏完整性约束。 用户权限不足却试图执行某个操作,例如只有 SELECT 权限却在表中执行插入操作。 用户试图创建表,但超出了分配给该用户的限额限制。 用户试图对表执行 INSERT 或 UPDATE 操作,导致分配了一个区,但是表空间中的可 用空间不足。 如果遇到语句故障,Oracle 服务器或操作系统将返回错误代码和错误消息。失败的 SQL 语句将自动回退,然后控制权将返回给用户程序。应用程序开发人员或 DBA 可使用 Oracle 错误代码来诊断和帮助解决故障。 出现语句故障后,DBA 进行干预的程度各不相同,这取决于故障的类型,可能包括以 下内容: 修复应用程序以使逻辑流正确无误。根据您的环境,这可能是应用程序开发人员的任务, 而不是 DBA 的任务。 修改并重新发出 SQL 语句。这可能也是应用程序开发人员的任务,而不是 DBA 的任 务。 为用户提供成功完成该语句所必需的最低数据库权限。 发出 ALTER USER 命令以更改限额限制。 向表空间中添加文件空间。从技术角度讲,DBA 应确保不发生此类情况;但是在某些 情况下可能需要添加文件空间。DBA 还可以对数据文件使用 RESIZE 和 AUTOEXTEND 选 项。 Oracle9i 提供了一种在出现空间分配故障时先挂起、然后恢复执行大型数据库操作的方 法。这使得管理员可以采取更正措施,而不是由 Oracle 数据库服务器向用户返回错误。在 错误条件得到更正之后,挂起的操作将自动恢复。此功能称为可恢复的空间分配,受影响的 语句称为可恢复语句。 2.2.2 用户进程故障 用户进程失败的原因可能有多种;但最常见的原因如下: 用户在会话中执行了异常断开操作。例如,用户在连接到客户机-服务器配置环境中的 数据库的情况下,关闭了 SQL*Plus 窗口。 用户会话被异常终止。一种可能的情况是用户在连接到客户机-服务器配置环境中的数 据库时重新引导了客户机。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 29 用户程序导致地址异常,从而终止会话。如果在发生异常时,应用程序未对这些异常 进行正确处理,则通常会发生这种情况。 DBA 很少需要执行操作来解决用户进程错误。该用户进程不能继续工作,尽管 Oracle 服务器和其它用户进程会继续正常运行。出现异常终止的用户进程后, PMON 后台进程通 常足以清理该用户进程。 PMON 进程检测到异常终止的服务器进程时,它将回退该异常终 止进程的事务处理,并释放它所获得的任何资源和锁。 2.2.3 用户错误 用户错误通常包括以下几种: 用户意外地删除或截断 表。用户删除表中的所有行。用户提交了数据,但在其中发现 一个错误。 我们无法完全避免用户错误,只能尽可能减少用户错误,在任何数据库和应用程序环 境中,一个关键的问题就是确保用户已经过适当培训,并且知道数据库可用性和完整性的含 义。 DBA 应该了解应用程序和商业运作的类型,这可避免由于用户错误而导致数据丢失; DBA 还应该了解在这些情况下如何采取恢复措施。 某些恢复情况涉及的范围可能很广,例如将数据库还原到出现错误之前的时间点、导 出丢失的数据,然后将数据导入到丢失了该数据的数据库。 LogMiner 是一种关系工具,通过它, 可以以使用 SQL 来阅读、分析、解释联机和归 档日志文件。使用 LogMiner 分析日志文件可用来查明何时对数据库进行了错误的修改。这 样,就可以在应用程序级(而不是在数据库级)执行逻辑恢复了。 Oracle9i 提供一种称为 FlashBack 的新功能,可以以用它来查看和修复历史数据。 FlashBack 提供对截止某一特定时间或用户指定的系统提交号 (SCN) 的数据库执行查 询的功能。 2.2.4 数据库崩溃与实例恢复 数据库崩溃的原因可能有多种: 由于断电,导致服务器不可用。由于硬件问题( 如 CPU 故障或内存损坏)或操作系统 崩溃而导致服务器不可用。某个 Oracle 服务器后台进程( DBWn、LGWR、PMON、SMON 或 CKPT)出现故障。 要从崩溃中恢复,DBA 可以使用“ startup” 命令启动例程。 Oracle 服务器将自动恢复, 并执行前滚和回退阶段。通过阅读警报日志和在例程故障期间生成的其它所有跟踪文件来调 查故障原因。 崩溃恢复和例程恢复将数据库恢复到发生例程故障之前的事务处理一致状态。根据定 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 30 义,崩溃恢复是对单例程配置中的数据库或 Oracle Real Application Clusters 配置(其中的所 有例程都已崩溃)中的数据库执行的恢复;而例程恢复是通过 Oracle Real Application Clusters 配置中的一个活动例程来恢复一个失败的例程。如果需要,可以在数据库打开时,由 Oracle 服务器自动执行崩溃恢复。 您不必执行任何恢复操作。所有必需的重做信息都由 SMON 来读取。要从这种类型的 故障中进行恢复,请启动例程: SQL> CONNECT / AS sysdba Connected. SQL> STARTUP . . . Database opened. 数据库打开后,通知用户必须重新输入未提交的所有数据。 在启动数据库和出现“数据库已打开” (Database opened) 通知之间可能有一个时间延 迟,这是数据库装载时发生的前滚阶段。 SMON 通过应用联机重做日志文件(来自最后一 个检查点)中记录的更改来执行前滚进程。前滚可恢复尚未记录到数据库文件中、但已记录 到联机重做日志中的数据,包括还原段的内容。 打开数据库时可能发生回退,原因是无论 SMON 或是服务器进程都可以执行回退操作。 这使数据库可以更快地供用户使用。 2.2.5 介质故障与介质恢复 介质故障包含对操作数据库所需的文件进行读写操作时产生的物理问题。介质故障是最 严重的故障类型,原因是它通常需要 DBA 的干预。 与介质有关的问题的常见类型: 包含某一数据库文件的磁盘驱动器出现磁头损坏。 对实现正常数据库操作所需的文件进行读写操作时存在物理问题。 文件被意外删除。 经过测试的恢复策略是解决介质故障问题的关键要素。DBA 能够在多大程度上尽量减 少由介质故障引起的停机时间和数据损失取决于可用备份的类型。因此,恢复策略取决于以 下因素: 选择的备份方法以及受到影响的文件。 数据库操作的 ARCHIVELOG 模式。如果采用归档,可以应用已归档的重做日志文件 来恢复自上次备份以来所提交的数据;如果使用 RMAN,还可以应用增量备份。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 31 2.3 备份和恢复策略 不管您选择什么样的备份策略,获得相应管理层的认同是很重要的。例如,如果贵公司 不希望制作文件的物理映像副本,以尽量减少对磁盘空间的占用,那么管理层必须清楚这个 决定可能引起的后果。在选择备份策略时,应考虑以下一些问题: 根据对系统可用性的期望,管理层是否权衡了所选备份策略的利弊? 是否有专门的资源来确保成功实施备份和恢复策略? 是否已明确了解进行备份和准备恢复的步骤的重要性? 对业务要求、操作要求和技术要求进行一次全面的分析,向管理层提供支持有效备份和 恢复策略所需的信息。 2.3.1 为什么要制定 备份恢复策略 随着信息系统在各种商务活动中重要性的不断增强,维护系统数据的可用性已成为当 前一个十分重要的课题。为了有效地保持健康的信息系统,必须采取一定的措施防止在由介 质、操作系统、软件和其它事件导致重要数据库文件严重损坏的情况下影响 RDBMS(关系 数据库管理系统),进而影响信息系统的正常运行。 考虑到如今大部分信息系统每周的业务是 24×7 操作,因此采用联机备份,否则可每 隔一定时间进行一次脱机备份。应用上述规则,可得出下述典型的备份策略: 第 三 节 备份和恢复策略 指定多个归档进程 自动归档的管理 手动归档 控制归档到目标 指定归档的文件格式 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 32 1、镜像拷贝重作日志文件; 2、镜像拷贝控制文件; 3、激活归档进程,即以 ARCHIVELOG 模式操作数据库; 4、每天进行数据库的部分联机备份(每天进行数据库的完全热备份将无畏地增加数据 库的负担且没有必要,同时也增加了数据库恢复时的灵活性); 5、每隔一周或几周进行一次数据库的逻辑备份; 6、定期检查备份是否正常,定期测试备份的可恢复性以及恢复时间。 2.3.2 必须考虑的因 素 制定备份恢复策略需要考虑下面几个问题: 业务要求,您应该了解停机时间将对业务产生的影响。管理层必须量化停机时间及数据 损失的代价,并将其与减少停机时间及尽量减少数据损失所需的成本进行比较。 MTTR:数据库的可用性是 DBA 要考虑的一个主要问题。出现故障后,DBA 应努力 缩短平均恢复时间 (MTTR)。此策略可确保数据库的不可用时间尽可能地最短。通过预测可 能发生的故障的类型并采取有效的恢复策略,DBA 可以最终达到缩短 MTTR 的目的。 MTBF:保护数据库以防止出现各种类型的故障也是 DBA 的一个重要任务。要做到这 点,DBA 必须延长平均故障间隔时间(MTBF)。DBA 必须了解 Oracle 数据库环境中备份和 恢复的结构,并对数据库进行相应配置,才不会经常发生故障。 演变过程:备份及恢复策略随着业务要求、操作要求和技术要求的变化而逐渐发展。 DBA 和相应的管理层都应定期对备份和恢复策略的有效性进行检查,这一点至关重要。 操作要求,备份和恢复总是受到您所提供的业务操作类型的影响,在数据库必须一周 7 天、一天 24 小时连续运行的情况下更是如此。正确的数据库配置对于支持这样的操作要求 是必需的,因为它们直接影响数据库环境的技术层面。 DBA 可以通过制定计划定期测试备份的有效性,来确保他们的策略可以缩短 MTTR 并 延长 MTBF。有效的恢复取决于有效的备份。在选择备份策略时,应考虑以下一些问题:当 您需要帮助时,是否可以求助于系统管理员、供应商、后备 DBA 以及其他关键人员?您是 否可以按安排的时间间隔经常测试备份和恢复策略?备份副本是否存储在其它地方?计划 是否被详细记录并得到良好的维护? 影响操作要求的其它问题包括数据的易变性和数据库的结构。在选择备份策略时,应考 虑以下一些问题:表是否要经常更新?数据是否频繁变更?如果 是这样,您就必须比那些数 据相对稳定的业务更频繁地进行备份。数据库结构是否经常改变?您添加数据文件的频率如 何? 技术方面的考虑因素: 物理映像副本,某些技术要求由所要求的备份类型决定。例如,如果需要数据文件的物 理映像副本,这将显著影响可用存储空间。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 33 逻辑副本,创建数据库中对象的逻辑副本对存储要求的影响没有物理映像副本那么显 著;然而,由于用户访问数据库时执行逻辑副本,系统资源可能会受到影响。 数据库配置,数据库的配置影响执行备份的方式和数据库的可用性。根据数据库配置, 系统资源(如支持备份及恢复策略所需的磁盘空间)可能会受到限制。 事务处理量,事务处理量也会影响系统资源。如果 24 小时(全天候)操作要求定期备 份,则会增加系统资源的负担。 技术要求 在选择备份策略时,应考虑以下一些问题: 您有多少数据?您的计算机的能力及容量是否足以支持备份?数据是否易于重新创 建?您是否可以将数据从纯数据文件重新加载到数据库?数据库配置是否能支持从不同类 型故障中复原? 灾难恢复问题,您的数据可能非常重要,以至于您必须确保甚至在系统完全瘫痪的情况 下也能够复原。自然灾害和其它问题可能影响您的数据的可用性,因此在创建灾难恢复计划 时应考虑这些问题。在选择备份和恢复策略时,应考虑以下一些问题: 在发生以下严重灾难时,您的业务会受到什么样的影响: 水灾、火灾、地震或飓风 、存储硬件或软件故障。如果您的数据库服务器发生故障,那 么在更换新硬件系统可能需要的数小时、数天或者甚至数周内,您的业务是否可以继续运 转?备份是否存储在其它地方? 解决方法: 异地备份,使用 Oracle9i Data Guard,它通过自动创建、管理和监视备用数据库环境的 各个方面来保护关键性数据。 地理镜像,消息传送,TP 监视器。 关于重要人员,应考虑以下问题: 失去这样的人员对您的业务会有多大影响?如果您的 DBA 离开公司或无法工作,您的 数据库系统是否还能继续运行?如果没有 DBA,将由谁负责恢复工作? 2.3.3 优化例程恢复的方法 日志文件中的信息为了当系统出现 failure 时,保证事务可以恢复。当用户事务完成发 出 commit 时,总是先等待 LGWR 进程将事务所需的 redo 信息写到日志文件(之前可能在 redo buffer 中)后,才会收到 commit complete 信息。 DBWR 进程总是比 LGWR 进程写的速 度慢( DBWR 进程是随机写, LGWR 进程是顺序写,随机写比顺 序写要慢)当 DBWR 进程 要将缓存区中的信息写入到数据文件时,会先通知 LGWR 进程将事务相关的 redo 信息写入 到日志文件。SCN 可以理解为一个标签,ORACLE 对数据库中的每个操作都打上一个标签。 这个标签是顺序增加的。永远不会归 0(除非数据库重建) CHECKPOINT 是 ORACLE 为了 记录哪些数据已经被写入到数据文件中。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page 010-62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 34 CHECKPOINT 的作用就是要保证当 checkpoint 发生时,这个 checkpoint SCN 之前的数 据都要由 DBWR 写入到数据文件中,而在 DBWR 写之前,又会触发 LGWR 进程将相关的 redo 信息写入到日志文件中。这样, checkpoint 完成后,发生 instance failure 时就不再需要 恢复这个 checkpoint SCN 前的信息。 Instance Recovery 所需要的信息,就是最近一次 checkpoint 之后到日志文件结尾的这些 redo 信息。因为 checkpoint 之前的数据都已经一致性地写入到数据文件中了,而之后的数据 可能有一部分已经写进数据文件,而有一部分没有写进数据文件。 Instance Recovery 所需要的时间,将数据文件 从最近一次 checkpoint 开始, 恢复到控 制文件中记录的这个数据文件的最后一个 SCN 值为止,应用这两者之间 redo 信息的时间就 是 instance recovery 所要花费的时间。 由上面的信息可以总结出,实例恢复最关键的问题的就是最近一次 CHECKPOINT 发生 的时间,以及 CHECKPOINT 发生的频率。只有确认了最近一次 CHECKPOIN 发生的时间 点,才能确定恢复所需的 redo 信息,以及恢复所要花费的时间。 对于 instance recovery 花费时间的调优,就是对参数 FAST_START_MTTR_TARGE 的调 整,单位“秒”,最大值 为 3600 秒。也就是说 FAST_START_MTTR_TARGET 这个参数的设 置会直接影响到 checkpoint 发生的频率。 FAST_START_MTTR_TARGE 所设置的时间就是 用户希望数据库用在 instance recovery 的时间。也就是从应用最近一次 checkpoint 到日志信 息最后这两个点之间 redo 信息所要花费的时间。 MTTR 设置的时间过小的话,会造成系统 checkpoint 过于频繁,而发生 checkpoint 时就 要 DBWR,LGWR 等进程写数据文件,产生物理 IO,久而久之,数据库性能会越来越慢; MTTR 设置的时间过大的话,当实例失败时, instance recover 所花费的时间就会过长。 2.4 备份和恢复分类简介 第 四 节 备份恢复分类简介 简单的按照备份进行的方式,可以分为逻辑备份、冷备 份(脱机备份)、热备份(联机备份),其实冷备份与热备份 又可以合称为物理备份。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 35 第 3 章 用户管理的备份 第 三 章 用户管理的备份 相关术语 用户管理的备份恢复介绍 冷备份 热备份 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -700-0056 LI-193 Oracle 备份与恢复 Http://www.uplooking.com 36 3.1 相关术语 第 一 节 相关术语 整体数据库备份:备份数据库中每一个关键文件, 包括所有数据文件、重做日志文件、控制文件和参 数文件 表空间备份:只备份指定表空间下的所有数据文件 数据文件备份:只备份指定的数据文件 控制文件备份:只备份某一时候的控制文件 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 37 整体数据库备份: 整体数据库备份(也称为整体备份)是指对数据库的所有数据文件和控制文件进行备份。 无论数据库是打开的还是关闭的,都可以执行整体备份。这是最常见的备份方法。 在数据库关闭(使用 NORMAL、IMMEDIATE 或 TRANSACTIONAL 选项关闭数据库) 后进行的整体备份称为一致备份。在这种备份中,所有数据库文件的标头均与控制文件一致, 完全还原后,数据库不需任何恢复即可打开。数据库以 NOARCHIVELOG 模式进行操作时, 只有一致的整体数据库备份才可以用来还原和恢复。 如果数据库打开并且可操作,数据文件的标头将与控制文件不一致,除非数据库是以只 读模式打开的。如果使用 ABORT 选项关闭数据库,这种不一致性将一直存在。这种状态 下的数据库备份称为不一致备份。不一致备份需要通过恢复才能使数据库进入一致状态。如 果数据库需要每周 7 天、每天 24 小时都可用,则只能使用不一致备份,并且只能对以 ARCHIVELOG 模式运行的数据库执行不一致备份。 表空间备份: 表空间备份是对组成表空间的数据文件进行的备份。只有当数据库处在 ARCHIVELOG 模式下时表空间备份才有效,因为要使数据文件与数据库的其它部分保持一致,需要使用重 做条目。在 NOARCHIVELOG 模式下,如果数据库为只读的或脱机正常的, 可以以进行表 空间备份。 数据文件备份: 如果数据库处在 ARCHIVELOG 模式下,可以以对单个数据文件进行备份。在 NOARCHIVELOG 模式下,可以以对只读或脱机正常的数据文件进行备份。 控制文件备份: 可以以对RMAN 进行配置,使之在发出 BACKUP 或COPY 命令后自动备份控制文件。 还可以通过 SQL 命令备份控制文件。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -700-0056 LI-193 Oracle 备份与恢复 38 3.2 什么是用户管理的备份恢复 第 二 节 什么是用户管理的备份恢复 用户管理的备份恢复,也就是在备份时由用户自己 使用操作系统提供的复制命令,复制要备份的文 件。 相关视图:V$DATAFILE、V$CONTROLFILE、V$LOGFILE 和 V$TABLESPACE - 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 39 用户管理的备份和恢复不使用恢复管理器(Recovery Manager),而是使用操作系统命令 来进行数据库文件的备份并在恢复时还原这些备份。恢复命令在 SQL*Plus 会话中发出。 Oracle 建议将 RMAN 用于所有备份和恢复操作,但也支持用户管理的备份和恢复方法。 在开始备份之前,您应该通过查询 V$DATAFILE、V$CONTROLFILE、V$LOGFILE 和 V$TABLESPACE 视图来获得有关数据库文件的信息。 使用 V$DATAFILE 视图获得所有数据文件的名称和状态列表。 SQL> SELECT name, status FROM v$datafile; NAME STATUS ------------------------------------------- ------ /databases/db01/ORADATA/u01/system01.dbf SYSTEM /databases/db01/ORADATA/u02/undotbs.dbf ONLINE /databases/db01/ORADATA/u04/users01.dbf ONLINE /databases/db01/ORADATA/u03/indx01.dbf ONLINE /databases/db01/ORADATA/u02/sample01.dbf ONLINE /databases/db01/ORADATA/u01/querydata01.dbf ONLINE 使用 V$CONTROLFILE 视图显示所有控制文件的名称。 SQL> SELECT name FROM v$controlfile; NAME -------------------------------------------- /databases/db01/ORADATA/u01/ctrl01.ctl /databases/db01/ORADATA/u01/ctrl02.ctl 使用 V$LOGFILE 视图显示所有重做日志文件的名称。 SQL> SELECT member FROM v$logfile; MEMBER ---------------------------------------------- /databases/db01/ORADATA/u03/log01a.rdo /databases/db01/ORADATA/u03/log02a.rdo /databases/db01/ORADATA/u04/log01b.rdo /databases/db01/ORADATA/u04/log02b.rdo 使用 V$TABLESPACE 和 V$DATAFILE 数据字典视图获得所有数据文件及其各 自表空间的列表。在设置用以执行打开的数据库的备份的脚本时,这一点非常 有用,这样,您就可以确保在操作系统级别复制所有文件。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 40 SQL> SELECT t.name tablespace, f.name datafile 2> FROM v$tablespace t, v$datafile f 3> WHERE t.ts# = f.ts# 4> ORDER BY t.name; TABLESPACE DATAFILE ---------- -------------------------------------------- INDX /databases/db01/ORADATA/u03/indx01.dbf QUERY_DATA /databases/db01/ORADATA/u01/querydata01.dbf SAMPLE /databases/db01/ORADATA/u02/sample01.dbf SYSTEM /databases/db01/ORADATA/u01/system01.dbf UNDOTBS /databases/db01/ORADATA/u02/undotbs.dbf USERS /databases/db01/ORADATA/u04/users01.dbf 3.3 冷备份 第 三 节 冷备份 冷备份的概念:关闭数据库的备份 冷备份的优点:恢复后可以直接使用 冷备份的缺点:必须关闭数据库 冷备份的执行过程:先关闭数据库,再复制所有重 要文件 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 41 冷备份是一致的整体数据库备份(也称为关闭的数据库的备份)是在数据库关闭的情况 下对构成 Oracle 数据库的所有数据文件和控制文件进行的备份。它还可以包括对联机重做 日志文件、参数文件和口令文件的备份。采用用户管理的备份操作时,您应该定义一个操作 系统备份过程,然后一直用它来备份 Oracle 数据文件、控制文件、参数文件和口令文件, 这是为了防止潜在的介质故障破坏这些文件而采取的策略的一部分。 确保记下这些文件的完整路径名并在备份时正确使用。在多个数据库的 环境中,由于参 数文件和口令文件的名称并不记录在字典中,所以必须小心地通过某一命名约定将这些文件 与相应的数据库关联起来。如果使用“正常”、“事务处理” 或“立即” 选项彻底地关闭了 数据库,则不必在整体数据库备份中包含联机重做日志文件。但是,在需要还原整个数据库 的情况下,如果已备份了联机重做日志文件,还原过程将得以简化。 进行数据库冷备份的优点: 冷备份在概念上简明易懂,您只需:关闭数据库,将所有需要的文件复制到备份位置, 打开数据库要执行关闭的数据库的备份,只需使用数量极少的几个命令。 只要执行一个简单 的脚本,而且只需很少的交互操作,就可以自动 的数据库的冷备份,步骤如下:关闭数据库, 复制控制文件和数据文件,打开数据库。 所有在冷备份过程中复制的文件都具有一致的时间点。在备份过程中,由于数据库不可 用,因此不发生任何事务处理。 进行数据库冷备份的缺点: 对于数据库必须处于连续可用状态的那些业务经营活动,由于在一致的整体数据库备份 期间数据库会关闭且不可用,所以不能采用这种备份方式。 数据库不可用的时间长短受数据库大小、数据文件的数量以及复制数据文件的速度的影 响。如果这一时间超过了允许的关机时间,您必须选择其它备份类型。 只能恢复到上一次完全一致的整体数据库备份时的状态,丢失的事务处理必须在执行恢 复操作之后手动输入。 执行一致的整体数据库备份,在 Oracle 服务器例程关闭时执行一致的整体数据库备份。 1. 编译要备份的所有相关文件的最新列表。 2. 使用 SHUTDOWN NORMAL、SHUTDOWN IMMEDIATE 或 SHUTDOWN TRANSACTIONAL 命令关闭 Oracle 例程。 3. 使用操作系统备份实用程序备份所有数据文件和控制文件。您还可以备 份重做日志文件,尽管这不是必需的。您还应该备份参数文件和口令文件。 4. 重新启动 Oracle 例程。 关闭命令的缺省选项是“正常” (normal)。如果事务处理或进程有可能仍在访问数据库, 则使用“事务处理” (transactional) 或“立即” (immediate) 选项。可以考虑对此操作使用 可靠的自动执行过程,以确保每个文件都能正确备份。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 42 在执行关闭的数据库的完全备份时,备份初始化参数文件和口令文件。不必将与只读表 空间相关联的文件包含在完全备份中。如果在执行脱机备份或冷备份时打开了数据库,备份 将无效,不能保证在恢复时可以使用。 3.4 热备份 如果业务性质不允许关闭数据库来执行冷备份,可以以使用以下方法在使用数据库的同 时对数据库执行备份: 第 四 节 热备份 热备份是在数据库运行时对数据库进行备份,应该 注意: 联机表空间备份 只读表空间备份 备份控制文件和初始化参数文件 在联机备份失败后执行清除 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 43 执行所有表空间或各个数据文件的备份(无论它们处在联机状态还是脱机状态)。将控 制文件备份为一个二进制文件,或创建一个脚本以重新创建控制文件。联机重做日志文件不 需要备份。这种备份称为热备份。 热备份的优点: 在备份过程中数据库可以正常使用。可以在表空间级(通过 RMAN)或数据文件级执 行备份。支持每天都全天候运作的业务。 进行打开的数据库的备份的注意事项: 需要对 DBA 进行更多的培训。如果执行打开的数据库的备份,推荐使用经测试的自动 执行脚本。 热备份的条件: 只要符合以下两个标准,您就可以在使用数据库的同时,执行表空间或各个数据文件的 备份: 数据库设置为 ARCHIVELOG 模式。通过启用 Oracle 自动归档(ARCn) 进程或手动归 档重做日志文件,确保联机重做日志得到归档。 热备份的选项: 使用 Oracle 服务器,我们既可以备份某一特定表空间的所有数据文件,也可以只备份 某个表空间的一个数据文件。无论您选择哪个选项,在备份过程中,数据库都可以 保持正常 使用(事务处理)。 如果一个数据文件处于备份模式,则可能会生成多个重做日志条目,因为日志写入器将 备份模式下的数据文件中已更改的块的块映像写入重做日志,而不仅仅是写入行信息。这会 对重做日志的大小和日志写入器的性能产生重大影响。 3.4.1 联机表空间备份 我们通过以下步骤可以进行联机表空间的备份: 1. 通过发出 ALTER TABLESPACE...BEGIN BACKUP 命令,将数据文件或表空间设置 为备份模式。这样可避免数据文件头中的序列号发生变化,以便恢复时可以从备份开始时间 应用日志。即使数据文件处于备份模式,仍可用于正常事务处理。 SQL> ALTER TABLESPACE users BEGIN BACKUP; 2. 使用操作系统备份实用程序将表空间中的所有数据文件复制到备份存储中。如果按 顺序备份每个表空间,备份文件中的日志序列号可能不同。 UNIX: cp /ORADATA/u03/users01.dbf /BACKUP/users01.dbf Windows NT: ocopy c:\users\disk1\user01.ora e:\users\backup\user01.ora 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 44 3. 备份表空间的各数据文件后,发出下面的命令将它们设置为正常模式: SQL> ALTER TABLESPACE users END BACKUP; 4. 归档尚未归档的重做日志,以便归档恢复表空间备份所需的重做日志, 如下所示: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; 对所有表空间重复这些步骤,包括 SYSTEM 和还原段表空间。 ALTER TABLESPACE BEGIN BACKUP 和 ALTER TABLESPACE END BACKUP 命令之间的间隔时间应尽量缩短,因为修改后的块写入重做日志文件 将导致生成更多的重做信息。因此建议您每次执行一个表空间的联机备份。 可以通过下面的视图来查询备份的信息: 通过查询 V$BACKUP 和 V$DATAFILE_HEADER 视图,可以在执行打开的数据库的 备份时获得关于数据文件状态的信息。 查询 V$BACKUP 视图以确定哪些文件处于备份模式。发出 ALTER TABLESPACE BEGIN BACKUP 命令后,状态将更改为 ACTIVE。 SQL> SELECT * FROM v$backup; FILE# STATUS CHAGE# TIME ----- ---------- ------- --------- 1 NOT ACTIVE 0 2 NOT ACTIVE 0 3 ACTIVE 312905 05-APR-01 备份文件后,“状态” (STATUS) 列的值将更改为 NOT ACTIVE。 SQL> SELECT * FROM v$backup; FILE# STATUS CHANGE# TIME ----- ------------ ------- --------- 1 NOT ACTIVE 0 2 NOT ACTIVE 0 3 NOT ACTIVE 312905 05-APR-01 处于备份模式的数据文件的信息也可以通过查询 V$DATAFILE_HEADER 视图 获得。发出 ALTER TABLESPACE BEGIN BACKUP 命令后,表空间的数据文 件的 FUZZY 列中的值将更改为 YES,表明相应的文件处于备份模式。 SQL> SELECT name, status, fuzzy FROM v$datafile_header; NAME STATUS FUZ -------------------------------- ------ --- /…/u01/system01.dbf ONLINE /…/u02/undotbs.dbf ONLINE 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 45 /…/u03/users01.dbf ONLINE YES … 发出 ALTER TABLESPACE END BACKUP 命令后,FUZZY 列的值将更改为 NULL。 SQL> SELECT name, status, fuzzy FROM v$datafile_header; NAME STATUS FUZ -------------------------------- ------ --- /…/u01/system01.dbf ONLINE /…/u02/undotbs.dbf ONLINE /…/u03/users01.dbf ONLINE 3.4.2 只读表空间 备份 只读表空间可以通过下面的方法备份: 1 使用 ALTER TABLESPACE SQL 命令将表空间的状态从读写更改为只读: SQL> ALTER TABLESPACE query_data READ ONLY; 2 发出 ALTER TABLESPACE 命令后,会对 所有与表空间相关联的数据文件执行检查 点。然后使用当前 SCN 冻结文件头。 3 使表空间成为只读状态之后,您必须备份该表空间的所有数据文件。 4 DBW0 进程只写入其表空间处于读写模式的数据文件,正常的检查点也只对这些文 件执行。 对只读表空间的说明: 由于不对只读表空间的数据文件执行任何写操作,因此,只有在这些文件损坏的情况下 才必须进行恢复。 将表空间从只读状态更改为读写状态,其结果是导致 DBW0 写入表空间文 件,并象通常一样产生检查点。这样,您就必须对与该表空间相关联的所 有数据文件重新使用正常备份时间表。 使用 ALTER TABLESPACE 命令将表空间更改为只读状态,会导致控制文 件更新。执行恢复操作时,控制文件必须能够正确地标识只读表空间;否 则,您必须恢复该表空间。 3.4.3 备份控制文件 和初始化参数 如果您不使用 RMAN 进行备份,就必须手动备份控制文件。您必须防止丢失控制文件, 因为例程启动时需要使用控制文件中的信息。 Oracle 服务器在进行例程或介质恢复时会用 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 46 到控制文件中的某些状态信息(如当前联机重做日志文件以及数据库文件的名称)。每次对 数据库配置进行更改后,您都需要保留控制文件的最新副本。 备份的原则: 对控制文件进行多元备份,并使用 CONTROL_FILES 参数在 init.ora 文件中为它们命 名。 ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令创建一个用于重新创建 控制文件的脚本。该文件位于由初始化参数 USER_DUMP_DEST 指定的目录下。此脚本不 包含 RMAN 元数据。此外,还应使用 ALTER DATABASE BACKUP CONTROLFILE 命令 来备份各个控制文件。这样可以提供控制文件在该时间点的二进制副本。完全备 份时,正常 关闭例程,然后使用操作系统备份实用程序将控制文件复制到备份存储中。 以下命令更改数据库配置并导致控制文件更改: ALTER DATABASE [ADD | DROP] LOGFILE ALTER DATABASE [ADD | DROP] LOGFILE MEMBER ALTER DATABASE [ADD | DROP ] LOGFILE GROUP ALTER DATABASE [ NOARCHIVELOG | ARCHIVELOG ] ALTER DATABASE RENAME FILE CREATE TABLESPACE ALTER TABLESPACE [ADD | RENAME ] DATAFILE ALTER TABLESPACE [READ WRITE | READ ONLY ] DROP TABLESPACE 注:发出上述任一命令后,都需要备份控制文件。 备份初始化参数: 可以以使用 CREATE PFILE 语句来创建服务器参数文件的备份。服务器参数 文件的内容以文本格式导出到一个初始化参数文件中。 CREATE PFILE 命令可以在缺 省位置创建该文件,您也可以按示例指定文件名。 CREATE PFILE = '/backup/init.ora' FROM SPFILE; CREATE PFILE FROM SPFILE; 同样,也可以进行下面的操作: CREATE SPFILE FROM PFILE; CREATE SPFILE FROM PFILE='/backup/init.ora'; 3.4.4 在联机备份失败后执行清除 联机表空间备份过程中的故障处理: 在联机表空间备份的过程中,可能会发生系统崩溃、电源故障、数据库关闭等故障。一 旦发生任何这些故障:如果操作系统未完成备 份,则备份文件将不可用。您需要重新备份这 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 47 些文件。处在联机备份模式下的数据库文件不会与数据库同步,原因是备份开始时标头被冻 结。数据库将不会打开,因为 Oracle 服务器认为文件已从备份中还原。可以以使用 ALTER DATABASE …END BACKUP 命令使数据文件脱离备份模式。只有在您确定这些文件处于 备份模式、且未从备份中还原的情况下,才可使用此命令。 如果您不能确定某一文件是否需要恢复,或者该文件是否仍处于联机备份模式,可查询 V$BACKUP 视图: SQL> SELECT * FROM v$backup; FILE# STATUS CHANGE# TIME ----- ---------- -------- --------- 1 NOT ACTIVE 0 2 ACTIVE 228596 30-NOV-01 3 NOT ACTIVE 0 4 NOT ACTIVE 0 该输出说明号码为 2 的文件当前处于联机备份模式。要取消对标头的冻结,可发出以 下命令: SQL> ALTER DATABASE datafile 2 END BACKUP; Database altered 或者,如果使用 Oracle9i 可以以发出以下命令 : SQL> ALTER DATABASE END BACKUP; Database altered. 此命令使处在备份模式中的所有数据文件同时脱离该模式。然后,可以以查询 V$BACKUP 以再次检查状态,如下所示: SQL> SELECT * FROM v$backup; FILE# STATUS CHANGE# TIME -------- ------------------ ------- ------- 1 NOT ACTIVE 0 2 NOT ACTIVE 228596 30-NOV-01 ... 现在,可以以为用户打开数据库: SQL> ALTER DATABASE OPEN; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 48 3.5 使用DBVERIFY 实用程序检测损坏 块 使用 DBVERIFY 实用程序可以验证数据文件,具体方法是检查指定数据文件中的数据 块结构的完整性。这是数据库之外的实用程序,因此它对数据库活动的影响最小 该实用程序可用于验证联机数据文件。可以以对数据文件的局部调用该实用程序。该实 用程序可用于验证脱机数据文件。可以以将该实用程序的输出指向错误日志。 DBVERIFY 实用程序的可执行程序名称在不同操作系统中是不同的。它位于 Oracle 主 目录的 bin 目录中。在 UNIX 环境中,应执行 dbv 可执行程序。 可以以使用命令行界面来调用 DBVERIFY 实用程序。该实用程序主要用于以下两个目 的:确保备份数据库(或数据文件)在还原之前是有效的;遇到数据损坏问题时用作诊断辅 助工具。 要验证数据文件 users01.dbf 的完整性(从块 1 开始到块 500 结束), 可以以 第 五 节 使用 DBVERIFY 实用程序检测坏块 DBVERIFY 程序的作用:检测数据文件是否有坏块 DBVERIFY 实用程序的可执行程序名称在不同操作 系统中是不同的。它位于 Oracle 主目录的 bin 目 录中。在 UNIX 环境中,应执行 dbv 可执行程序。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 49 执行如下命令: $ dbv file=/ORADATA/u03/users01.dbf start=1 end=500 DBVERIFY 的名称和位置取决于您的操作系统。有关您的系统的 DBVERIFY 位置的 信息,请参阅针对特定操作系统的 Oracle 文档。 上面命令的输出可能如下所示: DBVERIFY - Verification starting : FILE = /ORADATA/u03/users_01.dbf DBVERIFY - Verification complete Total Pages Examined : 500 Total Pages Processed (Data): 22 Total Pages Failing (Data): 0 Total Pages Processed(Index): 16 Total Pages Failing(Index): 0 Total Pages Empty : 0 Total Pages Marked Corrupt: 0 Total Pages Influx: 0 表 17.1 给出了参数的说明: 参数 说明 FILE 要验证的数据库文件的名称 START 验证的块的起始地址。块地址在 Oracle 块中指定。如果 不指定 START,则假定起始地址为文件中的第一个块。 END 要验证的块的结束地址。如果不指定 END,则假定结束地 址为文件中的最后一个块。 BLOCKSIZE 仅在文件中有大于 2KB 的块时才需要此参数 LOGFILE 指定事件记录信息写入的文件。缺省设置是将输出发送到 终端显示器。 FEEDBACK 使 DBVERIFY 为已验证的 n 页显示单个‘ .’ HELP 提供屏上帮助 PARFILE 指定要使用的参数文件的名称 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 50 第 4 章 用户管理的恢复 本章以案例为主,介绍普通的控制文件、日志文件、表、数 据文件和表空间丢失后的恢复,再介绍一个特殊情况下的当前日 志损坏、无数据文件备份时的恢复 第 四 章 用户管理的恢复 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 51 4.1 用户管理的完全恢复 第 一 节 用户管理的完全恢复 介质恢复 归档模式与非归档模式下的恢复 完全恢复关闭的数据库 恢复打开的数据库 没有备份的恢复 只读表空间恢复和丢失控制文件恢复 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 52 4.1.1 介质恢复 介质恢复用于恢复丢失的或损坏的当前数据文件或控制文件。它还可用于恢复数据文件 脱机时由于未使用 OFFLINE NORMAL 选项而丢失的那些更改。首先是还原文件 (RESTORE),在还原文件时,其实是使用备份副本替代丢失的或损坏的文件。然后是文件 恢复(RECOVER),在恢复文件时,将重做日志文件中记录的更改应用到所还原的文件中。 介质恢复的步骤如下: 从备份还原损坏的或丢失的文件。 根据需要应用归档重做日志文件和联机重做日志文件中的更改。此时将生成还原块。这 称为前滚或高速缓存恢复。 数据库此时可能包含已提交的和未提交的更改。 还原块用于回退任何未提交的更改。这称为回退或事务处理恢复。 数据库现处于已恢复状态。 在还原文件时,使用操作系统命令从备份中复制文件。可以还原数据文件、控制文件、 归档重做日志文件和服务器参数文件。 使用 SQL*Plus RECOVER 命令将重做日志文件应用到还原的文件中。可以执行自动恢 复,或者逐个查看日志文件以应用更改。 4.1.2 ARCHIVELOG和NOARCHIVELOG比较 您为数据库选择的归档模式将影响到在出现介质故障时您所能做出的恢复选择。 在设置归档日志模式时,应该考虑以下因素: 下述情况中,NOARCHIVELOG 模式可能比较合适: 容许备份之间的数据损失(在开发、培训期间等),重新应用事务处理(从批处理文件) 的速度更,快数据极少更改(非 OLTP)。 下述情况中,ARCHIVELOG 模式则更合适: 无法关闭数据库以执行关闭的数据库的备份,不允许数据损失,使用归档重做日志文件 比重新应用事务处理(OLTP) 更易于恢复,缺省情况下,数据库为 NOARCHIVELOG 模式。 4.1.3 在NOARCHIVELOG 模式下执行恢复 当处于 NOARCHIVELOG 模式的数据库发生介质故障时,需要使用一个有效的、关闭 的数据库的备份进行恢复。在 NOARCHIVELOG 模式下,即使只有一个数据文件被损坏或 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 53 丢失,也必须还原所有的 Oracle 数据库文件。确保还原以下所有文件:数据文件和控制文 件。如果您在备份数据文件和控制文件时还备份了联机重做日志文件,则还要还原这些文件。 切记,必须将所有的 Oracle 数据库文件进行同步,以打开该数据库。仅当口令文件和参数 文件被损坏或丢失时,才应该还原它们。对于处于 NOARCHIVELOG 模式下的数据库,如 果自上次备份以来没有覆盖任何重做日志文件,则只需还原受影响的 Oracle 数据文件(如 下所示) 数据库有两个重做日志,关闭的数据库的备份是在日志序列 144 时进行的,当数据库 在日志序列 145 时,数据文件 2 丢失,由于日志序列 144 尚未被覆盖,所以可手动还原和 恢复数据文件 2。 是否决定在 NOARCHIVELOG 模式下操作数据库,应考虑在恢复时的以下优缺点: 优点:易于操作,原因是只需从一个备份中还原所有的文件。唯一的风险在于操作本身: 还原错误的备份、覆盖备份、还原之前未关闭数据库或者备份无效。经过充分的培训和测试, 可最大限度地降低此类风险。在给定的硬件和操作系统下,恢复时间只是还原所有文件所花 的时间长度。 缺点:自上一次备份后用户输入的所有数据将丢失,必须手动重新应用。 ,即使只丢失 了一个数据文件,也必须从上次执行的、关闭的数据库的整体备份中还原整个数据库。 示例 1: 使用重做日志备份恢复。磁盘 2 被损坏,结果丢失了数据文件 2。仅有 2 个联机重做 日志文件。 上次备份是在日志序列 144 进行的,当前日志序列号为 146。 不能恢复该数据文件,因为重做日志 144 已被覆盖。如果尝试进行恢复,将会证实这 一问题。因此,必须关闭数据库并还原所有的 Oracle 文件。 SQL> SHUTDOWN ABORT 要还原文件,请: UNIX: cp /BACKUP/* /databases/db01/ORADATA Windows NT: copy d:\disk1\backup\*.* d:\disk1\data\ 复制结束后,重新启动例程: SQL> CONNECT / as sysdba SQL> STARTUP 通知用户,他们需要重新输入自上一次备份以后输入的数据。 示例 2: 不使用重做日志备份进行恢复。 如果数据库已打开,则按如下方式关闭它: SQL> SHUTDOWN IMMEDIATE 使用操作系统命令还原对数据库的最新而且完整的备份。必须还原所有的数据文件和控 制文件,而不仅仅是还原损坏的文件。以下示例还原了数据库的完整备份: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 54 $ cp /db01/BACKUP/*.dbf /ORADATA/u*/* # restores datafiles $ cp /db01/BACKUP/*.ctl /ORADATA/u*/* # restores control file 因为您没有备份联机重做日志,所以不能使用数据文件和控制文件还原它们。因此, Oracle 允许重置联机重做日志,您必须按如下方式仿效进行不完全恢复: SQL> RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE SQL> CANCEL 然后,使用 RESETLOGS 选项打开数据库,将当前的重做日志序列重置为 1(如下所 示): SQL> ALTER DATABASE OPEN RESETLOGS; 4.1.4 在ARCHIVELOG 模式下执行完全恢复 在执行介质恢复时,您将还原的文件更新到当前时间,或者更新到由用户指定的、除当 前时间之外的时间。 在完全恢复中,使用重做日志文件或增量备份将还原文件更新到最近的时间点。将归档 重做日志文件和联机重做日志文件中包含的重做更改全部应用到这些文件中。可以对数据库 表空间或数据文件执行完全恢复。对于不完全恢复,其实就是将数据库恢复到当前时间以前 的某一时刻。通常,您并不会应用备份后生成的所有重做条目。 完全恢复要确保要还原的数据文件处于脱机状态。仅还原丢失的或损坏的数据文件。不 要还原控制文件、重做日志文件、口令文件或参数文件。恢复数据文件。 当处于 ARCHIVELOG 模式的数据库发生介质故障时,需要使用以下内容将数据库完 全恢复到发生故障前那一刻的情形: 在将数据库设置为 ARCHIVELOG 模式后进行的有效备份(其中包含丢失的或损坏的 数据文件),从您所使用的备份起至今的所 有归档日志,包含尚未归档的事务处理的重 做日志文件。 在 ARCHIVELOG 模式下进行完全恢复的优缺点: 优点:仅需还原丢失或损坏的文件。已提交的数据不会丢失。通过还原上述文件并应用 归档日志和重做日志,就可将数据库恢复至当前的时间点。恢复的总时间就等于还原文件并 应用所有归档日志和重做日志所需的时间。可以在数据库打开的情况下进行恢复(包含联机 还原段的系统表空间文件和数据文件除外)。 缺点:必须有自上次备份起到当前时间的所有归档重做日志文件。如果缺失一个文件, 则无法执行完全恢复,原因是必须依次应用所有的归档重做 日志文件;即,先应用归档日志 144,其次是 145,再次是 146,以此类推。 我们如何查看需要恢复的文件和数据库的日志呢? 要确定需要恢复哪些数据文件以及需要从哪里开始恢复,请按如下方式使用 V$RECOVER_FILE 视图: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 55 SQL> SELECT * FROM v$recover_file; FILE# ONLINE ERROR CHANGE# TIME ----- ------- ------ ------- --------- 2 OFFLINE 288772 02-MAR-01 ERROR 列返回两个可能的值,从而定义需要恢复该文件的原因: NULL(如果原因未知) OFFLINE NORMAL(如果不需要恢复) CHANGE# 列返回 SCN(系统更改号),必须从 SCN 开始进行恢复。 查找要应用的归档日志文件 要查找归档日志文件,可查看 V$ARCHIVED_LOG 以获得所有归档日志文件,或查看 V$RECOVERY_LOG 以获得恢复时所需的归档日志文件: SQL> SELECT * FROM v$recovery_log; THREAD# SEQUENCE# TIME ARCHIVE_NAME ------- --------- --------- ------- 1 34 02-MAR-01 /…/ORADATA/ARCHIVE1/arch_34.arc ... 1 43 04-MAR-01 /…/ORADATA/ARCHIVE1/arch_43.arc 1 44 04-MAR-01 /…/ORADATA/ARCHIVE1/arch_44.arc 从上面的信息可以看出,要完全恢复数据文件 2,需要使用序列号为 34 之后的所有归 档日志。 注:V$RECOVERY_LOG 包含的信息仅对执行恢复的 Oracle 进程有用。 V$ARCHIVED_LOG 显示控制文件中的归档日志信息,其中包括归档日志名称。 RECOVER 命令: 要恢复数据库,可以发出以下命令之一: RECOVER [AUTOMATIC] DATABASE 此命令只能用于恢复关闭的数据库。 RECOVER [AUTOMATIC] TABLESPACE | 此命令只能用于恢复打开的数据库。 RECOVER [AUTOMATIC] DATAFILE <‘filename’> | 此命令既可用于恢复打开的数据库,又可用于恢复关闭的数据库。 其中:AUTOMATIC 会自动应用归档日志文件和重做日志文件。 在恢复过程中使用归档重做日志文件: 在恢复过程中,Oracle 服务器可以手动或自动应用所需的归档重做日志文件和联机重 做日志文件,以重新构建数据文件。在应用重做日志文件之前, Oracle 服务器会建议您提 供所要应用的日志文件的名称。 如果归档重做日志文件不还原到 LOG_ARCHIVE_DEST 目录中,则需要采取以下方法 之一,在开始恢复之前或在恢复过程中通知 Oracle 服务器: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 56 在恢复提示下指定位置和名称: Specify log: {=suggested | filename | AUTO | CANCEL} 使用 ALTER SYSTEM ARCHIVE 命令: SQL> ALTER SYSTEM ARCHIVE LOG START TO ; 使用 RECOVER FROM 命令: SQL> RECOVER FROM ‘’ DATABASE 可以使用以下方法自动应用重做日志文件: 在开始介质恢复前,先发出以下 SQL*Plus 语句: SQL> SET AUTORECOVERY ON 当提示输入一个重做日志文件时,请输入 auto: SQL> RECOVER datafile 4 ORA-00279: change 308810...03/22/01 17:00:14 needed for thread 1 ORA-00289: suggestion : /ORADATA/ARCHIVE1/arch_35.arc ORA-00280: change 308810 for thread 1 is in sequence #35 Specify log: {=suggested | filename | AUTO | CANCEL} AUTO Log applied. ... 使用 RECOVER 命令的 AUTOMATIC 选项: SQL> RECOVER AUTOMATIC datafile 4 Media recovery complete. 使用用户管理的过程将数据文件还原到新的位置: 1. 使用操作系统命令将文件还原到新的位置。 注:在 UNIX 环境中,在发出 ALTER DATABASE RENAME 命令之前,文件必 须位于新位置。在 Windows NT 环境中,则不必如此。 2. 启动该例程并装载数据库。 3. 使用 ALTER DATABASE 命令来更新控制文件,将其更新为新的文件名或更新到 新的位置: SQL> ALTER DATABASE RENAME FILE 2> ‘/ORADATA/u03/users01.dbf‘ 3> to ‘/ORADATA/u04/users01.dbf‘; 完全恢复的方法: 执行完全恢复的方法有 4 种: 方法 1:恢复关闭的数据库 此方法适用于以下情况:数据库不是 全天候(每周 7 天、每天 24 小时)运行。恢复的 文件属于系统表空间或还原段表空间。需要恢复整个数据库或大部分数据文件。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 57 方法 2:恢复打开的数据库(数据库最初是打开的) 此恢复方法一般在以下情况下使用:发生了文件损坏、文件意外丢失或介质故障,但未 导致数据库关闭。数据库全天候(每周 7 天、每天 24 小时)运行。必须最大限度地减少数 据库的停机时间。恢复的文件不属于系统表空间或还原段表空间。 方法 3:恢复打开的数据库(数据库最初是关闭的) 此恢复方法一般在以下情况下使用:某个介质故障或硬件故障导致系统关闭。数据库全 天候(每周 7 天、每天 24 小时)运行。必须最大限度地减少数据库的停机时间。还原的文 件不属于系统表空间或还原段表空间。 方法 4:在没有备份的情况下恢复数据文件 此恢复方法一般在以下情况下使用:介质故障或用户故障导致丢失了从未备份过的数据 文件。自该文件创建以来的所有归档日志都存在。还原的文件不属于系统表空间或还原段表 空间。 恢复过程中,磁盘中必须有 Oracle 服务器所需的所有归档日志文件。如果这些文件在 备份磁带中,则必须先还原这些文件。 4.1.5 完全恢复关闭的数据库 在以下情况中,通常将此恢复方法与 RECOVER DATABASE 命令或 RECOVER DATAFILE 命令一起使用: 恢复的文件属于系统表空间或回退段表空间。需要恢复整个数据库或大部分数据文件。 数据库不是全天候(每周 7 天、每天 24 小时)运行。示例: 已确定 u01(数据文件 1 存储在其中)包含被损坏的块。通过查询 V$DATAFILE 和 V$TABLESPACE 视图,可以发现数据文件 1 是系统表空间所属的文件之一。请按照以下 步骤恢复数据库: 1. 如果例程尚未关闭,请按如下方式发出 SHUTDOWN 命令: SQL> SHUTDOWN ABORT 2. 从备份(可用的最新备份)中还原该文件: UNIX> host cp /BACKUP/system01.dbf /ORADATA/u01 Windows NT > host copy c:\backup\df1.dbf d:\data\ 3. 以“装载” 模式启动例程,并恢复该数据文件: SQL> STARTUP MOUNT SQL> RECOVER DATABASE or SQL> RECOVER DATAFILE ‘/ORADATA/u01/system01.dbf‘ ORA-00279: change 148448 ...03/29/01 17:04:20 needed for thread ORA-00289: suggestion : /ORADATA/ARCHIVE1/arch_144.arc ORA-00280: change 148448 for thread 1 is in sequence #144 Log applied. ... 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 58 Media recovery complete. 要将数据文件恢复到发生故障前的那一刻,应该应用所有需要的归档日志和重做日 志。 4. 恢复结束后,所有数据文件都将实现同步。打开数据库。 SQL> ALTER DATABASE OPEN; 此时,可通知用户数据库可以使用了,并告诉他们重新输入系统发生故障前未提交的所 有数据。 在使用此恢复方法进行恢复的期间,必须关闭数据库;在恢复进程中,整个数据库都无 法让用户进行访问。如图 4.1: 图 4.1 关闭的数据库恢复 4.1.6 恢复打开的数据库(数据库最初是打开的) 恢复打开的数据库(数据库最初是打开的) 此恢复方法一般在以下情况下使用: 未导致数据库关闭的文件损坏、文件意外丢失或介质故障。数据库全天 候(每周 7 天、 每天 24 小时)运行。必须最大限度地减少数据库的停机时间。受到影响的文件不属于系统 表空间或还原/回退段表空间。示例: 数据库当前已打开,并且已使用操作系统命令误删了数据文件 2。因为数据库当前已打 开,所以可以使用以下命令确定该数据文件属于哪个表空间: SQL> SELECT file_id f#, file_name, 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 59 2> tablespace_name tablespace, status 3> FROM dba_data_files; F# FILE_NAME TABLESPACE STATUS --- ------------------------- ---------- --------- 1 /disk1/data/system01.dbf SYSTEM AVAILABLE 2 /disk2/data/df2.dbf USER_DATA AVAILABLE 3 /disk1/data/rbs01.dbf RBS AVAILABLE ... 1. 发出以下查询,以确定是否需要将数据文件 2 脱机: SQL> SELECT d.file# f#, d.name, d.status, h.status 2> FROM v$datafile d, v$datafile_header h 3> WHERE d.file# = h.file#; F# D.NAME D.STATUS H.STATUS --- ------------------------- ---------- --------- 1 /disk1/data/system01.dbf SYSTEM ONLINE 2 /disk2/data/df2.dbf RECOVER OFFLINE 3 /disk1/data/rbs_01.dbf ONLINE ONLINE ... 在这种情况下,Oracle 服务器已将该文件脱机。 2. 因为该文件处于脱机状态,所以此时可从备份中还原该文件: UNIX > host cp /disk1/backup/df2.dbf /disk2/data/ Windows NT > host copy c:\backup\df2.dbf d:\data\ 3. 使用 RECOVER 命令将归档和重做日志应用到还原的数据文件中。 SQL> RECOVER DATAFILE ‘/disk2/backup/df2.dbf‘ or SQL> RECOVER TABLESPACE user_data 4. 恢复结束后,所有数据文件都将实现同步。将该数据文件联机: SQL> ALTER DATABASE DATAFILE ‘/disk2/data/df2.dbf‘ ONLINE; 或 SQL> ALTER TABLESPACE user_data ONLINE; 如图 4.2: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 60 图 4.2 打开的数据库恢复 有时 Oracle 服务器会检测到某个文件有问题并自动将该文件脱机。在进行恢复之前, 一定要查看警报日志以检查是否有任何错误,并检查文件的状态;可能需要恢复脱机文件。 在将表空间脱机后,就会将其所有数据文件脱机,并且无法访问该表空间中包含的任何数据。 对于具有多个文件的表空间来说,如果将其中一个数据文件脱机,则只有该数据文件中包含 的数据无法进行访问,而表空间仍然可以使用。 4.1.7 恢复打开的数据库(数据库最初是关闭的) 恢复打开的数据库(数据库最初是关闭的)此恢复方法一般在以下情况下使用:介质或 硬件故障导致系统关闭。数据库全天候(每周 7 天、每天 24 小时)运行。必须最大限度地 减少数据库的停机时间。损坏的文件不属于系统表空间或还原段表空间。示例: 您刚刚确定介质故障是由 于某个磁盘控制器发生故障而引起的,该控制器只包含磁盘 2。根据您对数据库的了解,您知道数据文件 2 不是系统数据文件或还原段数据文件,并且 并不会由于无法使用该文件而妨碍用户运行其月末报告。 1. 装载该数据库。由于数据文件 2 无法打开,因此无法打开该数据库。 SQL> STARTUP MOUNT Database mounted. 2. 如果该数据文件未脱机,则无法打开数据库。因此,必须将该文件脱机。您已经 查询了 V$DATAFILE 并确定该文件处于联机状态。 必须发出以下命令: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 61 SQL> ALTER DATABASE datafile ‘/disk2/data/df2.dbf‘ offline; 注:此时不能使用 ALTER TABLESPACE 命令,原因是数据库尚未打开。 3. 然后就可以打开数据库,使用户能够访问系统: SQL> ALTER DATABASE OPEN; 4. 然后,还原该文件。因为无法将文件还原到损坏的磁盘 2 上,所以将它还原到磁盘 3 上: UNIX > host cp /disk1/backup/df2.dbf /disk3/data/ Windows NT > host copy c:\backup\df2.dbf e:\data\ 现在必须通知 Oracle 服务器新文件的位置: SQL> ALTER DATABASE rename file ‘/disk2/data/df2.dbf‘ 2> to ‘/disk3/data/df2.dbf‘; 如果数据库已打开并且需要恢复表空间,请发出以下查询,以确定该数据文件所属的表 空间的名称: SQL> SELECT file_id f#, file_name, 2> tablespace_name tablespace, status 3> FROM dba_data_files; F# FILE_NAME TABLESPACE STATUS --- ------------------ --------- ------- 1 /disk1/data/system_01.dbf SYSTEM AVAILABLE 2 /disk3/data/df2.dbf USER_DATA AVAILABLE 3 /disk1/data/rbs01.dbf RBS AVAILABLE 5. 使用 RECOVER 或 ALTER DATABASE RECOVER 命令开始将归档重做日志文件 和联 机重做日志文件应用到还原的数据文件中。 SQL> RECOVER DATAFILE ‘/disk3/data/df2.dbf‘ 或 SQL> RECOVER TABLESPACE user_data 6. 恢复结束后,所有数据文件都将实现同步。将该数据文件联机: SQL> ALTER DATABASE datafile ‘/disk3/data/df2.dbf‘ online; 或 SQL> ALTER TABLESPACE user_data online; 如图 4.3: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 62 图 4.3 打开的数据库恢复示例 4.1.8 在没有备份的情况下恢复数据文件 在没有备份的情况下恢复数据文件,此恢复方法一般在下列情况使用:介质故障或用户 故障导致丢失了从未备份过的数据文件,自该文件创建以来的所有归档日志都存在,受到影 响的文件不属于系统表空间或还原段表空间。 如果定期备份中不包含新的表空间或数据文件,或者该数据文件的备份丢失了,则通常 使用该方法。使用 ALTER DATABASE 命令,用相同的名称重新创建该数据文件: SQL> ALTER DATABASE CREATE DATAFILE 2> '/ORADATA/u03/users01.dbf'; 将使用数据字典中记录的原始文件名创建该文件。使用以下版本重新创建该数据文件, 但使用新的文件名或位置: SQL> ALTER DATABASE CREATE DATAFILE 2> '/ORADATA/u03/users01.dbf' 3> AS '/ORADATA/u04/users01.dbf'; 示例: 没有备份的情况下恢复数据文件可如图 4.5: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 63 图 4.4 没有备份的恢复 数据文件 4(在磁盘 1 上)丢失了。在通过磁带还原该数据文件时,出现一个错误 ,指 明该文件以前没有进行备份。您找到两天前创建 TABLE_DATA 表空间的那个 DBA,结果 发现该表空间中包含重要的用户数据,但它从未被纳入备份策略中。由于数据文件 4 不是系 统数据文件或回退段数据文件,并且您有过去两天的所有归档日志,因此,可以按如下方式 进行恢复: 1. 如果数据库已关闭,则装载该数据库、将该数据文件(无备份)脱机,然后打开数 据库。这将允许不需要 TABLE_DATA 表空间的用户对系统执行操作。如果数据库已打开, 则将该数据文件或表空间脱机。如果数据库已打开,则必须包含“立即” (IMMEDIATE) 选 项,以避免数据库写入器试图写入到一个并不存在的文件中: SQL> ALTER TABLESPACE table_data OFFLINE IMMEDIATE; Tablespace altered. 查询 V$RECOVER_FILE 确定恢复状态,以检查备份的状态: SQL> SELECT * FROM v$recover_file; FILE# ONLINE ERROR CHANGE# TIME ----- ------- -------------- ------- ---- 4 OFFLINE FILE NOT FOUND 0 2. 发出以下命令来重新创建该文件: SQL> ALTER DATABASE create datafile ‘/disk2/DATA/df4.dbf’ 2> as ‘/disk1/DATA/df4.dbf‘; Database altered. SQL> SELECT * FROM v$recover_file; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 64 FILE# ONLINE ERROR CHANGE# TIME ----- ------- ------------------ ---------- ------ 4 OFFLINE 248621 01-DEC-97 3. 用 RECOVER 或 ALTER DATABASE RECOVER 命令,开始将归档重做日志文件和 联机 重做日志文件应用到重新创建的数据文件中: SQL> RECOVER TABLESPACE table_data; 要将数据文件恢复到发生故障前的那一刻,应该应用所有需要的归档日志和重做日 志。此时所有数据文件都将实现同步。 4. 恢复完成后,将该表空间联机: SQL> ALTER TABLESPACE table_data ONLINE; 所有数据现已恢复。将文件包括在备份策略中,并通知用户可以再次使用表空间了。 4.1.9 只读表空间恢复 只读表空间的恢复可见图 4.5 图 4.5 只读表空间的恢复 情况 1:被恢复的表空间现在是只读的,并且在上次备份时也是只读的。在这种情况下, 只需从备份中还原表空间。无需应用任何重做信息。 情况 2:被恢复的表空间现在可读写,但在上次备份时则是只读的。在这种情况下,需 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -700-0056 LI-193 Oracle 备份与恢复 65 要从备份中还原表空间,并应用自表空间被设置为可读写状态以来的重做信息。 情况 3:被恢复的表空间现在是只读的,但在上次备份时是可读写的。因为您应 该在将 表空间设置为只读状态后始终对它进行备份,所以不应该遇到这种情况。但是,如果确实出 现这种情况,则必须从备份中还原表空间,并将其恢复到被设置为只读状态前的那一刻。 如果您需要用 CREATE CONTROL FILE 命令重新创建控制文件,并且您的数据库有只 读表空间,则必须按照特殊的过程进行操作。发出 ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令以获得这些过程的列表。 如果不能将只读数据表空间中的数据文件副本还原到正确的目标位置,则可以使用 ALTER DATABASE RENAME 命令将这些文件放到新的位置。 带备份控制文件的只读表空间与脱机正常表空间的恢复过程实质上是相同的,只是您 需要在打开数据库后将表空间联机。 4.1.10 丢失控制文件 的恢复 以下是三种可能需要您恢复或重新创建控制文件的情形: 第一,所有控制文件由于某个故障而丢失。如果您已正确地多元备份了控制文件并将这 些文件分布到多个物理设备上,则很少会遇到这种问题。 第二,您需要更改数据库的名称。如果数据库将成为分布式环境的一部分,并且其它数 据库具有相同的名称,则有必要更改数据库的名称。如果是出于恢复目 的而还原数据库,则 可能也需要更改其名称。 第三,您需要更改控制文件中的设置。控制文件中的很多设置是在文件创建之时确定下 来的。在创建了控制文件后,就不能动态地更改这些设置;若要更改这些设置,必须重新创 建控制文件。 有三种方法可以用于还原和恢复控制文件: 第一,用当前副本还原丢失的文件。这种方法假定您没有丢失所有的控制文件。 第二,使用 CREATE CONTROLFILE 命令创建一个新文件。要完成此项操作必须知道 数据库的所有文件。间或备份控制文件以进行跟踪有助于完成此过程。 第三,使用 RECOVER DATABASE USING BACKUP CONTROLFILE 命令。如果丢失 了所有的控制文件,则需要使用此命令。 如果使用镜像的数据文件正确配置数据库,则丢失所有控制文件的可能性将降至最低。 4.2 用户管理的不完全恢复 第 二 节 用户管理的不完全恢复 不完全恢复,也就是 将数据库恢复到过去的某一个 时刻的状态。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 66 不完全恢复能够重建数据库,使之恢复到以前的某个时间点(发生故障之前)。该情况 会导致进行恢复操作后提交的事务处理中丢失数据。如果需要,这些数据将需要手动重新输 入。只在绝对必要的情况下执行这种恢复操作。不完全恢复操作可能比 较困难而且耗费时间 较长。要执行不完全恢复,需要: 恢复时间点之前制作的所有数据文件的有效脱机或联机备份 ,截止到指定的恢复时间之 前备份中生成的所有归档日志通常在完全恢复操作失败的情况下进行不完全恢复。 需要进行不完全恢复的常见情况: 丢失归档:由于归档日志损坏或丢失,完全恢复操作失败。数据库只能恢复到应用归档 日志之前的过去的某一时间的状态。 丢失重做日志:未镜像重做日志,并且重做日志在归档之前丢失,数据文件也丢失。恢 复无法继续到丢失的重做日志之后。 用户错误:用户错误地删除了某个表,提交了用错误的 WHERE 子句更新的数据等等。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 67 丢失控制文件:您未镜像控制文件,不知道数据库的结构,但您有旧的二进制副本的备 份。 不完全恢复的类型: 基于时间的恢复,截止指定时间点之前的所有更改提交后,该恢复方法终止。在以下情 况下使用此方法:对数据作出了不必要的更改,或者删除了重要的表,并且知道错误发生的 大概时间。如果您立即得到通知,恢复时间最短、数据损失最少。精心测试过的程序、安全 性和过程应当可以避免此类恢复。知道未镜像的联机重做日志损坏的大概时间。镜像日志可 以避免此类恢复。 基于取消的恢复,在恢复提示符下输入 CANCEL(而不是日志文件名),即可终止该恢 复方法。在以下情况下使用此方法:当前重做日志文件或组被破坏,并且不可用于恢复。镜 像可以避免此类恢复。进行恢复所需的归档重做日志文件丢失。经常备份并将归档存放在多 个目标位置可以避免此类恢复。 基于更改的恢复,截止指定系统更改编号 (SCN) 之前所做的所有更改提交之后,该恢 复方法即终止。在分布式环境中恢复数据库时,使用这种方法。本课程不对这种方法进行详 细说明。 使用备份控制文件恢复,指定的恢复方法(基于取消、基于时间或基于更改的恢复)已 完成或控制文件已恢复时,该恢复方法终止。必须在 RECOVER DATABASE 命令中指定恢 复将使用控制文件的旧副本。在以下情况下使用这种方法: 所有控制文件都已丢失,并且无法重新创建,但存在控制文件的二进制备份。镜像控制 文件(至不同磁盘)并保留 CREATE CONTROLFILE 语句的当前文本版本将减少使用该方 法的几率。将某个结构与当前数据库不同的数据库还原到先前的某个时间点。 不完全恢复原则: 认真按照所有恢复步骤进行操作很重要,因为不完全恢复的大多数问题都是由恢复过程 中的 DBA 错误造成的。事务活动只能前滚至期望的时间,而不能回退至期望的时间。 这就 是对要及时恢复的数据库必须还原所有数据文件的原因。如果没能还原所有数据文件,将无 法打开(非同步)数据库。 开始不完全恢复之前应执行整体关闭数据库备份(包括控制文件和重做日志)。这样 做的好处有:允许从错误中恢复。如果恢复失败(例如,恢复超出了期望的恢复点),重做 日志和控制文件将无法用于下一次恢复,除非存在这些文件的备份。如果恢复失败,可以节 省时间。在这种情况下, 可以以从新备份中还原数据文件,而不是从需要应用归档的上一次 备份中还原。 如果不执行整体备份,至少应归档当前重做日志(ALTER SYSTEM ARCHIVE LOG CURRENT) 并备份控制文件(ALTER DATABASE BACKUP CONTROLFILE TO )。 恢复成功后,执行关闭的数据库的整体备份。如果需要进行恢复才能完成下一次排定的 备份,则建议使用这种方法。在允许用户访问系统之前一定要验证故障是否已经修复,以防 止恢复失败而需要再次进行恢复。从系统中备份(以后删除)归档日志,以避免混合不同数 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 68 据库复本中的归档。 请看以下示例: 日志序列号为 144 的数据库包含从 arch_120.rdo 到 arch_143.rdo 的归档日志。执行不 完全恢复后,将创建新的数据库复本,并将数据库的日志序列号设置为 0。归档日志 arch_120.rdo 到 arch_143.rdo 现在是旧数据库复本的一部分。 日志切换 120 次后,归档日志 arch_120.rdo 将被覆盖,并通过所有其它归档(包括旧 的归档日志 arch_121.rdo 至 arch_143.rdo)备份。此后,如果恢复需要 arch_124.rdo,您需 要确保从该备份还原的归档日志属于正确的数据库复本,否则将出现错误。 不完全恢复和警报日志: 恢复过程中,进度信息存储在警报日志中。恢复前后,都应检查该文件。下面是一个 alert.log 文件示例: $ vi /disk1/BDUMP/alert_DB00.log ... Media Recovery Log ORA-279 ... RECOVER database until time ‘2001... Wed Mar 07 11:55:13 2001 RECOVER DATABASE CONTINUE DEFAULT Media Recovery Log /disk1/archive/arch_34.rdo Incomplete recovery done UNTIL CHANGE 309121 Media Recovery Complete Completed: RECOVER DATABASE CONTINUE DEFAULT Wed Mar 07 11:55:13 2001 alter database open resetlogs ... 4.2.1 不完全恢复的 步骤 出现故障而要求进行不完全恢复时,必须拥有下列文件才能进行恢复:包含所有数据文 件的有效脱机或联机备份。从上次还原的备份到发生故障之前的所有归档重做日志。 请按照下列步骤进行恢复: 1. 对现有数据库执行关闭的数据库的完全备份。关闭数据库,从备份还原所有数据 文件(包括系统表空间文件)。 2. 还原所有数据文件,以及时恢复数据库。 3. 将数据库置于装载模式并确保数据文件处于联机状态。 4. 恢复数据库。 5. 使用 RESETLOGS 选项打开数据库并验证恢复。 6. 对数据库执行关闭的数据库的整体备份。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 69 以下命令用于执行不完全恢复: RECOVER [AUTOMATIC] DATABASE 其中: automatic:自动应用归档和重做日志文件。 option: until time ‘YYYY-MM-DD:HH:MI:SS’ until cancel until scn using backup control file 注:要在恢复过程中自动应用重做日志文件,可以使用 SQL*Plus 命令 SET AUTORECOVERY ON,在恢复提示符后输入 AUTO,或者使用 SQL 命令 RECOVER AUTOMATIC。 4.2.2 执行不完全数据库恢复 基于时间的恢复示例: 当前时间是 2001 年 3 月 9 日夜间 12:00。 EMPLOYEES 表已被删除。 删除该表的时间大约是上午 11:45。 由于大多数员工当前都在开会,数据库的活动很少。该表必须进行恢复。 使用 UNTIL TIME 进行不完全恢复: 关闭数据库并开始恢复。由于知道故障发生的大概时间,并且数据库结构从上午 11:44 之后并未更改,因此,可以使用 UNTIL TIME 方法: 1. 如果数据库已打开,使用 NORMAL 或 IMMEDIATE 或 TRANSACTIONAL 选项关 闭数据库。 2. 从备份还原所有数据文件(尽可能使用最新备份)。可能需要还原 归档日志。如果有 足够的可用空间,还原到 LOG_ARCHIVE_DEST 位置,或使用 ALTER SYSTEM ARCHIVE LOG START TO 或 SET LOGSOURCE 更改位置。 3. 装载数据库。 4. 恢复数据库: SQL> recover database until time ‘2001-03-09:11:44:00’ ORA-00279: change 148448 …02/29/98 17:04:20 needed for thread ORA- 00289: suggestion : /disk1/archive/arch_6 .rdo ORA-00280: change 148448 for thread 1 is in sequence #6 Log applied. ... Media recovery complete. 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 70 5. 要将数据文件与控制文件和重做日志同步,应使用 RESETLOGS 选项打开数据库: SQL> alter database open resetlogs; SQL> archive log list ... Oldest online log sequence 0 Next log sequence to archive 1 Current log sequence 1 6. 执行关闭的数据库的整体备份之前,查询 EMPLOYEES 表以确保该表存在。 恢复成功并且备份完成后,通知用户该数据库可以使用,而恢复时间(上午 11:44)后 输入的所有数据将需要重新输入。基于取消的恢复示例: 当前时间是 2001 年 3 月 9 日夜间 12:00。 某人尝试修复损坏的块时删除了 EMPLOYEES 表。 日志文件都位于同一磁盘上。 删除该表的时间大约是上午 11:45。 员工当前正在开会。 您担心是磁盘错误导致 EMPLOYEES 表中的块损坏。由于重做日志都包含在同一磁盘 中, 您决定检查重做日志和归档日志的状态: SQL> select * from v$logfile; GROUP# STATUS MEMBER ------ ---------------- --------------------------------- 2 /disk1/data/log2a.rdo 1 /disk1/data/log1a.rdo SQL> select * from v$log; G# ... SEQ# BYTES MEMBERS ARC STATUS ... FIRST_TIME -- ... ---- ------ ------- --- -------- ... -------------- 1 ... 49 153600 1 NO CURRENT ... 01-03-09:11:55 2 ... 48 153600 1 NO INACTIVE ... 01-03-09:11:34 基于取消的恢复示例: 重做日志未多元备份。有一个联机重 做日志缺失。缺失的重做日志未归档。重做日志包 含自上午 11:34 以来的信息。 26 分钟的数据将丢失。用户可恢复其数据。 对/disk1/data 目录进行搜索之后,发现找不到重做日志 log2a.rdo,并且该日志未归 档。因此,不能恢复该点之后的数据。 查询 V$LOG_HISTORY 确认缺少归档日志序列 48 (log2a.rdo): SQL> select * from v$log_history; RECID STAMP ... FIRST_CHANGE FIRST_TIME ----- --------- ... ------------ ---------- 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 71 1 318531466 ... 88330 01-02-28:12:43 47 319512880 ... 309067 01-03-09:11:26 由于这是 OLTP 系统,V$LOG 的输出显示:如果数据库是在应用 log2a.rdo 之前恢复 的,另外 10 分钟的工作将丢失。用户不愿意丢失工作,但可以恢复该工作。 可以以按照以 下步骤恢复数据库: 1. 关闭数据库。 2. 从最新备份还原所有数据文件。 3. 您已经拥有有效备份,因此请装载数据库。 4. 将数据库恢复到序列号为 48 的日志: SQL> recover database until cancel ORA-00279:change 148448...03/02/01 12:45:20 needed for thread ORA-00289: suggestion : /disk1/archive/arch_34.rdo ORA-00280: change 148448 for thread 1 is in sequence #34 Log applied. ... ORA-00279:change 309012...03/09/01 11:33:56 needed for thread ORA-00289: suggestion : /disk1/archive/arch_48.rdo ORA-00280: change 309012 for thread 1 is in sequence #48 Specify log: {=suggested | filename | AUTO | CANCEL} cancel Media recovery cancelled. 5. 使用 RESETLOGS 选项打开数据库。 6. 检查 EMPLOYEES 表是否存在。 7. 恢复完成后,制作一份备份。通知用户该数据库可以使用,而恢复时间(上午 11:34) 之后输入的所有数据将需要重新输入。 恢复期间使用备份控制文件: 当前时间是 2001 年 3 月 9 日夜间 12:00。包含 EMPLOYEES 表的表空间已被删除。 错误出现的时间大约是上午 11:45。许多员工记录都在这一天早晨更新,但上午 11:00 之后 没有更新。每天晚上都进行备份。 前一晚的备份包含恢复所需的数据文件和控制文件。EMP_TS 表空间有一个数据文件。 当前日志序列号是 61。确认该表空间是在 2001 年 3 月 9 日上午 11:44:54 被删除的。数据 文件编号 4 处于脱机状态。 1. 包含 EMPLOYEES 表的表空间已被删除,如下所示: SQL> drop tablespace emp_ts including contents; 2. 您立即要求用户注销并保留过去 15 分钟内输入的数据记录。在等待所有用户注销并 且其余会话终止时,您将数据库置于受限模式以防止进一步的访问: SQL> alter system enable restricted session; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 72 3. 调查过程中,您从前一晚的备份中找到了二进制控制文件。由于当前的控制文件将 被替换,因此应仔细收集数据库结构信息,以备不时之需: SQL> select * from v$log; GROUP#...SEQ# BYTES ...ARC STATUS ... FIRST_TIME ------...---- ------...--- --------... -------------- 1 … 61 153600... NO CURRENT ... 01-03-09:11:55 2 ...60 153600... NO INACTIVE... 01-03-09:11:34 4. 您通过检查警报日志确定错误发生时间: UNIX: vi /disk1/BDUMP/alert*.log Windows NT: notepad c:\BDUMP\alert_DB00.log ... Fri Mar09 11:44:54 1999 drop tablespace emp_ts including contents ... 5. 关闭数据库、备份控制文件、然后还原表空间存在时的某个时间点的数据库的所 有 数据文件和控制文件。尝试打开数据库之后,以下错误将通知您重做日志与控制文件不同步: ORA-00314: log 1 of thread 1,expected sequence# doesn't match ORA-00312: online log 1 thread 1: '/disk1/data/log1a.rdo' 6. 验证是否存在脱机数据文件并使它们处于联机状态,因为恢复后所有脱机文件可能 无 法恢复: SQL> select * from v$recover_file; FILE# ONLINE ERROR CHANGE# TIME ----- ------- ------ ------- -------- 4 OFFLINE 288772 02-MAR-01 SQL> alter database datafile 4 online; 7. 执行恢复: SQL> recover database until time '2001-03-09:11:44:00' 2> using backup controlfile; ... Media recovery complete. 注:如果提示您输入联机重做日志文件,请在提示符下输入文件名以继续进行恢复。如 果出现如下错误,而不是“Media recovery complete(介质恢复完成)”,表明数据文件需要 从更早的备份进行还原,或需要进行更多的恢复(此处不可能)。 ORA-01152: file 7 was not restored from a sufficiently old backup ORA-01110: datafile 7: '/disk1/data/new01.dbf' 8. 要使数据文件与控制文件和重做日志同步,请用 RESETLOGS 选项打开数据库。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 73 9. 检查 EMPLOYEES 表是否存在。 10. 进行整体备份。 11. 通知用户数据库可以使用,需要重新输入在上午 11:44 之后输入的所有数据。 4.2.3 当前联机重做日志文件的丢失的恢复 当前联机重做日志丢失,如果数据库已经关闭:尝试打开数据库。查找当前日志序列号。 恢复发出取消命令之前的数据库。如果需要,应删除并重新创建日志文件。使用 RESETLOGS 打开数据库。执行整体数据库备份。 如果数据库关闭,可能发生了介质故障或者后台进程可能已终止。按照以下步骤纠正该 情况: 1. 如果尝试打开数据库,以下消息将立即通知您当前的重做日志组: Database mounted. ORA-00313: open failed for members of log group 2 of thread 1 ORA-00312: online log 2 thread 1: '/disk1/archive/log2a.rdo' ORA-27037: unable to obtain file status SVR4 Error: 2: No such file or directory Additional information: 3 由于日志组 2 是当前日志组,因此尚未归档。使用 CLEAR LOGFILE 命令无效,原因 是: SQL> alter database clear unarchived logfile group 2; ORA-01624: log 2 needed for crash recovery of thread 1 ORA-00312: online log 2 thread 1: 'disk1/archive/log2a.rdo' 2. 因此需要不完全恢复。 首先,必须记录当前日志序列号: SQL> select * from v$log; GROUP#... SEQ# BYTES ... ARC STATUS... FIRST_TIME ------... ---- ------... --- ------...-------------- 1 ... 60 153600 ... NO INACTIVE. 01-03-09:19:34 2 ... 61 153600 ... NO CURRENT... 01-03-09:19:50 3. 从先前的备份还原所有数 据文件,使用 RECOVER UNTIL CANCEL 命令并在应用 重 做日志 61 之前停止: SQL> recover database until cancel; ORA-00279: change 309043...03/09/01 14:50:14 needed for thread 1 ORA-00289: suggestion : /disk1/archive/arch_46.rdo ORA-00280: change 309043 for thread 1 is in sequence #46 Specify log: {=suggested | filename | AUTO | CANCEL} 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 74 ... ORA-00279: change 309141...03/09/01 19:50:14 needed for thread 1 ORA-00289: suggestion : /disk1/archive/arch_61.redo ORA-00280: change 309043 for thread 1 is in sequence #61 ORA-00278: log file ... no longer needed for this recovery Specify log: {=suggested | filename | AUTO | CANCEL} cancel Media recovery complete. 4. 使用 RESETLOGS 选项打开数据库。 5. 现在数据库应该可以运行了,因为将重新创建所有丢失的日志文件。 注:如果由于介质故障需要在另一个磁盘上重新创建日志文件,请使用 ALTER DATABASE DROP LOG GROUP 和 ALTER DATABASE ADD LOG GROUP 命令手动 创 建日志文件。 6. 由于您刚刚执行了不完全恢复,因此,现在应备份数据库。 第 5 章 RMAN简介与配置 第 五 章 RMAN 简介与配置 RMAN 是自动管理的备份恢复。它功能强大,使用 起来虽然比手动管理的备份恢复有些繁琐,但 当你全 部掌握 RMAN 的功能后就会发现,它其实是比手动管 理的备份恢复要简单的。还有值得称道的一点是, RMAN 的操作性能要好于手动管理的备份恢复。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Technology Co., Ltd. Page LI-193 Oracle 备份与恢复 75 5.1 RMAN备份恢复简介 第 一 节 RMAN 备份恢复简介 RMAN 提供了一种灵活的方式 来备份数据库、表空 间、数据文件、控制文件和归档日志,因为灵活, 所以有些繁琐。 RMAN 有准备对坏块进行恢复的功能,这是手动管 理的恢复所不具备的。 RMAN 可以只恢复数据文件 中损毁的块。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 76 5.1.1 RMAN功能简介 RMAN 提供了一种灵活的方式来执行下列操作: 备份数据库、表空间、数据文件、控制文件和归档日志;存储频繁执行的备份和恢复操 作;执行增量块级别备份跳过未使用的块 ,可以只备份自上次备份后发生更改的块。这还可 以减少在 ARCHIVELOG 模式下执行恢复操作所需的时间;可以以使用 RMAN 来管理备份 片的大小,并通过并行化备份操作来节省时间; RMAN 操作可以和操作系统的日程安排集 成在一起,以实现自动备份操作;指定备份限制。 可以以检测块的损坏情况。可以使用 V$BACKUP_CORRUPTION 和 V$COPY_CORRUPTION 动态视图来获取有关在备份时检测到的块损坏的信息。 RMAN 可以提高性能,例如: 自动并行化备份、还原和恢复操作,在联机数据库备份期间不生成额外的重做日志,为 避免干扰 OLTP 工作,限制备份操作每一秒钟只对一个文件进行读取,应用多路复用技术, 在保持磁带机流式处理的同时,防止任何一个文件读写溢流。 RMAN 包含一个介质管理 API,可以与第三方介质管理工具一起无缝工作,使得这些 工具可以与存储设备实现交互,从而提高速度和可靠性。 如果使用用户管理的方法,您需要跟踪所有数据库文件和备份。在执行恢复操作时,您 必须找到每个数据文件的备份、使用操作系统命令将它们复制到正确位置,然后选择要应用 的日志。而 RMAN 能够自动管理这些任务。RMAN 的这一优点在使用“ Oracle 管理文件” (Oracle Managed Files) 时尤其有用。 恢复管理器具有命令行界面。Oracle Enterprise Manager 也为恢复管理器提供图形用户 界面。在 Oracle8 或更高版本的数据库上都可以使用恢 复管理器。 5.1.2 RMAN的常用组件 恢复管理器的组件结构如图 5-1: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 77 图 5-1 恢复管理器组件 恢复管理器可执行文件:恢复管理器命令行界面可以通过可执行文件 RMAN 调用。 RMAN 解释用户命令并相应地调用服务器会话,以执行所需的任务。 Oracle Enterprise Manager:“ Oracle Enterprise Manager 备份、恢复和目录维护” (Oracle Enterprise Manager Backup, Recovery, and Catalog Maintenance) 向导提供访问恢复管理器的 图形用户界面。只有在您连接到管理服务器 (Management Server) 的情况下,向导和属性工 作表才可用。 服务器会话:由 RMAN 调用的服务器进程(UNIX) 或线程(Windows NT) 与目标数据库 连接,通过 PL/SQL 接口执行备份、还原和恢复功能。 目标数据库:正在使用 RMAN 对其进行备份和恢复操作的数据库称作目标数据库。目 标数据库的控制文件包含其物理结构的有关信息,例如,数据文件的大小和位置、联机和归 档重做日志文件以及控制文件。在备份和恢复操 作过程中,由 RMAN 调用的服务器会话将 使用这些信息。 RMAN 资料档案库:RMAN 在执行备份、还原和恢复操作时使用的数据称为 RMAN 元数据。这些元数据存储在目标数据库的控制文件和可选的恢复目录数据库中。尽管不是必 须创建恢复目录才可以使用 RMAN,但使用恢复目录却是有益的。恢复目录应放在目标数 据库之外的另一数据库中。恢复目录的创建和维护将在另一课中论述。 通道:要执行并记录备份和恢复操作, RMAN 需要链接至目标数据库。该链接称为通 道。可以手动分配通道,也可以使用自动通道分配功能预先配置通道。 介质管理库:介质管理库(MML) 由 RMAN 在写入磁带或从磁带读取时使用。使用磁 带介质所需的附加介质管理软件由介质和存储系统供应商提供。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 78 5.2 RMAN配置 第 二 节 RMAN 配置 RMAN 恢复目录和控制文件 通道分配与介质管理 与 RMAN 连接的类型 恢复管理器模式 RMAN 命令、参数 RMAN 环境配置和使用的注意事项 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 79 5.2.1 RMAN恢复目录 和控制文件的用法 RMAN 在 RMAN 资料档案库中存储有关目标数据库及其备份和恢复操作的信息。目 标数据库控制文件可用作专门存储该信息的位置。存储的信息量会根据备份频率、生成的归 档重做日志文件的数量以及 RMAN 记录的保留时间而增长。 CONTROL_FILE_RECORD_KEEP_TIME 参数指定 RMAN 信息至少要在控制文件中 存储多少天后才会被覆盖。该值越小,信息就会越频繁地被覆盖,从而尽可能减少控制文件 的增长。如果使用恢复目录,则应选择较小的数值。缺省值为 7 天。 如果控制文件太小,不能存储由 CONTROL_FILE_RECORD_KEEP_TIME 指定的时间 段内的所有信息,那么控制文件将会增长。在控制文件增长之前,将执行以下的特定步骤: 1. 使用控制文件中的空闲空间。 2. 覆盖早于 CONTROL_FILE_RECORD_KEEP_TIME 的条目。 3. 如果没有更多空间可用,控制文件将按需增长,直到达到操作文件大小的系统限制。 5.2.2 通道分配 每个通道代表通向某一类型设备的一个数据流。在执行备份和恢复命令前,必须先分配 通道。每个已分配的通道建立从 RMAN 可执行文件到目标或辅助数据库(通过复制命令建 立的数据库或 TSPITR 中使用的临时数据库)例程的连接,方法是在例程上启动服务器会 话。该服务器会话执行备份和恢复操作。只有一个 RMAN 会话可与已分配的服务器会话 通信。每个通道通常对应一个输出设备,除非您的 MML 具有硬件多路复用功能。 可以以手动分配通道,也可以使用自动通道分配功能预先配置要在所有 RMAN 会话中使 用的通道。 手动分配通道时,可在 RMAN 提示符下,将 ALLOCATE CHANNEL 作为 RUN 命令 的子命令发出,也可使用 ALLOCATE CHANNEL FOR MAINTENANCE 命令。手动通道分 配将覆盖自动通道分配。 恢复管理器使用通道进程在 Oracle 服务器与操作系统之间进行通信。系统将为每个分 配的通道创建目标数据库的一个 Oracle 服务器进程。从恢复管理器发出的 每个 BACKUP、 COPY、RESTORE 或 RECOVER 命令至少需要一个通道。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 80 分配的通道数将是备份、还原或恢复期间使用的最大并行度。所需的介质类型确定了分 配的通道类型。查询 V$BACKUP_DEVICE 视图可以确定支持哪些设备类型。 可以通过在 ALLOCATE CHANNEL 命令中指定参数来对 COPY 和 BACKUP 命令施 加限制: Read rate:限制每个文件每秒读取的缓冲区数,防止过多的磁盘 I/O 降低联机性能。 allocate channel … rate = integer Kbytes:限制通道创建的备份片文件大小。这在操作系统或设备类型有最大的文件大小 限制时非常有用。allocate channel … maxpiecesize = integer。 MAXOPENFILE:限制大型备份时同时打开的文件数(缺省值为 16)。该参数可以防止 打开的文件过多。ALLOCATE CHANNEL … MAXOPENFILE = integer 分配通道示例: ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE disk; 此命令为 DELETE 命令分 配通道,因为将从磁盘删除一个文件。维护通道不能用于任 何其它 I/O 操作,如备份或复制。 RMAN> RUN { ALLOCATE CHANNEL d1 DEVICE TYPE disk FORMAT = '/db01/BACKUP/%U’; BACKUP DATAFILE ’/…/u03/users01.dbf';} 第二个示例分配一个名为 d1 的通道,由该通道创建的所有文件都具有格式 ’/db01/BACKUP/%U’。该通道备份一个数据文件/db01/ORADATA/u03/users01.dbf。 在 Oracle9i 中,可以使用自动通道分配功能预先配置要在所有 RMAN 会话中使用的通 道。RMAN 提供一个预先配置的 DISK 通道,可以将该通道用于备份数据和将数据复制到 磁盘。此外,您还可以配置一组永久的自动通道。可通过 CONFIGURE CHANNEL 命令将 自动通道指定给磁盘或磁带。 可在 RMAN 资料档案库中保存永久配置信息,如通道参数、并行性和缺省设备类型。 可配置自动通道用于备份、还原、恢复和维护作业。如果通道是由 RMAN 自动分配的,其 名称格式为 ora_devicetype_n(ora_sbt_tape_n 或 ora_disk_n)。 如果未指定名称格式,在缺省情况下,RMAN 将使用%U 格式,该格式可保证标识符 唯一。%U 指定%u_%p_%c 的简写方式,可保证生成的备份文件名的唯一性。 %u 指定一 个 8 个字符长的名称,该名称由备份集号和备份集创建时间的缩写形式构成。 %p 指定备 份集中的备份片号。%c 指定一组双重备份片中备份片的副本数。 可通过 ALLOCATE CHANNEL 命令手动分配通道来覆盖自动通道。自动分配通道功能 与手动分配通道功能是互斥 的,即:对于每个作业, RMAN 要么使用自动分配,要么使用 手动分配。缺省情况下, RMAN 已预先配置了一个磁盘通道,这样 可以以备份到磁盘而无 需进行任何手动配置。因此,如果要备份到磁盘而不是介质管理器,现在就可以开始备份到 磁盘。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 81 5.2.3 介质管理 要使用磁带存储数据库备份, RMAN 需要使用介质管理器。介质管理器是加载、标记 和卸载顺序介质的实用程序,如用于备份、还原和恢复数据的磁带机。 Oracle 服务器调用 MML 软件例行程序将数据文件备份到由介质管理器控制的介质或从介质中还原数据文件。 有些介质管理产品可以管理 Oracle 数据文件与备份设备之间的整个数据移动。有些产 品在存储设备与介质子系统之间使用高速连接,从而大大降低主数据库服务器的备份负载。 注:如果是备份到磁盘,Oracle 服务器无需连接到介质管理库(MML) 软件。 Oracle 备份解决方案 (Oracle Backup Solutions Program, BSP) 提供一系列符合 Oracle 的 MML 规范的介质管理产品。使用与 MML 界面相兼容的软件, Oracle 服务器会话可备份 到介质管理器并请求介质管理器还原备份。请与介质供应商联系以 确定其是否为 Oracle BSP 的成员。 在开始将 RMAN 用于介质管理器之前,必须先安装介质管理器并确保 RMAN 可与其 进行通信。有关该过程的具体说明,请参见介质管理器供应商的软件文档。根据要安装的产 品,相应执行以下基本步骤: 1. 在目标主机或产品网络上安装并配置介质管理软件。此阶段无需集成 RMAN。 2. 确保可在目标数据库主机上创建操作系统文件的非 RMAN 备份。此步骤将使以后排 除故障更为容易。请参阅介质管理文档以了解如何将文件备份到介质管理器。 3. 获取并安装要与 Oracle 服务器集成的第 三方介质管理模块。该模块必须包含 Oracle 要在访问介质管理器时加载的库。安装介质管理软件后,介质管理库应已与 Oracle 服 务器集成在一起。下面的恢复管理器脚本可以将数据文件备份到由介质管理器控制的磁带机 上: run { # Allocating a channel of type 'sbt' for serial device ALLOCATE CHANNEL ch1 DEVICE TYPE 'sbt'; BACKUP DATAFILE 3; } 恢复管理器执行该命令时,将向执行该备份操作的 Oracle 服务器会话发送备份请求。 Oracle 服务器会话将输出通道标识为介质管理设备,然后请求介质管理器装载磁带并将输 出写入磁带。 介质管理器会标记并记录磁带以及磁带上每个文件的名称。介质管理器可处理还原和备 份操作。还原文件时,将执行以下步骤: 1. Oracle 服务器请求还原某一特定文件。 2. 介质管理器标识包含该文件的磁带,并读取磁带。 3. 介质管理器将信息传回到 Oracle 服务器会话。 4. Oracle 会话将文件写入磁盘。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 82 5.2.4 与RMAN 连接的类型 使用恢复管理器,可连接到下列类型的数据库: 目标数据库:使用 SYSDBA 权限连接到目标数据库。您必须具有该权限才能连接成功。 恢复目录数据库:这是一种为 RMAN 资料档案库配置的可选数据库。 辅助数据库:辅助数据库是使用 RMAN DUPLICATE 命令创建的数据库。它也可能是 在表空间时间点恢复(TSPITR) 过程中使用的临时数据库。备用数据库是生产数据库的副本, 可用于灾难恢复。图 5-2 介绍不使用恢复目录进行连接的办法: 图 5-2 不使用恢复目录进行链接 5.2.5 恢复管理器模式 恢复管理器是一个具有自己的命令语言的命令行解释程序(CLI)。RMAN 有两种操作模 式:交互模式和批处理模式。 交互模式:要交互运行 RMAN 命令,请启动 RMAN,然后在命令行界面中键入命令。 例如,可以从 UNIX 命令 shell 启动 RMAN,然后执行以下交互命令: $ rman target sys/sys_pwd@db1 RMAN> BACKUP DATABASE; 批处理模式:可以以将 RMAN 命令输入到一个文件中,然后通过在命令行中指定该文 件的名称来运行该命令文件。命令文件的内容应与命令行中输入的命令完全相同。以批处理 模式运行时, RMAN 从命令文件中读取输入内容,然后将输出消息写入日志文件(如果已 指定)。 RMAN 在编译或执行任何命令前先对整个命令文件进行语法分析。无需在文件中添加 退出命令,因为 RMAN 将在到达文件末尾时终止执行。批处理模式最适合于通过操作系统 作业控制设备来执行安排好的定期备份操作。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 83 $ rman target / @tbsbk.rcv log tbs.log 在该示例中,用户已经创建了文件 tbsbk.rcv,该文件包含用户本要交互使用的命令。 RMAN 会将消息输出到文件 tbs.log。 使用“运行 RMAN 脚本” 任务,所有可从 RMAN 命令行调用的命令或脚本都可以通 过 Oracle Enterprise Manager 发出。在“参数” (Parameters) 页上,指定“运行 RMAN 脚 本” 任务的参数设置。 5.2.6 RMAN命令与参数 将 RMAN 输出写入到一个日志文件: $ rman target sys/oracle log $HOME/ORADATA/u03/rman.log append 调用 RMAN 时执行命令文件: $ rman target sys/oracle log $HOME/ORADATA/u03/rman.log append @'$HOME/STUDENT/LABS/my_rman_script.rcv' LOG = 'filename' 参数指定用于记录 RMAN 输出的文件。如果未指定该参数, RMAN 将把其消息日志文件写入到标准输出。如果无法打开指定的文件, RMAN 不会 中止,而是将输出内容写入到标准输出设备。 APPEND 关键字指定新的输出应附加在消息日志文件的末尾。如果未指定该参数,一 旦存在与消息日志文件同名的文件,RMAN 将覆盖该文件。 可使用 CMDFILE = 'filename' 运行包含 RMAN 命令的文件。如果文件名的第一个字符 是字母,则可不必将文件名放在引号内。RMAN 将在运行命令文件后终止。 RMAN 具有两种基本类型的命令:独立命令和作业命令。独立命令在 RMAN 提示符 下执行,通常是自包含的。下列是部分独立命令: CHANGE、CONNECT、CREATE CATALOG, RESYNC CATALOG、CREATE SCRIPT, DELETE SCRIPT, REPLACE SCRIPT。 作业命令通常被分成几组,由 RMAN 在 RUN 命令块内按顺序执行。如果块内任何一 个命令失败, RMAN 将停止处理;而不再继续执行块内的其它命令。有一些命令既可在提 示符下发出也可在 RUN 命令中发出。如果在 RMAN 提示符下执行独立命令,可利用自动 分配通道的功能。可以按交互模式或批处理模式执行命令。 独立命令示例: 装载目标数据库 发出启动命令,如下所示: RMAN> STARTUP MOUNT 关闭目标数据库 发出关闭命令,如下所示: RMAN> SHUTDOWN IMMEDIATE 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 84 列出目标数据库的当前配置 使用 REPORT 命令获取数据库的配置信息,如下所示: RMAN> REPORT SCHEMA; RMAN-03022: compiling command: report Report of database schema File K-bytes Tablespace RB Name ---- -------- ---------- --- ----------------- 1 117760 SYSTEM *** …/ORADATA/u01/system_01.dbf 2 30720 UNDO1 *** …/ORADATA/u02/undotbs.dbf 3 5120 USERS *** …/ORADATA/u04/users_01.dbf 4 5120 INDX *** …/ORADATA/u03/indx_01.dbf 5 5120 SAMPLE *** …/ORADATA/u02/sample_01.dbf 6 1024 QUERY_DATA *** …/ORADATA/u01/query_01.dbf 作业命令示例: RMAN> RUN { backup incremental level 0 format ‘/u01/db01/backup/%d_%s_%p’ fileperset 5 (database include current controlfile); sql ‘alter database archive log current’; } 与独立命令不同,作业命令必须包含在 RUN 命令的括号中。下面是作业命令的示例: ALLOCATE CHANNEL、SWITCH RMAN 按顺序执行 RUN 命令块内的作业命令。如果块内的任何命令失败, RMAN 将 停止处理;不再继续执行块内的其它命令。实际上,RUN 命令定义了一个命令执行单位。 当 RUN 命令块内的最后一个命令执行完毕后,Oracle 将释放为该命令块分配的所有服务器 端资源,如 I/O 缓冲区或 I/O 从属进程。 5.2.7 配置RMAN 环境 RMAN 预设为使用适用于所有 RMAN 会话的缺省配置设置。可以使用 CONFIGURE 命令配置 RMAN 备份、还原、复制和维护作业的永久设置。这些设置将对所有 RMAN 会 话有效,除非清除或更改该配置。 使用 Oracle Enterprise Manager,可以使用“创建备份配置” 向导来设置备份和恢复的 缺省值。可通过“ Oracle EnterpriseManager 控制台” (Oracle Enterprise Manager Console) 来 访问该向导。在“常规” (General)页上,指定用于备份、恢复和目录维护操作的一组缺省 值的名称和说明。在“通道” (Channels) 页上,指定是要将该配置用于映像副本还是备份集, 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 85 并提供该通道的附加说明。在“备份参数” (Backup Parameters) 页上,设置备份集的存储 参数。 使用 CONFIGURE 命令可以:配置自动通道、指定备份保留策略、指定要创建的备份 副本数、限制备份集的大小、使表空间从备份中脱离、启用和禁用备份优化。 CONFIGURE 命令示例:配置自动通道,使用 CONFIGURE CHANNEL 命令可指定缺 省备份位置和文件命名约定。 RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/db01/BACKUP/%U'; 配置备份保留策略,使用 CONFIGURE RETENTION POLICY 命令可创建永久和自动 的备份保留策略。RMAN 将根据您用 CONFIGURE 命令指定的标准来确定数据文件和控制 文件的备份和副本何时过期;即,何 时介质恢复不再需要使用这些备份和副本。 可以发出 REPORTOBSOLETE 命令查看已过期的文件,并使用 DELETE OBSOLETE 命令将它们删 除。发出 CONFIGURE RETENTION POLICY CLEAR 命令可将该设置恢复为缺省值。 RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 days; 可以使用以下两种互斥方法中的任意一种来实施保留策略: 指定一个恢复期,该恢复期是从当前时间回溯到可恢复时间点的时间段。在以上示例中, 使用 CONFIGURE 命令可确保对每个数据文件都保留一份早于可恢复点(七天)的备份。 指定一个冗余值,该值指示备份或副本一旦超过某一指定数目,将不再予以保留。缺省 情况下,RETENTION POLICY 配置为 REDUNDANCY 1。 RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2; 配置双重备份集: 对于使用自动通道的所有备份命令,可在一个备份集中为每个备份片最多创建四个副 本。这仅适用于数据文件和归档重做日志文件。 RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2; 配置备份优化: 设置备份优化的目的是:如果相同的文件已备份到某一设备类型, BACKUP 命令不再 将文件备份到该设备类型。两个文件相同,指的是其内容必须完全相同。备份优化的缺省值 是 OFF。可以通过使用 BACKUP 命令的 FORCE 选项覆盖备份优化设置。 RMAN> CONFIGURE BACKUP OPTIMIZATION ON; 使用 CLEAR 选项恢复为缺省值 RMAN> CONFIGURE RETENTION POLICY CLEAR; RMAN> CONFIGURE CHANNEL DEVICE TYPE sbt CLEAR; SHOW 命令用于显示使用 CONFIGURE 命令指定的永久配置设置。配置的这些设置将 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 86 用于任意 RMAN 会话。 可以使用 SHOW 命令显示下列信息: 自动通道配置设置: SHOW CHANNEL; SHOW DEVICE TYPE; SHOW DEFAULT DEVICE TYPE; RMAN 保留策略配置设置: SHOW RETENTION POLICY; 备份副本数: SHOW DATAFILE BACKUP COPIES; 备份集的最大大小: SHOW MAXSETSIZE; 不包括在整个数据库备份中的表空间: SHOW EXCLUDE; 备份优化的状态: SHOW BACKUP OPTIMIZATION; LIST 命令用于生成详细报告,列出下各项的所有信息: 包含指定的一系列数据文件的备份的备份集,指定的一系列数据文件的副本,包含属于 指定表空间列表的任何数据文件的备份的备份集,属于指定表空间列表的任何数据文件的副 本,包含任何具有指定名称或范围的归档日志的备份 的备份集,任何具有指定名称或范围的 归档日志的副本。 使用此命令时必须连接至目标数据库。如果在 NOCATALOG 模式下进行连接,则必须 装载数据库。如果使用恢复目录进行连接,则必须启动目标例程(但无需装载)。 列出数据库备份,可以使用此命令生成数据库中所有文件的备份的列表: RMAN> LIST BACKUP OF DATABASE; 列出备份集,上面的示例使用 LIST 命令列出数据文件“ /db01 /ORADATA/ u03/ users01.dbf”的所有已知备份。 RMAN> LIST BACKUP OF DATAFILE“/db01/ORADATA/u03/users01.dbf”; 列出数据文件副本,上面的示例使用 LIST 命令列出 SYSTEM 表空间的数据文件副本。 RMAN> LIST COPY OF TABLESPACE “SYSTEM”; REPORT 命令,该命令有助于更详细地分析 RMAN 资料档案库中的信息。 可以针对各种问题生成报告,该数据库的结构是怎样的? RMAN> REPORT SCHEMA; 哪些文件需要备份? RMAN> REPORT NEED BACKUP ...; 哪些备份可以删除(即已过期)? 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 87 RMAN> REPORT OBSOLETE; 哪些文件由于不可恢复的操作而不可恢复? RMAN> REPORT UNRECOVERABLE ...; REPORT NEED BACKUP 命令用于标识所有需要备份的数据文件。该报告假定在还原 时使用最新的备份。该命令有三个选项: 增量(Incremental):是一个整数值,指定应在恢复过程中还原的增量备份的最大数目。 如果需要该数目或更多的增量备份,则需要对数据文件执行新的完全备份。例如,要报告需 要三个或更多增量备份才能进行恢复的文件: RMAN > REPORT NEED BACKUP incremental 3 database; 天数(Days):是一个整数值,指定距文件上一次完全或增量备份操作的最大天数。如果 最近一次备份到当前的天数等于或超过该数字,则需要对该文件进行备份。例如,报告三天 未备份的系统文件:RMAN > REPORT NEED BACKUP days 3 tablespace system; 冗余(Redundancy):一个整数值,指定必要的最低冗余级别。例如,如果没有两个或更 多备份,则冗余级别 2 将要求进行备份。 5.2.8 使用RMAN的注意事项 在使用恢复管理器之前,请考虑以下几点: 系统的共享资源: RMAN 的大多数工作是通过 Oracle 服务器进程执行的。这些操作也 可以并行进行,以提高吞吐量。这意味着 PROCESSES 参数必须足够高。从 OS 的角 度看,这就意味着应该把共享内存和信号量设置得足够多。 执行授权操作的用户组:您必须确定执行授权操作的用户组。 可以以相应地设置用户 帐户,使之具备必要的操作系统和 Oracle 数据库权限。 要启动和关闭数据库,用户应具有 SYSDBA 权限。 远程操作:您需要使用口令文件通过 Oracle Net 连接到目标数据库,以执行授权的操 作。例如,从远程计算机执行关闭、启动、备份和恢复操作。这样您就需要设置口令文件, 还应确保具有备份该口令文件的策略。 全球化环境变量:调用 RMAN 之前,设置 NLS_DATE_FORMAT 和 NLS_LANG 环境 变量。这些变量确定 RMAN 命令(如 RESTORE、RECOVER 和 REPORT)中的时间参数 的格式。 使用恢复目录:如果使用恢复目录, RMAN 可以执行更多种类的自动备份和恢复功能。 使用恢复目录会涉及存储空间和维护方面的工作。 您还应确定是否将一个数据库专用于维护多个目标数据库的恢复目录。另外,还要考 虑备份该恢复目录的策略。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page 010-62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 88 第 6 章 RMAN备份 6.1 RMAN备份 第 六 章 RMAN 备份 RMAN,全称是恢复管理器,它的备份性能要比手动 的复制文件好一些。而且 RMAN 提供了增量备份的功 能,是手动备份所不具备的。 RMAN 针对数据文件的备份方式,主要有两种,一 种就是增量备份,还有一种是映像拷贝。映像拷贝其 实相当于手动的复制文件。 第 一 节 RMAN 备份 恢复管理器备份的概念 确定 RMAN 特定的备份类型 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 89 6.1.1 恢复管理器备份的概念 恢复管理器备份是由服务器管理的备份,恢复管理器使用 Oracle 服务器会话执行备份 操作恢复管理器提供对以下内容进行备份的功能: 整个数据库、表空间中的每个数据文件或单个 数据文件、控制文件、所有归档日志或所 选归档日志。使用恢复管理器时不备份联机重做日志文件。 关闭的数据库的备份: 关闭的数据库的备份定义为在数据库关闭(脱机)时进行的备份。这与一致数据库备份 相同。如果执行关闭的数据库的备份,则不得打开目标数据库。如果使用恢复目录,则必须 打开恢复目录数据库。 打开的数据库的备份: 打开的数据库的备份定义为在数据库打开(联机)时对数据库任意部分进行的备份。恢 复管理器使用服务器进程制作数据文件、控制文件或归档日志的副本。使用恢复管理器时, 不要使用 ALTER TABLESPACE ... BEGIN BACKUP 命令将表空间置于备份模式。RMAN 读取块,直到获得一致读取为止。 6.1.2 确定RMAN特定的备份类型 可以使用恢复管理器执行以下类型的备份: 映像副本是数据文件、控制文件或归档重做日志文件的副本。可以使用恢复管理器或操 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 90 作系统实用程序制作相应的副本。数据文件的映像副本包含所有的数据文件块,其中包括未 使用过的块。映像副本只能包含一个文件,而且不能对单个复制操作进行多元备份。 备份集可以包含一个或多个数据文件、控制文件或归档重做日志文件。备份集可以包 含一个或多个文件。可以使用两种完全不同的方法制作备份集: 完全备份:在完全备份中,可以备份一个或多个文件。在完全备份中,所有包含指定文 件数据的数据块都会被备份。 增量备份:增量备份只对上次增量备份以后数据块有更改的数据文件进行备份。增量备 份需要一个基础级别(即增量级别 0)备份,该备份包含指定文件数据的所有块。增量级别 0 和完全备份均复制数据文件中的所有块,但是在增量备份策略中不能使用完全备份。 可以以配置自动备份控制文件,在执行 BACKUP 或 COPY 命令后即可自动备份控制 文件。 6.1.3 使用RMAN BACKUP 命令创建备份集 备份集包含一个或多个物理文件(以 RMAN 特定的格式存储在磁盘或磁带上)。可以 制作包含数据文件、控制文件以及归档重做日志文件的备份集。也可以对备份集进行备份。 备份集有两种类型: 数据文件:可以包含数据文件和控制文件,但不包含归档日志 归档日志:仅包含归档日志,不能包含数据文件或控制文件 在执行恢复之前,可能需要通过恢复管理器还原备份集,这与磁盘上的映像副本不同。 备份集中的每个文件必须具有相同的 Oracle 块大小。如果包含控制文件,就会将它写 入到最后一个数据文件备份集中。可以使用以下两种方式将控制文件包含在备份集中: 使用 INCLUDE CONTROL FILE 语法显式包含、通过备份文件 1(系统数据文件)隐 式包含。RMAN BACKUP 命令用于备份数据文件、归档重做日志文件以及控制文件。 BACKUP 命令将文件备份到磁盘或磁带上的一个或多个备份集中。在数据库打开或关闭时, 都可以制作备份。制作类型既可以是完全备份,也可以是增量备份。 备份集是一种逻辑结构,它具有以下特性: 备份集包含一个或多个称作备份片的物理文件。备份集是使用 BACKUP 命令创建的。 FILESPERSET 参数可以控制备份集中包含的数据文件个数。可以将备份集写入磁盘或磁 带。缺省情况下,Oracle 为大多数平台提供一个磁带输出,称为 SBT(系统备份到磁带), 当使用介质管理器时,备份将输出到磁带设备中。在执行恢复之前必须通过还原操作从备份 集中提取文件。归档重做日志文件备份集不能是增量备份(缺省为完全备份)。备份集不包 含从未使用过的数据块。 备份片是备份集中的一个文件。备份片可以包含来自多个数据文件的数据块。 逻辑备份集通常只包含一个备份片。备份片是一个包含一个或多个 Oracle 数据文件或 归档日志的物理文件。对于大型数据库,一个备份集可能超出单个磁带盘、物理磁盘或操作 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 91 系统文件的最大容量。 可以使用 CONFIGURE CHANNEL 或 ALLOCATE CHANNEL 命令及 MAXPIECESIZE 选项来限制每个备份集片的大小。 备份集与备份片的关系,如图 6.1: 图 6.1 备份集与备份片的关系 可以使用以下命令限制备份片的大小,并根据需要为每个备份集生成多个片: ALLOCATE CHANNEL … MAXPIECESIZE = integer CONFIGURE CHANNEL … MAXPIECESIZE = integer 下面的例子限制备份片的大小: RMAN> RUN { 2> ALLOCATE CHANNEL t1 TYPE 'SBT' 3> MAXPIECESIZE = 4G; 4> BACKUP 5> FORMAT 'df_%t_%s_%p' FILESPERSET 3 6> (tablespace users); } 可以控制 Oracle 生成的备份集数以及恢复管理器在单个备份集中放置的输入文件数。 如果在读取文件或写入备份片时出现 I/O 错误,该作业就会中止。在使用 BACKUP 命令时, 必须执行以下操作: 装载或打开目标数据库。如果数据库处于 ARCHIVELOG 模式,恢复管理器允许您制 作不一致备份,但您必须应用重做日志,使备份在恢复操作中使用时保持一致。 如果未使用自动通道分配,则手动分配一个通道用以执行 BACKUP 命令。或者,可以 执行下列操作: 指定备份片的命名约定。如果没有指定 FORMAT 参数,则 RMAN 将备份片存储在端 口特定的目录中(在 UNIX 上为$ORACLE_HOME/dbs)。如果没有指定文件名格式,则 RMAN 缺省使用%U。 通过使用 INCLUDE CURRENT CONTROLFILE 选项,可以将控制文件包含在备份集 中。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 92 表 19-1 是 BACKUP 命令的参数: 选项 重要性 full 服务器会话将所有块都复制到备份集中,只跳过从未使用 过的数据文 件块。在备份归档重做日志或控制文件时,服务器会话不 会跳过任何 块。完全备份不是增量备份。 incremental level integer 服务器会话复制自上次 n 级增量备份以来更改过的数据 块,其中 n 是 从 1 到 4 之间的任意整数。 要执行大于 0 级的增量备份时,服务器进程会在 BACKUP 命令中检查 每个数据文件的 0 级备份或 0 级副本是否存在。 如果指定增量,则必须在备份说明中设置以下参数之一: DATA FILE、 DATA FILECOPY、TABLESPACE 或 DATABASE。恢复管理器 不支持 控制文件、归档重做日志或备份集的增量备份。 filesperse t integer 如果指定了 FILESPERSET 参数,恢复管理器就会将 FILESPERSET 值与计算的值(备份的文件数与通道数的比值)进行比较, 并采用两 者中的较小值,从而确保使用所有的通道。 如果不指定 FILESPERSET,恢复管理器就会将计算的值 (文件数与分 配的通道数的比值)与缺省值 64 进行比较并采用两者中 的较小值。 当通道多于要备份的文件时,多余的通道将保持空闲。输 入文件不能 在通道之间进行分割。 skip 指定该参数可将某些数据文件或归档重做日志排除在备 份集之外。该 参数具有以下选项: offline:将脱机数据文件排除在备份集之外。 readonly:排除属于只读表空间的数据文件。 inaccessible:排除由于 I/O 错误而无法读取的数据文 件或归档重 做日志。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 93 maxsetsize integer 以字节(缺省 )、千字节 (K)、兆字节(M) 或千兆字节(G) 来指定备份 集的最大大小。恢复管理器会尽量将所有的备份集限制为 指定的大小。 diskratio integer 指示恢复管理器仅将数据文件分配给分布在指定数量驱 动器上的备份 集。当数据文件以带状分布或位于不同磁盘轴上时,此参 数对数据文 件备份非常有用。 delete input 在成功创建备份集后删除输入文件。仅当备份归档重做日 志、数据文 件副本或备份集时才指定该选项。它相当于对所有输入文 件执行 CHANGE . . . DELETE 命令。 include current controlfile 创建当前控制文件的快照并将其放置在该子句生成的各 备份集中。 Format 输出名称的格式。可以单独使用或组合使用格式参数。 %c 指定一组双重备份片中备份片的副本数。 %p 指定备份集中的备份片数。对于各备份片,该值从 1 开 始并且每创建一 个备份片,该值就增加 1。 %s 指定备份集数。该值是控制文件中的计数器,随着备份集 的增加而增加。 %d 指定数据库名。 %n 指定数据库名,如果总长度未达到 8 个字符,则在右侧 填补 x 个字符。 %t 指定备份集时间戳,它是由自某一固定参考时间开始经过 的秒数生成的 4 字节值。联合使用%s 和%t 可以形成备份集的唯一名 称。 %u 指定一个由 8 个字符组成的名称,该名称由该备份集号 和创建该备份集 的时间的缩写形式构成。 %U 指定%u_%p_%c 的简写方式,它将保证所生成的备份文件 名的唯一性。 如果不指定格式,恢复管理器将缺省使用%U。 表 19-1 BACKUP 命令参数 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 94 借助 RMAN 多元备份技术可同时读取磁盘上的文件,然后将这些文件写入同一个备 份片。在将多个文件写入同一备份文件或备份片时,恢复 管理器自动将文件分配给通道、对 这些文件进行多元备份,并且跳过所有未使用过的块。为了同时备份足够多数量的文件,可 以对高性能顺序输出设备(如快速磁带机)进行流式处理。这对于必须与其它联机系统资源 竞争的备份来说是很重要的。操作员或存储子系统负责更换磁带机所在目标数据库上的磁 带。该进程是为写入磁带设计的,但也可以将它用于写入磁盘。多元备份是由以下参数控制 的:BACKUP 命令的 FILESPERSET 参数,ALLOCATE CHANNEL 和 CONFIGURE CHANNEL 命令的 MAXOPENFILES 参数。 数据库包含三个数据文件,可以将这些数据文件一起多元备份到一个物理文件(集)中, 并存储在磁带上。数据文件是通过以下方式进行多元备份的:依次写入数据文件 1、数据文 件 2、数据文件 3 的各 n 个块,然后又回到数据文件 1 继续写,如此循环反复直至所有 文件备份完毕。如图 6-2: 图 6-2 多元备份 可以将 CONFIGURE 命令的 PARALLELISM 选项设置为大于 1 或者手动分配多个通 道来配置并行备份, RMAN 并行地执行其操作,并且并行地写入多个备份集。服务器会话 负责分摊指定文件的备份工作。示例: RMAN> run { 2> allocate channel c1 type sbt; 3> allocate channel c2 type sbt; 4> allocate channel c3 type sbt; 5> backup 6> incremental level = 0 7> format '/disk1/backup/df_%d_%s_%p.bak‘ 8> (datafile 1,4,5 channel c1 tag=DF1) 9> (datafile 2,3,9 channel c2 tag=DF2) 10> (datafile 6,7,8 channel c3 tag=DF3); 11> alter system archive log current; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 95 12> } 图 6-3 显示了多元 备份: 图 6-3 多元备份 当创建多个备份集并分配多个通道时, RMAN 自动并行地执行其操作,并且并行地写 入多个备份集。分配的服务器会话负责分摊指定数据文件、控制文件和归档重做日志文件的 备份工作。注意,不能让单个备份集分跨多个通道。备份集的并行化通过以下方式完成:将 PARALLELISM 配置为大于 1,或者分配多个通道指定多个要备份的文件。示例: 有 9 个文件需要备份(数据文件 1 到 9)。已经合理分配了数据文件,从而保证每个集 要备份的数据块数大致相等(为了提高效率)。 将数据文件 1、4 和 5 分配给备份集 1。 将数据文件 2、3 和 9 分配给备份集 2。 将数据文件 6、7 和 8 分配给备份集 3。 可以使用 FILESPERSET 参数限制备份集中包含的数据文件个数。 通过对备份集进行双重备份,可以给每个备份片最多创建 4 个完全相同的副本。可以 使用以下命令生成双重备份的备份集: BACKUP COPIES、SET BACKUP COPIES、CONFIGURE … BACKUP COPIES RMAN 并不生成多个备份集,而是给集内的每个备份片生成完全相同的副本。示例: 此示例显示如何给数据文件 1 和 2 的备份创建两个副本: RMAN> BACKUP COPIES 2 DATAFILE 1, DATAFILE 2 2> FORMAT '/BACKUP1/%U','/BACKUP2/%U'; RMAN 将每个备份片的第一个副本放入/BACKUP1,而将第二个副本放入 /BACKUP2。 RMAN 使用唯一键生成一个 备份集,并给集内的每个备份片生成两个完全相同的副本。 如 图 6-4: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 96 图 6-4 双重备份集 另一种管理备份的方法就是对备份集进行备份。可以使用 RMAN BACKUP BACKUPSET 命令进行磁盘到磁盘以及磁盘到磁带的备份。这可用于在磁带上制作额外的 备份,或者将备份从磁盘移到磁带上。如图 6-5: 图 6-5 备份集的备份 6.1.4 备份控制文件 如果 CONFIGURE CONTROLFILE AUTOBACKUP 设置为 ON,则在以下情况下, RMAN 自动执行控制文件的自动备份: 在 RMAN 提示符下执行每个 BACKUP 或 COPY 命令后,当 RUN 命令块中 BACKUP 或 COPY 命令后跟的既不是 BACKUP 也不是 COPY 时,当每个 RUN 命令块结尾处的最 后一条命令既不是 BACKUP 也不是 COPY 时。 在执行这些命令过程中,除了执行当前控制文件的备份或复制外,还进行控制文件的自 动备份。缺省情况下,CONFIGURE CONTROLFILE AUTOBACKUP 设置为 OFF。 RMAN 使用%F 这种缺省格式自动备份当前的控制文件。可以使用 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT 和 SET CONTROLFILE AUTOBACKUP FORMAT 命令更改此格式。 格式字符串必须包含%F 替代变量。此变量将转换为 c-IIIIIIIIII-YYYYMMDD-QQ,其 中: 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 97 IIIIIIIIII 代表 DBID。DBID 以十进制输出,因此可以方便地将它与目标数据库关联 起来。 YYYYMMDD 是生成备份当天的公历时间戳 QQ 是序列号(十六进制数字),从 00 开始,最大值为 'FF' (256) 示例: RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE disk TO 'controlfile_%F'; 6.1.5 备份归档重做日志文件 在开始执行每个不包含 UNTIL 子句或 SEQUENCE 参数的 BACKUP ... ARCHIVELOG 命令时,RMAN 会尝试自动切换并归档当前的联机重做日志。在 Oracle9i 中,RMAN 执 行归档日志故障转移。如果在归档重做日志文件中检测到任何损坏的块, RMAN 就会在其 它归档目标中搜索没有损坏块的文件。 DBA 经常遇到的一个问题是:在备份归档日志之前,不知道是否已将其完全复制到归 档日志目标中。恢复管理器可以访问控制文件或恢复目录信息,所以它知道哪些日志已经归 档,可以在恢复过程中还原。可以使用 BACKUP ARCHIVELOG 命令备份归档重做日志文 件,或者在备份数据文件和控制文件时使用 BACKUP … PLUS ARCHIVELOG 命令也同时 备份这些日志文件。 归档日志备份集仅包含归档日志,不能包含数据文件或控制文件。始终是完全备份。(因 为可以指定要备份的归档日志的范围,所以无法执行增量备份。) 下面的例子将所有的归档重做日志备份到一个备份集中,其中每 个备份片包含 3 个归 档日志。在归档日志复制完毕后,将这些日志从磁盘上删除,并在 V$ARCHIVED_LOG 视 图中将它们标记为已删除。 RMAN> BACKUP 2> FORMAT '/disk1/backup/ar_%t_%s_%p' 3> ARCHIVELOG ALL DELETE ALL INPUT; 6.1.6 RMAN备份的要求 在使用恢复管理器执行备份时,必须注意以下几点: 恢复管理器要连接的目标数据库必须已装载。不支持对联机重做日志进行备份。 如果目标数据库处于 NOARCHIVELOG 模式,则只能采用“干净的” 表空间和数据 文件备份(即“脱机正常” 或“只读” 表空间的备份)。要采用数据库备份,必须先彻底 关闭该数据库,再以“装载” 模式重新启动它。 如果目标数据库处于 ARCHIVELOG 模式,则只能备份“当前的” 数据文件(通过恢 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page 193 Oracle 备份与恢复 98 复将数据文件还原为当前状态)。 如果使用恢复目录,则必须打开恢复目录数据库。 6.2 使用RMAN COPY 命令创建映像副本 第二节 使用 RMAN COPY 命令创建映象副本 RMAN 映象副本和使用 CP、COPY 等操作系统命令复 制文件没有什么区别。 在创建映象副本 过程中,RMAN 可以使用校验和来 检查数据文件中块是否损坏。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 99 映像副本包含单个数据文件、归档重做日志文件或控制文件。 可以使用 RMAN COPY 命 令或操作系统命令创建映像副本。当使用 RMAN COPY 命令创建映像副本时,服务器会话 验证文件中的块,并将副本记录到控制文件中。 6.2.1 RMAN映像副本的特性 映像副本具有以下特性: 只能将映像副本写入磁盘。因而,要在磁盘上保留该副本,则需要额外的磁盘空间。 对于大文件,复制花费的时间很长,但还原时间大大减少,这是由于该副本已经存在于磁盘 上的缘故。 如果文件存储在磁盘上,则可以立即使用这些文件(也就是说,这些文件不需要从其 它介质还原)。这为在恢复管理器中使用 SWITCH 命令进行恢复提供了一种快速方 法,它相当于 ALTER DATABASE RENAME FILE SQL 语句。 映像副本中将包含所有的块(不管这些块是否包含数据),原因是 Oracle 服务器进程在 复制该文件的同时还会执行其它操作,如检查损坏的块、在控制文件中注册该副本等。要加 快复制进程,可以使用 NOCHECKSUM 参数。 映像副本可以是完全备份或增量 0 级备份的一部分,原因是文件副本总是包含所有块。 如果该副本将与增量备份集一同使用,则使用 0 级选项。 在增量备份策略中,可以将映像副本指定为 0 级备份,但映像副本不能作为其它级别 的备份。 使用 RMAN COPY 命令可以创建文件的映像副本。输出文件始终写入磁盘。可以复制 数据文件、归档重做日志文件或控制文件。在很多情况下,复制数据文件比备份这些文件更 有益处,原因是复制的数据文件输出不需要任何其它处理就可以使用。 如果要使用 COPY 命令备份整个数据库,必须使用单独的 COPY 语句复制每个数据文 件。也可以制作控制文件和归档重做日志文件的副本。 下面的示例假定您使用的是自动通道分配。如果手动分配通道,则在 RUN 语句中包含 COPY 命令(如下所示): RMAN > RUN { 2> ALLOCATE CHANNEL c1 type disk; 3> COPY 4> DATAFILE '/ORADATA/users_01_db01.dbf' to 5> '/BACKUP/users01.dbf' tag=DF3, 6> ARCHIVELOG 'arch_1060.arc' to 7> 'arch_1060.bak';} 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 100 6.2.2 使用RMAN COPY 命令创建映像副本 在复制操作中, Oracle 服务器进程对每个块执行校验和计算以检测是否有块损坏。 RMAN 在还原副本时也要核对校验和。该过程称为物理损坏检测。可以使用 NOCHECKSUM 选项取消校验和操作,从而加快复制进程。如果数据库已在维护块校验和,则此选项无效。 可以使用 CHECK LOGICAL 选项测试通过了物理损坏检查的数据和索引块,查看它们是否 存在逻辑损坏,如行片或索引条目损坏。如果检测到任何块存在逻辑损坏,则将该块记录到 服务器进程的警报日志和跟踪文件中。 可以使用 MAXCORRUPT 参数设置逻辑和物理损坏的阈值。只要在某个文件中检测到 的逻辑和物理损坏总和低于该值,则 RMAN 命令完成,同时 Oracle 将损坏块的范围植入 到 V$COPY_CORRUPTION 视图。如果超出 MAXCORRUPT,则该命令终止,并且不植入 视图。COPY 命令示例如图 6.6: 图 6.6 COPY 命令 缺省情况下,恢复管理器将连续执行各 COPY 命令。然而,可以通过以下方法并行执 行复制操作: 使用 CONFIGURE DEVICE TYPE … PARALLELISM,或分配多个通道(在 Oracle8i 中 是必需的), 为多个文件指定一条 COPY 命令,可以手动分配通道(如幻灯片所示), 或者 通过自动通道配置进行分配。在下面的示 例中,总共创建了 4 个通道,但仅使用其中的 3 个。 以下是命令的执行情况: 1. 将 4 个通道配置为写入磁盘。 2. 第一条 COPY 命令使用 3 个通道(服务器进程),一个数据文件通过一个通道写入 磁盘。 3. 第二条 COPY 命令将在前一条 COPY 命令执行完成后才开始执行。它将只使用一个 通道。当并行度比较高时,占用的计算机资源较多,但备份操作完成速度较快。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 101 RMAN> CONFIGURE DEVICE TYPE disk parallelism 4; 2> COPY # 3 files copied in parallel 3> datafile 1 TO '/BACKUP/df1.dbf', 4> datafile 2 TO '/BACKUP/df2.dbf', 5> datafile 3 TO '/BACKUP/df3.dbf'; RMAN> COPY # Second copy command 2> datafile 4 TO '/BACKUP/df4.dbf'; 要使用恢复管理器制作所有数据文件的映像副本,请按照以下步骤执行: 1. 连接到 RMAN 并在装载模式下启动: RMAN> STARTUP MOUNT 2. 获取目标数据库的数据文件列表: RMAN> REPORT SCHEMA; 3. 使用 COPY 命令或脚本创建上面列出的所有数据文件的副本: RMAN> COPY datafile 1 TO ’/BACKUP/df1.cpy’, datafile 2 TO ’/BACKUP/df2.cpy ’,...; 4. 使用 LIST COPY 命令验证副本: RMAN> LIST COPY; 可以使用 CURRENT CONTROLFILE 命令将控制文件包含在副本中。此外,如果 CONFIGURE CONTROLFILE AUTOBACKUP 为 ON,则在执行 COPY 命令后,RMAN 将 自动备份控制文件。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 102 6.3 RMAN备份类型 RMAN 备份分为完全备份和增量备份,增量备份分为差异增量备份和累计增量备份。 下面我们逐一进行介绍。 6.3.1 完全备份 完全备份与整体数据库备份不同。整体备份包含目标数据库的所有数据文件和控制文 件,而完全备份可能只包含一个或多个数据文件、控制文件或归档重做日志文件。 第三节 RMAN 备份类型 完全备份 差异增量备份 累计增量备份 在 NOARCHIVELOG 模式下进行备份 自动备份 RMAN 控制文件 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 103 在执行完全备份时,Oracle 服务器进程读取整个文件,并将所有的块复制到备份集内, 只跳过从未使用过的数据文件块。在备份归档重做日志或控制文件时,服务器会话不会跳过 任何块。 完全备份不属于增量备份策略的一部分。可以用它创建和还原数据文件、数据文件副本、 表空间、数据库、控制文件、归档日志和归档日志副本的完全备份。注意,包含归档重做日 志的备份集始终是完全备份。 6.3.2 差异增量备份 这是增量备份的缺省类型,它备份自最近 n 级或更低级别备份以来更改过的所有块。 您要维护一个 100 GB 的数据库,该数据库还 在不断地增长。基于现有的硬件,您确定 执行打开的数据库的整体备份需要 4 个小时。由于数据库每周 7 天、每天 24 小时总是处 于联机状态,所以在该时间段内执行备份将消耗大量系统资源。因此,每周只能执行一次 0 级备份,但出现故障时必须进行快速恢复。综合考虑,您制订了以下备份和恢复策略: 0 级备份将在每周中活动最少的一天执行。您确定这一天为星期日。 RMAN> BACKUP INCREMENTAL level 0 database; 每天执行一次 2 级增量备份,星期三除外。以这种方式备份的速度比较快,这是因为 只复制了自前一天以来更改过的块: RMAN> BACKUP INCREMENTAL level 2 database; 星期三的数据库活动较少,所以在这一天复制自星期日以来更改过的所有块,以加快恢 复速度。例如,如果在星期五发生故障,则只需要还原星期日、星期三和星期四的备份(不 需要还原星期一和星期二的备份): RMAN> BACKUP INCREMENTAL level 1 database; 在星期四,增量备份被完全备份代替。由于这并不改变备份的基础级别,所以星期五的 备份复制自星期三以来的更改。因此,可以在下一个 0 级备份之前丢弃该备份。如果错误 地在星期四执行了 0 级备份,则星期五的备份将复制自星期四以来更改过的所有块,这样 就更新了基础级别。此时,必须将该备份保存到下一个 0 级备份。原理如图 6.7 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航北京尚观科技有限公司 版权所有 Page LI-193 Oracle 备份与恢复 104 图 6.7 差异增量备份 6.3.3 累计增量备份 备份自最近 n-1 级或更低级别备份以来更改过的所有块 。 累积增量备份具有以下特性: 累积增量 n 级(其中,n > 0)备份复制自上次 n-1 级或更低级别备份以来更改过的所 有块。累积增量 备份以相同的级别备份上次备份的块。因此,与非累积备份相比,它们占用 的时间较长、写出的块较多、生成的备份文件也较大。因为恢复时在各级别必须应用的备份 较少,所以累积增量备份可以提高恢复速度。 累积增量备份以相同的级别复制上次增量备份已复制的更改。因此,如果采用 2 级增 量备份,则随后的 2 级累积备份将备份所有新修改的块以及该 2 级增量备份备份过的块。 这意味着要进行完全恢复,只需要一个同级的增量备份即可。 RMAN> BACKUP INCREMENTAL level 2 cumulative database; 原理如图 6.8: 图 6.8 累积增量备份 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 105 6.3.4 在NOARCHIVELOG 模式下进行备份 1. 确保要存储备份的目标目录可用并具有足够的空间。 2. 使用 NORMAL、IMMEDIATE 或 TRANSACTIONAL 子句彻底关闭数据库。 3. 装载数据库。 4. 如果未使用自动通道分配,请分配多个通道,并使用格式字符串将通道多路复用 到不同的磁盘上。 5. 运行 BACKUP 命令。由于数据库处于 NOARCHIVELOG 模式,增量备份不适用, 请使用完全备份选项。 6. 确认备份完成并已分类。 7. 打开数据库进行正常使用。 6.3.5 自动备份RMAN 控制文件 如果 CONFIGURE CONTROLFILE AUTOBACKUP 设置为 ON,则在以下情况下, RMAN 自动执行控制文件的自动备份: 在 RMAN 提示符下执行每个 BACKUP 或 COPY 命令后,当 RUN 命令块中 BACKUP 或 COPY 命令后跟的既不是 BACKUP 也不是 COPY 时,当每个 RUN 命令块结尾处的最 后一条命令既不是 BACKUP 也不是 COPY 时。 在执行这些命令过程中,除了执行当前控制文件的备份或复制外,还进行控制文件的自 动备份。 缺省情况下,CONFIGURE CONTROLFILE AUTOBACKUP 设置为 OFF。 RMAN 使用%F 这种缺省格式自动备份当前的控制文件。可以使用 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT 和 SET CONTROLFILE AUTOBACKUP FORMAT。 格式字符串必须包含%F 替代变量。此变量将转换为 c-IIIIIIIIII-YYYYMMDD-QQ,其 中: IIIIIIIIII 代表 DBID。DBID 以十进制输出,因此可以方便地将它与目标数据库关联起 来。 YYYYMMDD 是生成备份当天的公历时间戳。 QQ 是序列号(十六进制数字),从 00 开始,最大值为 'FF' (256)。 示例: RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE disk 2> TO 'controlfile_%F'; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 106 6.4 RMAN问题与监控 6.4.1 RMAN动态视图 可以使用以下视图获取在控制文件中存储的 RMAN 信息: V$ARCHIVED_LOG 显示在数据库中已经创建、备份或清除的归档文件。 V$BACKUP_CORRUPTION 显示在备份集的备份过程中找到的损坏块。 V$COPY_CORRUPTION 显示映像复制过程中找到的损坏块。 V$BACKUP_DATAFILE 用于通过确定各数据文件中的块数来创建大小相同的备份 集。通过它也可以找出数据文件中已损坏的块数。 第四节 RMAN 问题与监控 有关 RMAN 的动态视图: V$ARCHIVED_LOG 显示在数据库中已经创建、备份 或清除的归档文件。 V$BACKUP_CORRUPTION 显示在备份集的备份过程 中找到的损坏块。 V$COPY_CORRUPTION 显示映像复制过程中找到的 损坏块。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 107 V$BACKUP_REDOLOG 显示在备份集中存储的归档日志。 V$BACKUP_SET 显示已经创建的备份集。 V$BACKUP_PIECE 显示为备份集创建的备份片。 6.4.2 监视RMAN 备份 要在备份过程中将某一进程与一个通道关联起来,请: 1. 启动恢复管理器并连接到目标数据库和恢复目录(与后者的连接是可选的)。 rman target / catalog rman/rman@rcat 2. 在分配通道后,设置 COMMAND ID 参数,然后复制所需的对象。 run { allocate channel t1 type disk; set command id to 'rman'; copy datafile 1 to '/u01/backup/df1.cpy'; release channel t1;} 3. 查询 V$SESSION_LONGOPS 视图以获得复制的状态。 SELECT sid, serial#, context, sofar, totalwork round(sofar/totalwork*100,2) "% Complete", FROM v$session_longops WHERE opname LIKE 'RMAN:%' AND opname NOT LIKE 'RMAN: aggregate%'; 4. 使用 SQL*Plus 并查询 V$PROCESS 和 V$SESSION 以获得 SID 和 SPID。然后, 使用操作系统实用程序来监视进程或线程。 SELECT sid, spid, client_info FROM v$process p, v$session s WHERE p.addr = s.paddr AND client_info LIKE '%id=rman%'; 要监视复制进程,必须查询目标数据库,因此,目标数据 库应该处于“打开” 或“装 载”状态。 6.4.3 RMAN其他问题 恢复管理器异常终止:恢复管理器只在控制文件中记录已成功备份的备份集。如果恢 复管理器作业异常终止,则操作系统中可能存在没有完成的文件。恢复管理器不使用这些文 件,但您应该将它们删除。 检测损坏:恢复管理器可以检测并能够禁止执行一些操作,如导致备份文件无法使用 或造成还原的数据文件损坏的操作。缺省情况下将启用对物理损坏的错误检查。有关在备份 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 108 过程中遇到的损坏数据文件块的信息将记录在控制文件和警报日志中。服务器可以识别损坏 的数据文件块,但这些损坏块仍 包含在备份中。 Oracle 服务器在控制文件中记录损坏块的 地址和损坏类型。要从控制文件查看损坏块,请通过 V$BACKUP_CORRUPTION 查看备份 集或通过 V$COPY_CORRUPTION 查看映像副本。RMAN 将检测数据块和索引块是否存在 逻辑损坏,并将所有错误记录在 alert.log 和服务器会话的跟踪文件中。缺省情况下,禁用 逻辑损坏的错误检查。 检测破碎块:RMAN 读取整个数据库的块,并通过比较每个块的块头和块尾来确定块 是否破碎。如果检测到一个破碎块,则它重新读取该块,直到获取一致块为止。这就 是为什 么在使用 RMAN 进行表空间或数据文件备份时不必将表空间置于联机备份模式的原因之 一。这种机制还减少了在备份过程中生成的重做日志的数量,因为这样就不必将整个块都写 入重做日志文件了。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 109 第 7 章 RMAN恢复 第 七 章 RMAN 恢复 和手动管理的恢复一样, RMAN 的恢复有完全恢复 和不完全恢复,本节内容主要是如何使用 RMAN 完成 完全恢复和不完全恢复。 RMAN 的恢复操作比手动的恢复要简单的多, 这是 因为 RMAN 在备份期间自动记录了很多备份信息。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 110 7.1 RMAN完全恢复 本节描述 RMAN 在还原和恢复操作中的用法,在 ARCHIVELOG 模式下执行完 全恢 复,将数据文件还原到其它位置,使用归档重做日志文件重新定位和恢复表空间。 7.1.1 RMAN 在还原和恢复操作中的用法 使用 RMAN 执行还原和数据文件介质恢复, RMAN 自动执行还原文件的过程。发出 RESTORE 命令后,RMAN 将使用服务器会话还原正确的备份和副本。RMAN 资料档案库 用于选择最完整的可用备份集或映像副本来进行还原。缺省情况下,如果某一文件已处于正 确位置且其文件头包含有正确的信息,则 RMAN 将不还原该文件。而在 Oracle9i 以前的版 本中,将始终还原该文件。发出 RMAN RECOVER 命令后, RMAN 将应用联机重做日志 文件和归档重做日志文件中的更改,或使用增量备份来恢复已还原的文件。 使用 RMAN 可以在以下级别执行恢复数据库,表空间,数据文件。在完全恢复过程中, 归档重做日志文件和联机重做日志文件中的所有重做条目都将用于恢复数据库。损坏的文件 将从备份进行还原,而日志文件则用于将数据文件更新到当前时间点。 第 一 节 RMAN 完全恢复 RMAN 在还原和恢复操作中的用法 ARCHIVELOG 模式下执行完全恢复 将数据文件还原到其他位置 使用 RMAN 恢复表空间和重新定位表空间 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 111 7.1.2 ARCHIVELOG 模式下执行完全恢复 使用 RMAN 还原 ARCHIVELOG 模式下的数据库。在该示例中,使用 RMAN 来还原 并恢复整个数据库。该示例假 定:磁盘上有使用 RMAN 生成的完全备份。当前控制文件未 损坏,无需还原。所有数据文件都已损坏或丢失。 rman target / RMAN> STARTUP MOUNT RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE; RMAN> ALTER DATABASE OPEN; 7.1.3 将数据文件还原到其它位置 如果遇到介质故障,如磁盘驱动器丢失,则可能需要将数据文件还原到新位置。可以如 下面这么操作: 1. 连接到 RMAN。 rman target 2. 装载数据库。 RMAN> STARTUP MOUNT 3. 使用 RMAN 将数据文件还原到新位置并在控制文件中记录更改。 run{ set newname for datafile 1 to ‘//system01.dbf’; restore database; switch datafile all; recover database; alter database open; } 7.1.4 使用RMAN恢复表空间 和重新定位表空间 使用 RMAN 恢复表空间,如果已确定需要还原和恢复 USERS 表空间,则可发出下面 的 RMAN 命令: run{ sql “alter tablespace users offline immediate”; restore tablespace users; recover tablespace users; sql “alter tablespace users online”; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 112 } 使用 RMAN 重新定位表空间,如果由于磁盘故障而无法访问某一数据文件,则需要将 其还原到一个新位置或切换到现有的映像副本。 如果由于某个驱动器的磁盘空间不足,或需要重新组织数据库来 提高性能,因而您需要 重新定位表空间,上述过程也非常有用。下面看一个例子: 当前,u03 已经损坏,但数据库仍然打开。有时用户会抱怨无法访问编号为 3 的数据 文件中的信息。按照以下过程操作可将该数据文件还原到一个新位置: 1. 使用以下命令检查 u03 上数据文件的位置和大小: SQL> SELECT file#, name, bytes FROM v$datafile; FILE# NAME BYTES ----- ------------------------ ---------- 1 /ORADATA/u01/system01.dbf 120586240 2 /ORADATA/u02/undotbs.dbf 31457280 3 /ORADATA/u03/users01.dbf 5242880 ... 确定 u04 上是否有足够的空间来容纳数据文件 3。 2. 确保文件(如果需要,则为表空间)处于脱机状态,以便可以使用 RESTORE 命令成 功还原。 3. 因为文件已复制到一个新位置(使用 SET NEWNAME 命令),所以必须使用 SWITCH 命令通知 Oracle 服务器新的文件位置,以使该文件成为当前文 件。 4. 使用 RECOVER 命令开始将增量备份、累积备份、归档重做日志文件和联机重做日志 的组合应用于已还原的文件,以便使数据库同步。 5. 完成恢复后,使数据文件联机。通知用户数据库可以使用,需要重新输入系统发生故 障前未提交的所有数据。 可以使用以下命令: RUN{ SQL “alter tablespace users offline immediate”; SET NEWNAME FOR datafile ‘/ORADATA/u03/users01.dbf’ to ‘/ORADATA/u04/users01.dbf’; #Specify where to restore the file RESTORE (tablespace users); #Restore the datafile SWITCH datafile 3;#Update the control file and recovery catalog RECOVER TABLESPACE users; #Recover the tablespace SQL “alter tablespace tbs1 online”;} 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 113 7.2 RMAN不完全恢复 本节主要讲述使用 RMAN 进行基于时间、基于序号、基于 SCN 的不完全恢复。 7.2.1 使用RMAN进行不完全 恢复的过程 1. 装载数据库。 2. 为并行化分配多个通道。 3. 还原所有数据文件。 4. 使用 UNTIL TIME、UNTIL SEQUENCE 或 UNTIL SCN 恢复数据库。 5. 使用 RESETLOGS 打开数据库。 6. 执行整体数据库备份。 不完全恢复的还原和恢复进程的步骤和语法与完全恢复相同,只是需要从过去的备份中 还原所有数据文件。 目标数据库必须处于已装载的状态。要还原的文件必须处于脱机状态。只有在备份是通 过 RMAN 生成或注册的情况下,才能使用 RMAN 进行还原。 第二节 RMAN 不完全恢复 使用 RMAN 进行不完全恢复的过程,与手动的不完 全恢复基本是一样的,只是不用再手动的查找备份文 件在哪里,只需一条 restore 命令,RMAN 会自动的根 据记录的备份信息,查找应该到哪里寻找恢复用的备 份片。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 114 7.2.2 使用UNTIL TIME 进行不完全数据库恢复 使用 UNTIL TIME 进行 RMAN 不完全恢复的示例,在 2000 年 12 月 9 日星期二夜间 12 点,确定 EMPLOYEES 表被删除后,立即关闭数据库并开始恢复。已知故障发生的大 概时间,并且上午 11 点 44 分以来没有更改过数据库结构。在此情况下,可以使用 UNTIL TIME 方法: 1. 如果目标数据库已打开,则彻底关闭它。 2. 装载目标数据库。不要在恢复期间备份数据库。 3. 确保 NLS_LANG 和 NLS_DATE_FORMAT 环境变量已正确设置: $NLS_LANG=american $NLS_DATE_FORMAT=’YYYY-MM-DD:HH24:MI:SS’ 4. 启动恢复管理器并连接至目标数据库。 $rman target rman/rman@DB00 5. 可分配多个通道以改善性能: RMAN> run {allocate channel c1 type DISK; allocate channel c2 type DISK; 6. 指定使用 RMAN 命令从备份恢复和还原所有数据文件的时间。RMAN 根据 SET UNTIL 命令选择正确的文件: RMAN> ... set until time = ‘2000-12-09:11:44:00’; RMAN> ... restore database; 注:如果需要将归档重做日志文件还原到新位置,则可使用 RMAN SET ARCHIVELOG DESTINATION TO 命令。 7. 将数据库恢复到 SET UNTIL 命令中指定的时间: RMAN> ... recover database; 8. 使用 RESETLOGS 选项打开数据库: RMAN> ... alter database open resetlogs; } 9. 确认表存在,然后执行备份。 10. 通知用户数据库可以使用,需要重新输入系统发生故障前未提交的所有数据。 11. 如果使用恢复目录,则注册数据库的新复本: RMAN> reset database; 7.2.3 使用UNTIL SEQUENCE 进行不完全数据库恢复 使用 UNTIL SEQUENCE 进行 RMAN 不完全恢复的示例,UNTIL SEQUENCE 子句指 定重做日志序列号和线程号的上限。 RMAN 对日志序列号小于指定日志序列号的文件执行 操作。以上示例假定日志序列号 120 由于磁盘损坏而丢失,需要使用可用的归档重做日志 恢复数据库。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 115 RMAN> RUN { 2> SET UNTIL SEQUENCE 120 THREAD 1; 3> ALTER DATABASE MOUNT; 4> RESTORE DATABASE; 5> RECOVER DATABASE; # recovers through log 119 6> ALTER DATABASE OPEN RESESTLOGS; 7> } 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航www.enhan.com.cn 武汉引航www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 116 第 8 章 备份恢复示例 第 八 章 备份恢复示例 非归档模式下的备份与恢复 归档模式下丢失或损坏一个数据文件 丢失多个数据文件,实现整库恢复 不完全恢复 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 117 8.1 非归档模式下的备份与恢复 备份方案:采用 OS 冷备份 1.连接数据库并创建测试表 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2.备份数据库 SQL> @coldbak.sql 或在 DOS 下 svrmgrl @coldbak.sql 3.再插入记录 第 一 节 非归档模式下的备份与恢复 非归档模式下的备份以冷备为主,可以适当采用 RMAN 的增量备份恢复。总的来说,除非有其他方法可 以保证数据的安全,或者数据的安全性并不是非常重 要,不要使用非归档模式。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 118 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test; A --------------------------------------- 1 2 4.关闭数据库 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. 5.毁坏一个或多个数据文件,如删除 user01.dbf C:\>del D:\ORACLE\ORADATA\TEST\USERS01.DBF 模拟媒体毁坏 6.重新启动数据库,会发现如下错误 SQL> startup ORACLE instance started. Total System Global Area 102020364 bytes Fixed Size 70924 bytes Variable Size 85487616 bytes Database Buffers 16384000 bytes Redo Buffers 77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USERS01.DBF' 在报警文件中,会有更详细的信息 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USERS01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 119 7.拷贝备份复原到原来位置 (restore 过程) C:\>xcopy d:\database\*.* d:\oracle\oradata\test/H/R/S 8.打开数据库,检查数据 SQL> alter database open; Database altered. SQL> select * from test; A --------------------------------------- 1 这里可以发现,数据库恢复成功,但在备份之后与崩溃之前的数据丢失了。 说明: 1、非归档模式下的恢复方案可选性很小,一般情况下只能有一种恢复方式,就是数据 库的冷备份的完全恢复,仅仅需要拷贝原来的备份就可以(restore),不需要 recover。 2、这种情况下的恢复,可以完全恢复到备份的点上,但是可能是丢失数据的,在备份 之后与崩溃之前的数据将全部丢失。 3、不管毁坏了多少数据文件或是联机日志或是控制文件,都可以通过这个办法恢复, 因为这个恢复过程是 Restore 所有的冷备份文件,而这个备份点上的所有文件是一致的,与 最新的数据库没有关系,就好比把数据库又放到了一个以前的“点”上。 4、对于非归档模式下,最好的办法就是采用 OS 的冷备份,建议不要用 RMAN 来作冷 备份,效果不好,因为 RMAN 不备份联机日志,restore 不能根本解决问题。 5、如果没有备份联机日志,如 RMAN 的备份,就需要利用不完全恢复(until cancel)的 方法来重新创建联机日志文件。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 120 8.2 归档模式下丢失或损坏一个数据文件 8.2.1 OS备份方案 在归档方式下损坏或丢失一个数据文件,如果存在相应的备份与该备份以来的归档日 志,恢复还是比较简单的,可以作到尽量少的 Down 机时间,并能作到数据库的完全恢复。 1、连接数据库,创建测试表并插入记录 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int) tablespace users; Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 第 二 节 归档模式下丢失或损坏数据文件 本节用实例分别展示了使用 OS 手动备份恢复和 RMAN 自动管理备份恢复下,丢失或损坏数据文件的恢 复方法。 通过此实例,我们可以明显的看到,使用 RMAN 和 手动备份恢复在操作上的区别。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 121 2、备份数据库 SQL> @hotbak.sql 或在 DOS 下 svrmgrl @hotbak.sql 3、继续在测试表中插入记录 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test; A --------------------------------------- 1 2 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. 4、关闭数据库,模拟丢失数据文件 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down C:\>del D:\ORACLE\ORADATA\TEST\USERS01.DBF 模拟媒体毁坏 5、启动数据库错误,脱机该数据文件 SQL> startup ORACLE instance started. Total System Global Area 102020364 bytes Fixed Size 70924 bytes Variable Size 85487616 bytes Database Buffers 16384000 bytes Redo Buffers 77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USERS01.DBF' 还可以查看报警文件(见上一个恢复案例)或动态视图 v$recover_file 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 122 如 SQL> select * from v$recover_file; FILE# ONLINE ERROR CHANGE# TIME ---------- ------- ------------------ ---------- ----------- 3 ONLINE 1013500 2003-05-07 脱机数据文件 SQL> alter database datafile 3 offline drop; Database altered. 6、打开数据库,拷贝备份回来 (restore),恢复(recover)该数据文件,并联机 SQL> alter database open; Database altered. 拷贝备份从备份处 copy d:\databak\ users01.dbf d:\oracle\oradata\test; 恢复该数据文件 SQL> recover datafile 3; ORA-00279: change 1053698 generated at 05/07/2003 17:51:26 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00304.ARC ORA-00280: change 1053698 for thread 1 is in sequence #304 Specify log: {=suggested | filename | AUTO | CANCEL} AUTO ORA-00279: change 1053701 generated at 05/07/2003 17:51:39 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00305.ARC ORA-00280: change 1053701 for thread 1 is in sequence #305 ORA-00278: log file 'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00304.ARC' no longer needed for this recovery Log applied. Media recovery complete. 恢复成功,联机该数据文件 SQL> alter database datafile 3 online; Database altered. 7、检查数据库的数据(完全恢复) SQL> select * from test; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 123 A --------------------------------------- 1 2 说明: 1、采用热备份,需要运行在归档模式下,可以实现数据库的完全恢复,也就是说,从 备份后到数据库崩溃时的数据都不会丢失。 2、可以采用全备份数据库的方式备份,对于特殊情况,也可以只备份特定的数据文件, 如只备份用户表空间(一般情况下对于某些写特别频繁的数据文件,可以单独加大备份频率) 3、如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个 一个数据文件的 恢复方法(第 5 步中需要对数据文件一一脱机,第 6 步中需要对数据文件分别恢复),也可 以采用整个数据库的恢复方法。 4、如果是系统表空间的损坏,不能采用此方法 8.2.2 RMAN备份方案 RMAN 也可以进行联机备份,而且备份与恢复方法将比 OS 备份更简单可靠。 1、连接数据库,创建测试表并插入记录 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int) tablespace users; Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、备份数据库表空间 users C:\>rman Recovery Manager: Release 8.1.6.0.0 - Production RMAN> connect rcvcat rman/rman@back RMAN-06008: connected to recovery catalog database RMAN> connect target internal/virpure RMAN-06005: connected to target database: TEST (DBID=1788174720) RMAN> run{ 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 124 2> allocate channel c1 type disk; 3> backup tag 'tsuser' format 'd:\backup\tsuser_%u_%s_%p' 4> tablespace users; 5> release channel c1; 6> } RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=16 devtype=DISK RMAN-03022: compiling command: backup RMAN-03025: performing implicit partial resync of recovery catalog RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03023: executing command: backup RMAN-08008: channel c1: starting full datafile backupset RMAN-08502: set_count=5 set_stamp=494177612 creation_time=16-MAY-03 RMAN-08010: channel c1: specifying datafile(s) in backupset RMAN-08522: input datafile fno=00003 name=D:\ORACLE\ORADATA\TEST\USER01.DBF RMAN-08013: channel c1: piece 1 created RMAN-08503: piece handle=D:\BACKUP\TSUSER_05EN93AC_5_1 comment=NONE RMAN-08525: backup set complete, elapsed time: 00:00:01 RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 RMAN> 3、继续在测试表中插入记录 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 125 SQL> select * from test; A --------------------------------------- 1 2 SQL> alter system switch logfile; System altered. SQL>r 1* alter system switch logfile; System altered. 4、关闭数据库,模拟丢失数据文件 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down C:\>del D:\ORACLE\ORADATA\TEST\USER01.DBF 5、启动数据库,检查错误 SQL> startup ORACLE instance started. Total System Global Area 102020364 bytes Fixed Size 70924 bytes Variable Size 85487616 bytes Database Buffers 16384000 bytes Redo Buffers 77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\ORACLE\ORADATA\TEST\USER01.DBF' 6、先打开数据库 SQL> alter database datafile 3 offline drop; Database altered. SQL> alter database open; Database altered. 7、恢复该表空间 恢复脚本可以是恢复单个数据文件 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 126 run{ allocate channel c1 type disk; restore datafile 3; recover datafile 3; sql 'alter database datafile 3 online'; release channel c1; } 也可以是,恢复表空间 run{ allocate channel c1 type disk; restore tablespace users; recover tablespace users; sql 'alter database datafile 3 online'; release channel c1; } 过程如下: C:\>rman Recovery Manager: Release 8.1.6.0.0 - Production RMAN> connect rcvcat rman/rman@back RMAN-06008: connected to recovery catalog database RMAN> connect target internal/virpure RMAN-06005: connected to target database: TEST (DBID=1788174720) RMAN> run{ 2> allocate channel c1 type disk; 3> restore datafile 3; 4> recover datafile 3; 5> sql 'alter database datafile 3 online'; 6> release channel c1; 7> } RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=13 devtype=DISK RMAN-03022: compiling command: restore RMAN-03022: compiling command: IRESTORE RMAN-03023: executing command: IRESTORE 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 127 RMAN-08016: channel c1: starting datafile backupset restore RMAN-08502: set_count=5 set_stamp=494177612 creation_time=16-MAY-03 RMAN-08089: channel c1: specifying datafile(s) to restore from backup set RMAN-08523: restoring datafile 00003 to D:\ORACLE\ORADATA\TEST\USER01.DBF RMAN-08023: channel c1: restored backup piece 1 RMAN-08511: piece handle=D:\BACKUP\TSUSER_05EN93AC_5_1 tag=TSUSER params=NULL RMAN-08024: channel c1: restore complete RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: recover RMAN-03022: compiling command: recover(1) RMAN-03022: compiling command: recover(2) RMAN-03022: compiling command: recover(3) RMAN-03023: executing command: recover(3) RMAN-08054: starting media recovery RMAN-03022: compiling command: recover(4) RMAN-06050: archivelog thread 1 sequence 332 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00332.ARC RMAN-06050: archivelog thread 1 sequence 333 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00333.ARC RMAN-06050: archivelog thread 1 sequence 334 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00334.ARC RMAN-03023: executing command: recover(4) RMAN-08515: archivelog filename=D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00332.ARC thread=1 sequence=332 RMAN-08055: media recovery complete RMAN-03022: compiling command: sql RMAN-06162: sql statement: alter database datafile 3 online RMAN-03023: executing command: sql RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 RMAN> 8、检查数据是否完整 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 © 2005-2008 UPLOOKINGTechnology Co., Ltd. Page -62113016/17 400-700-0056 LI-193 Oracle 备份与恢复 128 SQL> alter database open; Database altered. SQL> select * from test; A --------------------------------------- 1 2 说明: 1、RMAN 也可以实现单个表空间或数据文件的恢复,恢复过程可以在 mount 下或 open 方式下,如果在 open 方式下恢复,可以减少 down 机时间。 2、如果损坏的是一个数据文件,建议 offline 并在 open 方式下恢复 。 3、这里可以看到,RMAN 进行数据文件与表空间恢复的时候,代码都比较简单,而且 能保证备份与恢复的可靠性,所以建议采用 RMAN 的备份与恢复。 8.3 丢失多个数据文件,实现整个数据库的恢复 第 三 节 丢失多个数据文件,实现 整个数据库的恢复 本节用实例分别展示了使用 OS 手动备份恢复和 RMAN 自动管理备份恢复下,丢失或损坏所有数据文件 的恢复方法。 在做实例的同时,注意体会 RMAN 和手动恢复的异 同与各自的优缺点。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 129 8.3.1 OS备份方案 OS 备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复 1、连接数据库,创建测试表并插入记录 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、备份数据库,备份除临时数据文件后的所数据文件 SQL> @hotbak.sql 或在 DOS 下 svrmgrl @hotbak.sql 3、继续在测试表中插入记录 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test; A 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 130 --------------------------------------- 1 2 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. 4、关闭数据库,模拟丢失数据文件 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down C:\>del D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF C:\>del D:\ORACLE\ORADATA\TEST\INDX01.DBF C:\>del D:\ORACLE\ORADATA\TEST\TOOLS01.DBF C:\>del D:\ORACLE\ORADATA\TEST\RBS01.DBF 模拟媒体毁坏(这里删除多个数据文件) 5、启动数据库,检查错误 SQL> STARTUP ORACLE instance started. Total System Global Area 102020364 bytes Fixed Size 70924 bytes Variable Size 85487616 bytes Database Buffers 16384000 bytes Redo Buffers 77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: 'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF' 详细信息可以查看报警文件 ORA-1157 signalled during: ALTER DATABASE OPEN... Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: 'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF' ORA-27041: unable to open file 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 131 OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件。 Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: 'D:\ORACLE\ORADATA\TEST\RBS01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件。 Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: 'D:\ORACLE\ORADATA\TEST\TOOLS01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件。 Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 6 - see DBWR trace file ORA-01110: data file 6: 'D:\ORACLE\ORADATA\TEST\INDX01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件。 通过查询 v$recover_file 可以看到 SQL> select * from v$recover_file; FILE# ONLINE ERROR CHANGE# TIME ---------- ------- ------------------ ---------- ----------- 1 ONLINE FILE NOT FOUND 0 2 ONLINE FILE NOT FOUND 0 5 ONLINE FILE NOT FOUND 0 6 ONLINE FILE NOT FOUND 0 有四个数据文件需要恢复 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 132 6、拷贝备份回到原地点 (restore),开始恢复数据库 (recover) restore 过程: C:\>copy D:\DATABAK\SYSTEM01.DBF D:\ORACLE\ORADATA\TEST\ C:\>copy D:\DATABAK\TEST\INDX01.DBF D:\ORACLE\ORADATA\TEST\ C:\>copy D:\DATABAK\TEST\TOOLS01.DBF D:\ORACLE\ORADATA\TEST\ C:\>copy D:\DATABAK\TEST\RBS01.DBF.DBF D:\ORACLE\ORADATA\TEST\ Recover 过程: SQL> recover database; ORA-00279: change 1073849 generated at 05/08/2003 08:58:35 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00311.ARC ORA-00280: change 1073849 for thread 1 is in sequence #311 Specify log: {=suggested | filename | AUTO | CANCEL} auto ORA-00279: change 1073856 generated at 05/08/2003 09:03:27 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00312.ARC ORA-00280: change 1073856 for thread 1 is in sequence #312 ORA-00278: log file 'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00311.ARC' no longer needed for this recovery ORA-00279: change 1073858 generated at 05/08/2003 09:11:43 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00313.ARC ORA-00280: change 1073858 for thread 1 is in sequence #313 ORA-00278: log file 'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00312.ARC' no longer needed for this recovery ORA-00279: change 1073870 generated at 05/08/2003 09:11:46 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00314.ARC ORA-00280: change 1073870 for thread 1 is in sequence #314 ORA-00278: log file 'D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00313.ARC' no 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 133 longer needed for this recovery Log applied. Media recovery complete. 7、打开数据库,检查数据库的数据(完全恢复) SQL> alter database open; Database altered. SQL> select * from test; A --------------------------------------- 1 2 说明: 1、只要有备份与归档存在,就可以实现数据库的完全恢复(不丢失数据) 2、适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复 3、恢复过程在 mount 下进行,如果恢复成功,再打开数据库, down 机时间可能比较长 一些。 8.3.2 RMAN备份方案 RMAN 备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复 1、连接数据库,创建测试表并插入记录 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、备份数据库 DOS 下 C:>\ rman cmdfile=bakup.rcv msglog=backup.log; 以下是 backup.log 内容。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 134 Recovery Manager: Release 8.1.6.0.0 - Production RMAN> # script:bakup.rcv 2> # creater:chenjiping 3> # date:5.8.2003 4> # desc:backup all database datafile in archive with rman 5> 6> #connect database 7> connect rcvcat rman/rman@back; 8> connect target internal/virpure; 9> 10> #start backup database 11> run{ 12> allocate channel c1 type disk; 13> backup full tag 'dbfull' format 'd:\backup\full%u_%s_%p' database 14> include current controlfile; 15> sql 'alter system archive log current'; 16> release channel c1; 17> } 18> #end 19> RMAN-06008: connected to recovery catalog database RMAN-06005: connected to target database: TEST (DBID=1788174720) RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=15 devtype=DISK RMAN-03022: compiling command: backup RMAN-03023: executing command: backup RMAN-08008: channel c1: starting full datafile backupset RMAN-08502: set_count=4 set_stamp=494074368 creation_time=15-MAY-03 RMAN-08010: channel c1: specifying datafile(s) in backupset RMAN-08522: input datafile fno=00002 name=D:\ORACLE\ORADATA\TEST\RBS01.DBF RMAN-08522: input datafile fno=00001 name=D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF RMAN-08011: including current controlfile in backupset RMAN-08522: input datafile fno=00005 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 135 name=D:\ORACLE\ORADATA\TEST\TOOLS01.DBF RMAN-08522: input datafile fno=00004 name=D:\ORACLE\ORADATA\TEST\TEMP01.DBF RMAN-08522: input datafile fno=00006 name=D:\ORACLE\ORADATA\TEST\INDX01.DBF RMAN-08522: input datafile fno=00003 name=D:\ORACLE\ORADATA\TEST\USER01.DBF RMAN-08013: channel c1: piece 1 created RMAN-08503: piece handle=D:\BACKUP\FULL04EN5UG0_4_1 comment=NONE RMAN-08525: backup set complete, elapsed time: 00:01:16 RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: sql RMAN-06162: sql statement: alter system archive log current RMAN-03023: executing command: sql RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 Recovery Manager complete. 到这里表示备份成功。 3、继续在测试表中插入记录 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test; A --------------------------------------- 1 2 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. 4、关闭数据库,模拟丢失数据文件 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 136 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down C:\>del D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF C:\>del D:\ORACLE\ORADATA\TEST\INDX01.DBF C:\>del D:\ORACLE\ORADATA\TEST\TOOLS01.DBF C:\>del D:\ORACLE\ORADATA\TEST\RBS01.DBF 5、启动数据库,检查错误 SQL> STARTUP ORACLE instance started. Total System Global Area 102020364 bytes Fixed Size 70924 bytes Variable Size 85487616 bytes Database Buffers 16384000 bytes Redo Buffers 77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: 'D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF' 查询 v$recover_file SQL> select * from v$recover_file; FILE# ONLINE ERROR CHANGE# TIME ---------- ------- ------------------ ---------- ----------- 1 ONLINE FILE NOT FOUND 0 2 ONLINE FILE NOT FOUND 0 5 ONLINE FILE NOT FOUND 0 6 ONLINE FILE NOT FOUND 0 可以知道有四个数据文件需要恢复 6、利用 RMAN 进行恢复 C:\>rman Recovery Manager: Release 8.1.6.0.0 - Production RMAN> connect rcvcat rman/rman@back RMAN-06008: connected to recovery catalog database RMAN> connect target internal/virpure RMAN-06005: connected to target database: TEST (DBID=1788174720) 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 137 RMAN> run{ 2> allocate channel c1 type disk; 3> restore database; 4> recover database; 5> sql 'alter database open'; 6> release channel c1; 7> } RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=17 devtype=DISK RMAN-03022: compiling command: restore RMAN-03025: performing implicit partial resync of recovery catalog RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: IRESTORE RMAN-03023: executing command: IRESTORE RMAN-08016: channel c1: starting datafile backupset restore RMAN-08502: set_count=4 set_stamp=494074368 creation_time=15-MAY-03 RMAN-08089: channel c1: specifying datafile(s) to restore from backup set RMAN-08523: restoring datafile 00001 to D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF RMAN-08523: restoring datafile 00002 to D:\ORACLE\ORADATA\TEST\RBS01.DBF RMAN-08523: restoring datafile 00003 to D:\ORACLE\ORADATA\TEST\USER01.DBF RMAN-08523: restoring datafile 00004 to D:\ORACLE\ORADATA\TEST\TEMP01.DBF RMAN-08523: restoring datafile 00005 to D:\ORACLE\ORADATA\TEST\TOOLS01.DBF RMAN-08523: restoring datafile 00006 to D:\ORACLE\ORADATA\TEST\INDX01.DBF RMAN-08023: channel c1: restored backup piece 1 RMAN-08511: piece handle=D:\BACKUP\FULL04EN5UG0_4_1 tag=DBFULL params=NULL RMAN-08024: channel c1: restore complete RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: recover RMAN-03022: compiling command: recover(1) RMAN-03022: compiling command: recover(2) 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 138 RMAN-03022: compiling command: recover(3) RMAN-03023: executing command: recover(3) RMAN-08054: starting media recovery RMAN-03022: compiling command: recover(4) RMAN-06050: archivelog thread 1 sequence 327 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00327.ARC RMAN-06050: archivelog thread 1 sequence 328 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00328.ARC RMAN-06050: archivelog thread 1 sequence 329 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00329.ARC RMAN-06050: archivelog thread 1 sequence 330 is already on disk as file D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00330.ARC RMAN-03023: executing command: recover(4) RMAN-08515: archivelog filename=D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00327.ARC thread=1 sequence=327 RMAN-08515: archivelog filename=D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00328.ARC thread=1 sequence=328 RMAN-08055: media recovery complete RMAN-03022: compiling command: sql RMAN-06162: sql statement: alter database open RMAN-03023: executing command: sql RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 RMAN> 7、检查数据库的数据(完全恢复) SQL> select * from test; A --------------------------------------- 1 2 说明: 1、只要有备份与归档存在, RMAN 也可以实现数据库的完全恢复(不丢失数据) 2、同 OS 备份数据库恢复,适合于丢失大量数据文件,或包含系统数据文件在内 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 139 的数据库的恢复 3、目标数据库在 mount 下进行,如果恢复成功,再打开数据库。 4、RMAN 的备份与恢复命令相对比较简单并可靠,建议有条件的话,都采用 RMAN 进行数据库的备份。 8.4 不完全恢复案例 第 四 节 不完全恢复案例 不完全恢复,是应对误操作的重要的恢复手段。除 误操作外,对于有些情况的介质损坏,也必须使用不 完全恢复才能解决,比如当前联机重做日志损坏。 不完全恢复将会丢失部分数据,这从它的名字“不 完全”上,也可以看的出来。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 140 8.4.1 OS备份下的基于时间的恢复 不完全恢复可以分为基于时间的恢复,基于改变的恢复与基于撤消的恢复,这里已基于 时间的恢复为例子来说明不完全恢复过程。 基于时间的恢复可以不完全恢复到现在时间之前的某一个时间,对于某些误操作,如删 除了一个数据表,可以在备用恢复环境上恢复到表的删除时间之前,然后把该表导出到正式 环境,避免一个人为的错误。 1、连接数据库,创建测试表并插入记录 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、备份数据库,这里最好备份所有的数据文件,包括临时数据文件 SQL> @hotbak.sql 或在 DOS 下 svrmgrl @hotbak.sql 或冷备份也可以 3、删除测试表,假定删除前的时间为 T1,在删除之前,便于测试,继续插入数据并应用到 归档。 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test; A --------------------------------------- 1 2 SQL> alter system switch logfile; Statement processed. SQL> alter system switch logfile; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 141 Statement processed. SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2003-05-21 14:43:01 SQL> drop table test; Table dropped. 4、准备恢复到时间点 T1,找回删除的表,先关闭数据库 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. 5、拷贝刚才备份的所有数据文件回来 C:\>copy D:\DATABAK\*.DBF D:\ORACLE\ORADATA\TEST\ 6、启动到 mount 下 SQL> startup mount; ORACLE instance started. Total System Global Area 102020364 bytes Fixed Size 70924 bytes Variable Size 85487616 bytes Database Buffers 16384000 bytes Redo Buffers 77824 bytes Database mounted. 7、开始不完全恢复数据库到 T1 时间 SQL> recover database until time '2003-05-21:14:43:01'; ORA-00279: change 30944 generated at 05/21/2003 14:40:06 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00191.ARC ORA-00280: change 30944 for thread 1 is in sequence #191 Specify log: {=suggested | filename | AUTO | CANCEL} auto Log applied. Media recovery complete. 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 142 8、打开数据库,检查数据 SQL> alter database open resetlogs; Database altered. SQL> select * from test; A --------------------------------------- 1 2 说明: 1、不完全恢复最好备 份所有的数据,冷备份亦可,因为恢复过程是从备份点往后恢复 的,如果因为其中一个数据文件的时间戳 (SCN)大于要恢复的时间点,那么恢复都是不可能 成功的。 2、不完全恢复有三种方式,过程都一样,仅仅是 recover 命令有所不一样,这里用基于 时间的恢复作为示例。 3、不完全恢复之后,都必须用 resetlogs 的方式打开数据库,建议马上再做一次全备份, 因为 resetlogs 之后再用以前的备份恢复是很难了。 4、以上是在删除之前获得时间,但是实际应用中,很难知道删除之前的实际时间,但 可以采用大致时间即可,或可以采用分析日志文件(logmnr),取得精确的需要恢复的时间。 5、一般都是在测试机后备用机器上采用这种不完全恢复,恢复之后导出 /导入被误删的 表回生产系统 8.4.2 RMAN备份下的基于改变的恢复 以上用 OS 备份说明了一个基于时间的恢复,现在用 RMAN 说明一个基于改变的恢复 1、连接数据库,创建测试表并插入记录 SQL*Plus: Release 10.2.0.3.0 - Production on Tue May 6 13:46:32 2003 (c) Copyright 1999 Oracle Corporation. All rights reserved. SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 143 2、备份数据库 C:\>rman Recovery Manager: Release 8.1.6.0.0 - Production RMAN> connect rcvcat rman/rman@back RMAN-06008: connected to recovery catalog database RMAN> connect target internal/virpure RMAN-06005: connected to target database: TEST (DBID=874705288) RMAN> run{ 2> allocate channel c1 type disk; 3> backup full tag 'dbfull' format 'd:\backup\full%u_%s_%p' database 4> include current controlfile; 5> sql 'alter system archive log current'; 6> release channel c1; 7> } RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=12 devtype=DISK RMAN-03022: compiling command: backup RMAN-03023: executing command: backup RMAN-08008: channel c1: starting full datafile backupset RMAN-08502: set_count=1 set_stamp=494607834 creation_time=21-MAY-03 RMAN-08010: channel c1: specifying datafile(s) in backupset RMAN-08522: input datafile fno=00001 name=D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF RMAN-08011: including current controlfile in backupset RMAN-08522: input datafile fno=00002 name=D:\ORACLE\ORADATA\TEST\RBS01.DBF RMAN-08522: input datafile fno=00003 name=D:\ORACLE\ORADATA\TEST\USERS01.DBF RMAN-08522: input datafile fno=00004 name=D:\ORACLE\ORADATA\TEST\TEMP01.DBF RMAN-08522: input datafile fno=00005 name=D:\ORACLE\ORADATA\TEST\TOOLS01.DBF RMAN-08522: input datafile fno=00006 name=D:\ORACLE\ORADATA\TEST\INDX01.DBF 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 144 RMAN-08013: channel c1: piece 1 created RMAN-08503: piece handle=D:\BACKUP\FULL01ENM7EQ_1_1 comment=NONE RMAN-08525: backup set complete, elapsed time: 00:00:16 RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: sql RMAN-06162: sql statement: alter system archive log current RMAN-03023: executing command: sql RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 RMAN> 3、删除测试表,在删除之前,便于测试,继续插入数据并应用到归档,并获取删除前的 scn 号。 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test; A --------------------------------------- 1 2 SQL> alter system switch logfile; Statement processed. SQL> alter system switch logfile; Statement processed. SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe; SCN ---------- 31014 SQL> drop table test; 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 145 Table dropped. 4、准备恢复到 SCN 31014,先关闭数据库,然后启动到 mount 下 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started. Total System Global Area 53126412 bytes Fixed Size 70924 bytes Variable Size 26763264 bytes Database Buffers 26214400 bytes Redo Buffers 77824 bytes Database mounted. 5、开始恢复到改变点 SCN 31014 RMAN> run{ 2> allocate channel c1 type disk; 3> restore database; 4> recover database until scn 31014; 5> sql 'ALTER DATABASE OPEN RESETLOGS'; 6> release channel c1; 7> } RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=10 devtype=DISK RMAN-03022: compiling command: restore RMAN-03022: compiling command: IRESTORE RMAN-03023: executing command: IRESTORE RMAN-08016: channel c1: starting datafile backupset restore RMAN-08502: set_count=1 set_stamp=494613682 creation_time=21-MAY-03 RMAN-08089: channel c1: specifying datafile(s) to restore from backup set RMAN-08523: restoring datafile 00001 to D:\ORACLE\ORADATA\TEST\SYSTEM01.DBF RMAN-08523: restoring datafile 00002 to D:\ORACLE\ORADATA\TEST\RBS01.DBF RMAN-08523: restoring datafile 00003 to D:\ORACLE\ORADATA\TEST\USERS01.DBF 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 146 RMAN-08523: restoring datafile 00004 to D:\ORACLE\ORADATA\TEST\TEMP01.DBF RMAN-08523: restoring datafile 00005 to D:\ORACLE\ORADATA\TEST\TOOLS01.DBF RMAN-08523: restoring datafile 00006 to D:\ORACLE\ORADATA\TEST\INDX01.DBF RMAN-08023: channel c1: restored backup piece 1 RMAN-08511: piece handle=D:\BACKUP\FULL01ENMD5I_1_1 tag=DBFULL params=NULL RMAN-08024: channel c1: restore complete RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: recover RMAN-03022: compiling command: recover(1) RMAN-03022: compiling command: recover(2) RMAN-03022: compiling command: recover(3) RMAN-03023: executing command: recover(3) RMAN-08054: starting media recovery RMAN-03022: compiling command: recover(4) RMAN-06050: archivelog thread 1 sequence 191 is already on disk as file D:\ORACL E\ORADATA\TEST\ARCHIVE\TESTT001S00191.ARC RMAN-06050: archivelog thread 1 sequence 192 is already on disk as file D:\ORACL E\ORADATA\TEST\ARCHIVE\TESTT001S00192.ARC RMAN-03023: executing command: recover(4) RMAN-08515: archivelog filename=D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00191.AR C thread=1 sequence=191 RMAN-08515: archivelog filename=D:\ORACLE\ORADATA\TEST\ARCHIVE\TESTT001S00192.AR C thread=1 sequence=192 RMAN-08055: media recovery complete RMAN-03022: compiling command: sql RMAN-06162: sql statement: ALTER DATABASE OPEN RESETLOGS RMAN-03023: executing command: sql RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 6、检查数据 Database altered. 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航 Page LI-193 Oracle 备份与恢复 147 SQL> select * from test; A --------------------------------------- 1 2 可以看到,表依然存在 说明: 1、RMAN 也可以实现不完全恢复,方法比 OS 备份恢复的方法更简单可靠 2、RMAN 可以基于时间,基于改变与基于日志序列的不完全恢复,基于日志序列的恢 复可以指定恢复到哪个日志序列,如 run { allocate channel ch1 type disk; allocate channel ch2 type 'sbt_tape'; set until logseq 1234 thread 1; restore controlfile to '$ORACLE_HOME/dbs/cf1.f' ; replicate controlfile from '$ORACLE_HOME/dbs/cf1.f'; alter database mount; restore database; recover database; sql "ALTER DATABASE OPEN RESETLOGS"; } 3、与所有的不完全恢复一样,必须在 mount 下,restore 所有备份数据文件,需要 resetlogs 4、基于改变的恢复比基于时 间的恢复更可靠,但是可能也更复杂,需要知道需要恢复 到哪一个改变号(SCN),在正常生产中,获取 SCN 的办法其实也有很多,如查询数据库字 典表(V$archived_log or v$log_history),或分析归档与联机日志(logmnr)等。 武汉引航信息科技有限公司 版权所有 www.enhan.com.cnoracle技术交流群:69291477 www.enhan.com.cn 武汉引航