1.1.6 数据库故障和备份解决方案

数据库难免会出现某种故障,导致实例失败,这可能是网络故障、用户错误、磁盘驱动器故障或者内存损坏。应对这种几乎无法避免的场景,最好的方法是准备一个备份和恢复计划。并且应该定期测试这个备份和恢复计划,以确保当需要用到恢复技术时,它们能够成功。

要想创建成功的备份和恢复策略,首先必须理解故障的类型,以及Oracle如何响应每种类型:一些故障不需要用户立即干预,一些则需要。使用哪种备份和恢复解决方案要取决于多种因素,包含从故障恢复的时间以及想要分配给该解决方案多少资源。对恢复基础设施的投入与数据库有一天、一个小时或一分钟不可用时造成的生产率或收入损失成比例。

故障分类

故障或错误的类型分为两大类:物理上的和逻辑上的。物理错误通常是硬件错误,或者使用数据库的应用程序的软件错误,而逻辑错误则通常发生在终端用户(数据库用户或管理员)。下面列出了故障的分类:

●语句故障:由于权限、语法或资源限制,用户的SELECT或DML语句失败。

●用户错误:用户误删了一个表或者表中错误的行。

●用户进程故障:由于客户端断开连接或者意外关闭,数据库的连接失败。

●网络故障:顾名思义,由于网络硬件或协议错误,客户端和服务器(数据库)之间的连接失败了。

●实例故障:由于bug、操作系统错误、内存损坏甚至服务器掉电,数据库实例崩溃。

●介质故障:发生了磁盘驱动器物理错误或者控制器硬件故障。

这里按照从最轻微、最容易恢复到最严重、最难恢复的顺序列出了故障分类。具体来说,语句故障是最容易恢复的,因为它们几乎总是由用户管理:重写SELECT或INSERT语句,使其不会出现语法错误!如果不小心删除了一个重要的表,那么根据被删除的表是否仍在回收站中,以及DBA是否允许用户使用各种闪回功能,该表可由用户或数据库管理员恢复。从网络、实例或介质故障恢复则必须执行多种动作,但是具体是什么动作则要取决于丢失的数据的重要性和严重性。

备份和恢复策略需要考虑到所有的故障,即使其中一些故障要比其他故障更容易恢复。例如,由于掉电而发生的实例故障。只要联机重做日志文件完整且是多路复用的,那么恢复已提交的事务相对简单,可自动完成。

Oracle备份和恢复解决方案

恢复时间目标(recovery time objective, RTO)是一个目标,在此目标时间内必须完成恢复操作,以满足客户的服务水平协议(service level agreement, SLA)。RTO的不同,决定了需要应用不同的Oracle工具和技术:

几天或几小时:如果由于自然灾害或磁盘故障,整个数据库都丢失,那么RMAN(也可以使用Oracle安全备份)可以在几天或几小时内恢复数据库。

几小时或几分钟:当数据库仍对其他用户可用时,用户或DBA均可使用各种闪回技术来恢复数据库对象。虽然需要临时关闭数据库,但是通过使用闪回数据库,DBA可将整个数据库回滚到当天早些时候或者几周以前,不过这要取决于快速恢复区可用的存储以及定义的还原点。

几分钟或几秒:如果数据库必须连续可用,关闭时间不能超过几分钟,那么Data Guard或Active Data Guard等Oracle解决方案可故障转移到一个备份数据库,而不需要DBA干预(或者只需要少量干预)。

恢复分析:无论故障类型和RTO是什么,Oracle数据恢复顾问(Data Recovery Advisor)能够方便而快速地确定故障的类型,以及从特定类型的故障恢复时可用的最快方法。

恢复管理器 恢复管理器是用来在表级别(Oracle Database 12c新增功能)、数据文件级别、表空间级别以及数据库级别备份、还原和恢复数据库的主要工具。除了备份和恢复,RMAN还有许多用途,包括将数据库克隆或复制到另一个位置。

RMAN有一个关键组件,称为快速恢复区(fast recovery area, FRA),它是保存备份和恢复对象的一个特殊位置,第2章中将详细介绍。理想情况下,这个区域是ASM中的一个磁盘组,但是也可以位于操作系统的文件系统中。无论在什么位置,它都是存储所有备份和恢复对象的一个集中区域。FRA的管理基于大小和恢复目标,而恢复目标可能指定了恢复窗口或者需要保留的备份数。

Oracle安全备份 Oracle安全备份(Oracle Secure Backup, OSB)与RMAN结合使用时,能够将FRA中的RMAN备份复制到磁带设备或者云存储中,以避免在数据中心发生灾难性故障时导致数据丢失。OSB还在操作系统级别提供了一个RMAN扩展,用来备份Linux服务器以及任何连接的存储,例如NAS设备中的存储。

Oracle Data Guard Oracle Data Guard是Oracle的高可用性(high-availability, HA)解决方案之一,用于在主数据库发生故障时确保接近实时的可用性,或者防止数据库损坏。备用数据库收到主数据库的归档重做日志文件,并维护主数据库的一个副本,除了用于灾难恢复,还可以把该副本用在其他许多场景中。例如,在计划维护窗口中,向主数据库的服务器添加新的磁盘阵列时,可把备用数据库切换为主数据库。在OLTP环境中,当执行报表功能时,可以让备用数据库临时担任主数据库的只读副本,从而释放主数据库上的资源,来实现更快的响应。这种配置是一种特殊类型的Data Guard配置,称为Active Data Guard。

一个主数据库可以更新多达30个备用数据库(如果算上LOG_ARCHIVE_DEST_n参数定义的本地归档重做日志目标,则是31个)。可以实时更新一个备用数据库,而在30分钟或更晚时间以后更新另一个备用数据库,以防止主数据库上的逻辑错误传播出去。

还有一种备用数据库称为逻辑备用数据库。逻辑备用数据库并不会连续地将归档重做日志文件应用到主数据库的物理副本上,而是只收到提交到主数据库的DML SQL语句。因此,备用数据库在逻辑上与主数据库相同,但是其物理结构与主数据库的物理结构几乎肯定不会相同。