17 高可用性
经过配置之后可以提供接近全时可用性的计算机系统被成为高可用性系统。Oracle包含了一系列的产品和特征,无论在非计划停机还是在计划停机的情况下都确保系统提供高可用性。
这章主要包含下面的内容:
*高可用性的介绍
*非计划停机的概述
*计划停机的概述
高可用性的介绍
经过配置之后可以提供接近全时可用性的计算机系统被成为高可用性系统。这样的系统通常会有冗余的硬件和软件来保证在系统故障时也能够使系统可用。设计良好的高可用性系统不存在单点故障。
Oracle包含了一系列的产品和特征,无论在非计划停机还是在计划停机的情况下都确保系统提供高可用性。
非计划停机的概述
各种情况都有可能引起非计划停机。Oracle提供下面的特征来保证在非计划停机阶段的系统可用性:
*oracle对系统故障的解决方案
*oracle对数据故障的解决方案
*灾难性的故障解决方案
*认为错误的解决方案
oracle对系统故障的解决方案
这部分覆盖了对系统故障的一些解决方案,包括下面的内容:
*快速启动故障恢复的概述
*实时应用集群的概述
oracle企业版中有快速启动故障恢复功能特征来控制实例的恢复。这种功能通过限制脏缓冲区的数量以及限制在当前最近的重做记录和上一个检查点之间所产生的重做记录的数量的方式,来减少缓存恢复所需要的时间从而使恢复时间受到限制并且是可以预料的。
快速启动恢复是基于快速启动检查点架构的。不是象传统的检查点是由事件驱动(即:日志切换)进行批量写入操作,而是快速启动检查点是增量进行的。每个DBWn进程周期地将缓存中的数据写进磁盘中去来提升检查点的位置。最早被修改的数据块将最先被写进磁盘以确保每次写入都会将检查点提升位置。快速启动检查点不再象会进行批量写操作而造成I/O的显著增长。
使用快速启动故障恢复,访问数据库的应用程序不需要等待还原,回滚阶段完成就可以将oracle数据库打开。Oracle将根据需要动态地回滚未提交的事务所锁住的数据。如果用户进程遇到一个被其他被崩溃的事务所锁住的行,然后oracle数据库将会回滚该行。回滚掉被一个查询所请求的行的影响是可以忽略的,即没有什么影响。
快速启动故障恢复是非常快速的,因为还原数据被存储在数据库中,而不是存储在日志文件中。还原一个数据块不需要对日志文件顺序扫描,这个扫描成本也是很高的。只需在数据库中确定数据块的正确版本的位置即可。
快速启动恢复能够极大地减少平均恢复时间(MTTR),对联机应用的性能影响很小。Oracle持续地评估恢复时间并且自动地调整检查点发生率来满足目标恢复时间。
实时应用集群的概述
实时应用集群数据库本身就是高可用性系统。集群(典型的RAC环境)能够为计划故障和非计划故障提供连续不间断的服务。RAC在标准的oracle特征之上也具有更高水准的可用性。所有单独的实例的高可用性特征,比如:快速启动故障恢复以及联机重组,也能应用到RAC环境中。
除了所有常规的oracle特征,RAC开发了集群所提供的冗余功能,在一个具有N个节点的集群中如果N-1个节点发生故障系统也能够提供可用性。换句话说,在集群中只要有一个可用的节点那么所有的用户就可以访问所有的数据。
数据故障的解决方案
这部分对于数据故障讲述了一些解决方案,如下:
*对于高可用性的备份和恢复特征概述
*分区概述
*透明应用故障恢复概述
对于高可用性的备份和恢复特征概述
除了快速启动故障恢复以及平均时间恢复之外,oracle也提供了一些在数据故障以及介质故障发生时的一些保护和恢复的解决方案。一个系统或者网络故障可能会阻止用户访问数据,但是没有适当备份的介质故障会导致数据丢失并且不可恢复。下面介绍主要的备份和恢复特征:
*恢复管理(RMAN)是oracle用来管理数据库的备份和恢复的工具。RMAN会决定以最有效的方法运行被请求的备份,复原或者恢复操作。RMAN和服务器自动地鉴别对数据库结构的修改并且动态地调整备份和恢复操作来适应这些变更。你可以设定在介质恢复期间用于复原日志文件的最大的磁盘空间,这样在恢复过程中有高效的磁盘管理;
*oracle回闪数据库让你快速地恢复数据库到前一个时间点上来纠正由于逻辑数据受损或者由于用户错误原因所导致的问题;
*oracle回闪查询让你查看在过去的一个时间点上的数据。你可以使用查看过去时间点上的数据并且重构那些已经被偶然的被删除或者改变的丢失的数据。开发者能够使用这个特征来在他们的应用程序中创建自助错误纠正功能,从而使终端用户可以还原和微兆时亿年个 他们的错误;
*备份信息能够被存储在一个独立的快速恢复区域。这增加了备份信息使用的灵活性,并且使查询备份信息更加容易。快速恢复区域也可以存储所有数据库的备份信息作为一个企业中心资料库,提供单独管理。
*当执行一个时间点上的恢复时,你可以不需要终止数据库就可以查询数据库。这样就可以帮助用户决定错误是否影响到关键数据或者是非关键数据,比如索引。Oracle也提供了实验恢复,即在恢复过程中如果有一个错误发生恢复就会全部回退。如果基于时间点的恢复已经进行了很长时间的话这个特点可以被用来回滚恢复;
*如果只有一个单独的数据块受损的话,然后可以使用oracle数据块级别的介质恢复来恢复这些需要恢复的数据块。相关文件的其他部分以及包含这个受损数据块的表可以仍然保持联机以及可以被访问;
*LogMiner可以让数据库管理员找到并纠正以外的数据修改。LogMiner的简单的SQL接口允许根据用户名,表,时间,更新的类型,更新值,或以上条件的组合进行查询。LogMiner还提供了用于还原错误操作的SQL语句。用户可以使用LogMiner的GUI接口来查询数据变更的历史记录。受损的日志文件可以使用LogMiner工具来查找到,从而可以恢复一些在日志文件中记录的事务。
分区技术的概述
分区技术可以将大表以及大索引分解为小的易于管理的分区,从而解决大的数据量带来的问题。使用分区表对分区表的SQL查询以及DML语句也不需要修改。但是,在区分被定义之后,DDL语句能够访问和操纵单独的分区而不是整个表或者整个索引。这就是分区对大的数据库对象的管理简单化的原因。同时分区对于应用程序是完全透明的。
透明应用故障恢复概述
透明应用故障恢复在连接失败的情况下能够使一个应用程序用户能够自动地重新连接数据库。所有的活动事务将被回滚,并且新的连接将和原来的连接完全相同,可能会连接到不同的节点上。
使用透明应用故障恢复技术,只要还有一个实例为应用程序服务用户就不会注意到连接的丢失。数据库管理员控制应用程序运行在哪个实例中并且也为每个应用程序创建一个在故障发生切换时选择实例的顺序。这种功能与RAC环境结合有很好的效果:如果一个节点发生故障,然后你能够很快地重新连接到在集群中的另一个节点上。
透明应用故障恢复所影响的元素
在正常的C/S架构下的数据库操作过程中,客户端会维护与数据库的连接以便客户端与服务端能够通信。如果服务器端故障,连接也会中断。下次客户端试图连接是4,客户端会发生一个错误。这个时候用户必须重新登陆数据库。
使用透明应用故障恢复,oracle能够自动地获取到对数据库的一个新的连接。这样就使用户能够继续工作就好象原来的连接没有出现故障过。
以下元素与活动的数据库连接有关:
*C/S数据库连接
*用户运行SQL语句所用的数据库会话
*打开游标,用于数据获取
*活动的事务
*服务端的程序变量
透明应用故障恢复能够用来复原C/S架构的数据库连接,用户的数据库会话以及复原活动的查询。为了能够复原活动数据库连接的其他元素,比如:活动事务以及服务端的包状态,应用程序代码必须能够重新运行那些发生在最后一次提交之后的语句。
RAC高可用性事件通知
OCI和JDBC客户端能够注册RAC高可用性事件通知并且当事件发生时采取适当的行动 。使用这个特性,你可以改进连接故障响应时间并且从连接池和会话池中删除旧的连接。由于减少了故障检查时间,这样就可以在故障发生时,透明应用故障恢复可以很快地做出反映,这样在当一个节点或者实例发生故障时有助于客户端应用程序的运行。
如果应用高可用性事件通知,客户端必须连接到一个已经启用 Oracle Streams Advanced Queuing(数据流高级队列)高可用性通知服务的数据库中。数据库服务可以使用企业管理器来修改服务来支持这些通知。一旦这些服务授予了,客户端能够注册一个回调操作,当一个高可用性事件发生时就可以调用。
注意:使用JDBC客户端,事件通知限制于连接池中。
对于灾难的解决方案
Oracle对于灾难的主要解决方案是oracle data guard产品。
oracle data guard的概述
oracle data guard可以在发生故障和停机时可以自动地并透明地让你维护数据库的正常运行。oracle data guard可以维护多到9个备用数据库,每个备用数据库是生产库的实时副本,来防止消除各种数据库面对的各种威胁—系统故障,数据故障,认为错误,以及灾难等问题。如果生产库有一个故障,然后你可以使用一个备用库进行切换掉原来的出现故障的生产库,使这个备用库成为新的生产库。除此之外,为了维护计划停机时间也可以响应的减少,因为你能够很快地并且很容易地将生产处理工作从当前的主库切换到一个备用库,然后也可以切换回原来的状态。
快速启动故障恢复能够在当主数据库出现故障时可以将业务处理自动地,快速地,可靠地切换到一个设计好的,且与生产库保持同步的备用库上,整个故障切换不需要执行复杂的手动操作。这样让用户透明地维护系统的正常运行时间并且对出现的系统故障,数据故障以及断电等情况下增强了系统的高可用性,也增加了灾难性恢复的健壮性。
oracle data guard的配置
一个oracle data guard的配置是一个松散连接的系统的集合,由一个主数据库以及最多9个备用库组成,备用数据库可以是物理的备用库或者是逻辑的备用数据库的混合。在oracle data guard配置中的数据库能够位于同一个数据中心通过LAN连接,或者为了提供最大的灾难性的保护能力,也可以是地理上是分散的但是通过WAN和oracle Net Services连接。
任何数据库都能够部署oracle data guard,这是可能的是因为oracle data guard的使用对于应用程序来说是透明的;无需修改应用程序的代码来适应一个备用数据库的需要。更多的,oracle data guard也让你优化配置来使在数据保护级别和应用程序影响之间平衡,你能够配置数据库的保护模式使有最大的数据保护能力,最高的可用性或者最大性能。
当应用程序事务做主库上的数据做变更时,这些变更被记录在主数据库的重做日志中。对于物理的备用数据库,这些变更被应用到每个运行在可管理的恢复模式下的物理数据库中。对于逻辑备用库来说,可以使用从归档重做日志中重新产生的SQL语句执行来应用修改。
物理备用库
一个物理备用库是在物理上是和主数据库是完全相同的。当一个主数据库被打开并且处于活动状态时,一个物理备用数据库或者执行恢复(通过应用日志),或者打开只提供报表访问。当生产库继续将重做记录传输到一个物理备用库的同时,该物理备用库只要没有执行恢复操作就能够被查询并且处于只读状态。
在磁盘上的物理备用数据库结构必须和主数据库在数据块一一对应的基础上是完全相同的,因为一个恢复操作是使用物理的rowid按照数据块来应用变更的。物理备用数据库模式包括索引,必须和主数据库一样,并且物理备用库不能被打开(要不可以打开但必须处于只读模式)。如果物理备用库被打开,物理备用库将会有不同的rowids,从而使持续的恢复操作无法执行。
逻辑备用库
一个逻辑备用库采用标准的oracle归档重做日志,将这些重做日志文件包含的重做记录转换为SQL事务,然后应用这些重做记录到一个处于打开状态的备用数据库。尽管变更能够被应用到逻辑备用库中并且允许终端用户并发地访问逻辑备用库,但是正在应用重新生成的SQL事务的表允许用户只读访问。因为备用数据库被打开,她的物理存储与主数据库不相同。逻辑备用数据库表能够有不同与主库的索引并且在物理存储特征上也不相同,但是逻辑备用数据库必须确保对于应用程序访问的逻辑一致性,来履行作为一个备份数据库的角色。
oracle data guard broker
oracle data guard broker 能够使复杂的创建和维护任务简单化,并且提供显著增强的监控,警告以及控制机制。oracle data guard broker使用集成在oracle数据库服务中并且与每个Data Guard有关的后台代理进程来为整个oracle data guard配置提供一个统一的监控和管理基础结构。有两个用户接口专门提供与oracle data guard配置相互作用的。一个是命令接口(DGMGRL),另一个是图形化接口称为data guard管理器。
data guard管理器集成在企业管理器中,提供一个向导帮助你创建,管理以及监控data guard配置。data guard管理器让你充分利用企业管理器的特征,比如;提供利用事件服务进行警告,利用发现服务使设置工作更容易,以及利用作业服务使维护更轻松。
RAC环境下使用data guard
RAC使多个独立的服务器互连,并且共享一个oracle数据库,提供高可用性,可伸缩性,以及为在数据库发生故障时冗余性。RAC和data guard一起合作可以提供在系统级别,位置级别,以及数据级别上的保护,实现高级别的可用性以及没有数据丢失的灾难性恢复:
*RAC通过提供从故障中快速以及自动的恢复的方式来解决系统故障,比如:节点故障以及实例崩溃。RAC也为应用程序增加系统的可伸缩性。
* data guard解决了位置故障以及数据保护,可以在事务级别上保证不在同一个磁盘上的主数据库与备用数据库保持事务一致,使在发生位置灾难和数据故障时能够恢复。
使用RAC和data guard的许多不同的架构是有可能的,依赖于data guard是本地的还是远程的以及RAC的节点的使用情况以及逻辑备用库和物理备用库的组合方式。
Oracle人为错误解决方案
这部分主要讲人为造成的错误的解决方案,包括下面的内容:
*oracle回闪特征的概述
*LogMiner的概述
*高可用性中的安全特性的概述
oracle回闪特征的概述
如果一个主要的错误发生的话,比如批作业连续运行两次,数据库管理员能够请求一个回闪操作来使整个数据库恢复到前一个时间点上,从而就不需要复原备份以及做一个基于时间点上的恢复。除了在数据库级别上做回闪操作以外,也可以回闪一个整张表。同样地,数据库可以恢复那些被用户不注意删除的表。
*oracle回闪数据库可以通过还原自从某个时间点以来的所有修改,能够快速地将你的数据库回到前一个时间点上。这个操作是非常快的,因为你不需要复原备份文件还原数据库。回闪数据库可以在数据受损或者人为错误之后快速的恢复,大幅度的减少停机时间。
*oracle回闪表技术也让你快速地复原一张表到过去的一个时间点上并且不需要还原备份文件来恢复数据库;
* Oracle Flashback Drop 用于复原被意外删除的数据表;
*oracle回闪查询使你能够在过去某个时间点上的数据。这个方法让你查看并且重构由于意外删除或者修改而丢失的数据。开发者可以使用这个特征来在应用程序中添加这个自助错误纠正功能,给予终端用户还原数据和纠正他们的错误的权力;
*oracle回闪版本查询可以使用存储在数据库中的还原信息来查看个别数据行的修改记录以及元数据的修改记录;
*oracle回闪事务查询让你在事务级别上检查数据库的修改记录。用户可以使用这个特征来诊断问题,执行分析以及审计事务。
LogMiner的概述
Oracle LogMiner工具让你通过一个SQL接口来查询重做日志文件。重做日志文件包含了对一个数据库操作的历史信息。企业管理器包括了图形化的oracle LogMiner视图供用户查看。
所有对用户数据或者上一数据库字典的变更都被记录在重做日志文件中。因此,重做日志文件包含了所有必要的信息来执行恢复操作。因为重做日志文件数据是被保存在归档文件中,因此历史修改数据是可以被获取到的。为了充分利用Oracle LogMiner所提供的特性,你应该起用补充重做日志功能。
高可用性中的安全特性的概述
可以使用oracle Internet Directory管理数据库的安全属性以及用户的权限,Internet Directory 还支持使用 X.509 认证进行用户身份验证。Internet Directory也强制使用属性级别的访问控制。这样可以使对特定属性的读,写,或者更新权限受限于特定的指定的用户,比如:一个企业安全管理员。Directory查询和响应可以采用SSL加密,增强了在身份验证和其他操作的保护能力。其他数据库安全特征包括虚拟专用数据库,标签安全性,审计以及配置为企业用户的目录用户(directory-based user)可以采用代理身份认证(proxy authentication)。
Oracle先进的安全用户迁移工具帮助迁移存在的数据库用户到Oracle Internet Directory 中。在一个用户被在目录中创建之后,企业能够在一个WEB环境中继续创建新的应用程序并且刷新该用户在Oracle Internet Directory中的信息来给该用户能够访问这些新加的应用程序的权限。
计划停机的概述
Oracle为减少计划停机的时间提供了许多功能。这些功能如下:
*系统维护
*数据维护
*数据库维护
系统维护
Oracle提供了一个高度的自我管理,是DBA的常规任务自动化并且减少了空间,内存,资源管理的复杂性。自动管理如下的方面:
*自动还原管理—数据库管理员不需要计划或者优化回滚段的大小和数量或者不需要考虑在战略上如何分配事务给一个特定的回滚段;
*动态的内存管理来动态地重新设置oracle共享内存组件大小。Oracle也提供顾问来帮助数据库管理员为优化数据库的性能设置内存分配的大小;
*oracle文件管理功能使数据库根据需要自动地创建和删除文件;
*使用位图对表中的空闲空间进行管理。除此之外,oracle提供了数据文件的自动扩展,以便文件能够根据文件中数据量的大小自动地增长;
*在进行硬件和操作系统维护时使用Data Guard来保证系统的可用性。
数据维护
数据库管理员能够对表定义执行各种联机操作,包括堆表的联机重组。这个功能就可以使在重组一张表的同时用户也可以全表访问该表。
这个联机的体系结构提供下面的功能:
*表的任何物理属性能够在联机的时候被修改。这张表可以被移动到新的位置。这张表也可以被分区,也可以从一个表的组织类型(如:堆表)转换为另一个组织类型(索引组织表);
*许多逻辑属性也能够被修改。修改列名,列的类型,以及列的大小。列可以被添加,被修改或者被合并。只有一个限制就是主键不能被修改;
*对索引组织表进行联机创建和重建辅助索引。辅助索引支持数据块提示的有效使用。无效的physical guesses可以被联机修复;
*索引可以被联机创建并且在创建的同时索引也被分析过。也可以对逻辑的rowids的physical guess组件进行联机修复(此方法使用在索引组织表中的辅助索引中);
*修复存储在索引组织表的辅助索引中的逻辑rowids的physical guess组件。这样就允许联机修复无效的physical guess组件。
数据库维护
Oracle提供一个技术来维护数据库软件,使只需要很少甚至不需要停机时间。为RAC各个实例安装补丁可以逐个进行,这样数据库服务就可以不间断,持续提供服务。
一个RAC系统能够运行在已经打好补丁的实例和没有打好补丁的实例的混合模式下来测试在生产库上的补丁程序。当补丁在一个节点上的安装成功,则可以在RAC的其他节点上重复安装过程。当RAC中所有的节点都已经打好补丁时,滚动补丁升级过程结束,并且所有的节点都运行在相同版本的oracle的中。