级别: 初级 【程序编程相关:Java 应用程序的部署考虑】
【推荐阅读:执行 DB2 ASP.NET 输入验证】 【扩展信息:处理 ASP.NET Web 页面上的 】allan w. tham
db2 售前技术专家,asean techline, ibm malaysia 2004 年 9 月 不管您使用的是什么数据库管理系统,要防止数据丢失,就必须制定备份与恢复策略.本文是为具有 oracle 技术.并准备转向 ibm db2 universal database(udb)的 dba 设计的,文章解释了如何在 db2 udb for linux.unix 与 windows 上实现备份与恢复功能.此外,本文还详细比较了 db2 udb 与 oracle 上的备份与恢复.简介
通常,只有在丢失重要数据时,才会认真考虑数据库的备份与恢复.但对于每个生产系统,有必要设计与部署适当的备份与恢复策略,以避免数据丢失.如果您在转向 db2 时就已经具备 oracle 技能,那么您随时可以学习如何在 db2 udb 中进行备份与恢复.在本文中,我将讨论如何在 db2 udb for linux.unix 与 windows 上进行备份的恢复,并将对照与比较在 oracle 中如何实现这些功能.
在本文中,您将探索 oralce 与 db2 udb 的备份与恢复的以下方面:
备份与恢复的概念 用于备份与恢复的数据结构 备份与恢复选项 备份与恢复实用程序 恢复情形的场景
备份与恢复的概念
数据库的备份是数据库的副本以及一些控制信息,在出现故障的情况下,可以随时用它进行恢复.数据库备份最小化了数据丢失,能够让您使用恢复过程,从备份副本中重新构造失败的数据库.有多种类型的失败导致需要恢复数据库.但不是所有类型的失败需要进行人工交互.下面是您可能会碰到的各种类型的失败:
语句失败当应用程序中存在逻辑错误时,就会出现语句错误.出现这种失败可能有许多不同的原因,例如,语句无限循环运行.用户不具备执行某些任务所需的正确特权(导致有效的语句失败),或者由于空间不足而导致的插入失败等.
在 oracle 中,除了执行少量的任务以外,解决语句失败通常不要求具备管理员权限,这些任务包括添加更多的磁盘空间.修复应用程序逻辑,或者分配恰当的用户特权. 在 db2 udb 中,语句失败的处理方式与此类似.在备份与恢复方面,解决语句失败不需要管理员权限.
用户错误对于数据库应用程序,有效但具破坏性的语句(比如删除整个工资单表中的记录.删除索赔(claims)表,或者意外删除整个数据库)可能导致长期的停机时间.要避免这些错误,就需要更多的正确培训与指导.数据定义语言(ddl)语句是不能回滚的语句.因此,如果用户的错误涉及 ddl,那么将需要采取正确的措施来恢复数据库.
例如,如果错误删除了表,那么作为管理员,您有两种选择.您可以使用备份映射的副本,并将它前滚至删除表之前的某个时间点(时间点恢复),或者您可以通过 exp 实用程序恢复逻辑备份.这两种选择都可能潜在地导致数据丢失.
当用户删除 db2 udb 中的表时,您可以执行数据库级时间点恢复,前滚至删除表之前的时间点;或者最好仍然使用表空间级的前滚操作.这样,您就不必让数据库停止服务,您的用户仍可以访问数据.在 场景一节,我们将看到这一点.
进程失败用户.服务器或后台进程的失败是由于这些进程的异常终止,或者是因为从这些进程中断开连接.失败的进程将导致无法继续完成任务.
对于 oracle 上的进程失败,无需任何人工干预,就像 oracle pmon 后台进程会定期监视这些异常终止的进程那样.而对于用户与服务器进程,pmon 将释放用户持有的锁,回滚每个未提交事件,并释放该进程正在使用的所有资源.如果异常终止一个 oracle 后台进程,那么常常需要重启实例.
在 db2 udb 上,像 db2agent 失效这样的进程失败会导致应急恢复.在应急恢复中,把提交的数据刷新到磁盘时,将回滚没有提交的事务.要启用这种自动应急恢复特性,需要验证是否把数据库配置参数 autorestart 设为 on.默认情况下,autorestart 被设为 on.
数据库实例失败数据库实例失败通常是由操作系统崩溃或停电引起的.
当 oracle 上的数据库实例失败时,不需要人工干预,因为只要您重启计算机,oracle smon 后台进程就会检测问题.然后,smon 将开始进行实例恢复.
在 db2 中,当数据库管理器与内存结构由于电源故障.磁盘损坏或网络故障而不能正常工作时,将需要通过应急恢复将 db2 恢复到一致可用的状态.要启用自动应急恢复特性,需要验证是否将数据库配置参数 autorestart 设为 on.默认情况下,autorestart 被设为 on.您也可以发出 restart database 命令来手工重启数据库.restart database 命令使用活动日志对尚未提交的更改进行回滚.已经提交但尚未刷新到磁盘的更改将被刷新到磁盘.
媒介失败当有人无意从文件系统删除了数据库文件时,就会发生媒介失败,这时,整个硬盘及其数据文件都无法正常工作,从而导致无法访问数据,有时系统还会发生纯粹的数据损坏.相对于我们已经讨论的类型,这是更加严重的一类失败.
在 oracle 中,不要求由管理员来恢复媒介失败.通常,导致媒介失败的原因是数据文件的完全丢失,或者 scn 时间戳与数据库的其余部分不同步.从这类失败中进行恢复的情况会根据具体条件有所不同,这主要取决于归档的模式及已经被损坏的数据文件.
在 db2 udb 与 oracle 中,这些失败的处理方式大致是一样的,都是通过脱机或联机备份并使用前滚操作恢复日志来完成的.
因为在所有类型的失败中,媒介失败是最复杂的,所以您必须有一个经过周密考虑的策略来计划它.本文的其余部分将致力于最后一种形式的失败的计划与恢复.
用于备份与恢复的数据结构
oracle 与 db2 udb 都有一组组成备份与恢复机制的组件.您在 图 1与 图 2 中看到的体系结构图对提供 oracle 与 db2 的备份与恢复的主要组件进行了概述.图 1. oracle 体系结构
oracle 的内存结构
缓冲区缓存 —— 为存储从物理数据文件读取的数据块而分配的内存. 共享池 —— 为存储解析的 sql 语句.pl/sql 过程的数据字典信息而分配的内存. 日志缓冲区 —— 为存储更改数据的前后映像而分配的内存.里面记录的数据项是连续的. 大型池 —— 分配给 rman 用于备份与恢复的内存.
oracle 后台进程
数据库读写器(dbwr)—— 异步地将缓冲区的脏数据写到物理数据文件中. 日志读写器(lgwr)—— 从日志缓冲区写入项目,以便重做日志文件. 检查点(ckpt)—— 将数据文件头与控制文件头与当前重做日志与检查点数同步. 归档器(arch)—— 自动化重做日志的复制.如果没有打开归档器,那么需要对重做日志进行手动归档.
oracle 数据库结构
数据文件 —— 存储数据的物理文件. 控制文件 —— 包含数据库物理结构与状态的文件,比如包含绝对路径的数据文件与日志文件的名称.文件的大小.块大小.数据文件的联机或脱机状态等.它还包含日志文件的名称与路径.文件大小与块大小. 重做日志 —— 包含更改数据的前后映像的文件.对于恢复,重做日志是必需的. 参数文件 —— 存储实例启动的参数的文件.您可以有多种启动实例的方式.oracle 首先搜索 spfile_sid.ora 是否存在.如果该文件不存在,oracle 接着会搜索 spfile.ora 参数文件.如果 spfile_sid.ora 与 spfile.ora 都不存在,oracle 将使用 init_sid.ora 参数文件. 归档日志 —— 联机重做日志的物理副本.在联机恢复中,归档日志是必需的.
接下来我们将看到 db2 udb 体系结构与结构.
图 2. db2 udb 体系结构
db2 udb 内存结构
包缓存 —— 为存储静态与动态 sql 语句而分配的内存. 缓冲池 —— 在将数据刷新到磁盘之前,为存储数据而分配的内存. 日志缓冲区 —— 在将所有对数据库的更改刷新到磁盘上的日志之前,用来存储这些更改的内存.
图 3. db2 udb 数据库结构
驱动器/目录 —— 在 create database 命令中指定的驱动器或目录. db2 实例名称 —— db2 实例所有者的名称. node0000 —— 数据库的分区数.0 表示非分区的数据库. sql00001 —— 从 1 开始的数据库 id. sqlogdir —— 数据库的默认日志目录. sqlt0000.0 —— 目录表空间 syscatspace. sqlt0001.0 —— 临时表空间 tempspace1. sqlt0002.0 —— 用户表空间 userspace1.
备份与恢复选择
对于 oracle 与 db2 udb 数据库,有两种备份与恢复模式:脱机与联机.可以用任何一种模式来进行完全与不完全恢复.脱机备份要求所有应用程序断开与数据库的连接,联机备份允许在备份的过程中继续执行事务.在选定备份模式的恢复方面,存在隐含关系,因为备份模式决定了恢复模式.我们在下面几节中会看到这一点.
顾名思义,完全恢复能够完全地恢复所有提交的事务,而不完全恢复在恢复事务时会丢失一些数据.oracle 与 db2 udb 都能让您恢复到当前时间,而且没有数据丢失,或者恢复到当前时间以前的时间,但要丢失一些数据.
通常,恢复的目标是用选定的恢复模式在业务需求与操作需求之间达成某种妥协.例如,如果数据库不是任务关键型与 24x7 型的,那么停机上一段时间与丢失一些数据可能是可以接受的,对于媒介错误,重新键入数据也可能是一种可以接受的方法.采用什么样的恢复取决于可用的备份与可用的日志,可能有时候除了执行不完全恢复以外别无选择.
有两种类型的 db2 日志记录,每种日志记录方法支持特定的恢复选项.这两种类型的日志记录是 循环与 归档日志记录.当选择使用循环日志记录(默认情况下选择这种日志记录)时,惟一的选择是执行脱机备份与版本恢复.如果您选择使用归档日志记录,并执行联机备份与前滚恢复,那么您可以恢复到数据丢失最少的那个时间点,或者恢复到结束日志的时候.
下面我们将详细分析这两种备份与恢复模式.
脱机(冷)备份
在 oracle 中,所有备份当中的最简单形式是执行脱机或冷备份.脱机备份是正常关闭数据库之后,对所有物理数据库文件执行的备份.这种备份方法最常见.使用这种形式来备份数据库是在 noarchivelog 模式下进行的,在这种模式中,如果需要进行媒介恢复,那么备份之后对数据库进行的任何更改都将是不可恢复的.... 下一页