oracle--介质恢复和实例恢复的基本概念

本文深入探讨Oracle数据库中的Redo Log机制,解释其在实例恢复和介质恢复中的作用,以及如何确保已提交事务的数据一致性。同时,文章还介绍了Log-Force-at-Commit和Write-Ahead-Log等关键机制。

1、概念

  REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制。实际上REDO LOG的存在是为两种场景准备的,一种我们称之为实例恢复(INSTANCE RECOVERY),一种我们称之为介质恢复(MEDIA RECOVERY)。

  实例恢复的目的是在数据库发生故障时,确保BUFFER CACHE中的数据不会丢失,不会造成数据库的不一致。

  介质恢复的目的是当数据文件发生故障时,能够恢复数据。

  虽然这两种恢复使用的机制类似的,但是这两种恢复也有着十分本质的不同,这一点也是很多DBA经常会混淆的。

  REDO LOG的数据是按照THREAD来组织的,对于单实例系统来说,只有一个THREAD,对于RAC系统来说,可能存在多个THREAD,每个数据库实例拥有一组独立的REDO LOG文件,拥有独立的LOG BUFFER,某个实例的变化会被独立的记录到一个THREAD的REDO LOG文件中。

2、恢复步骤及区别

  对于介质恢复和实例恢复来说,第一个步骤都是通过REDO LOG的信息进行前滚,在做前滚的时候,通过REDO LOG文件里记录的数据库变化矢量(稍后我们会详细的介绍数据库变化矢量CV),根据SCN的比对,提交到相关的数据文件上,从而使数据文件的状态向前滚动。大家要注意的是,UNDO表空间的变化也被记录到REDO LOG里了,因此UNDO表空间相关的数据文件也会被前滚。当前滚到最后一个可用的REDO LOG或者归档日志的时候,所有的数据库恢复层面的工作就全部完成了。这个时候,数据库包含了所有的被记录的变化,这些变化中有些是已经提交,有些是尚未提交的。在最新状态的UNDO表空间中,我们也可以看到一些尚未提交的事务。

  因此数据库下一步需要做的事情是事务层面的处理,回滚那些尚未提交的事务,以确保数据库的一致性。

  对于单实例的系统,实例恢复一般是在数据库实例异常故障后数据库重启时进行,当数据库执行了SHUTDOWN ABORT或者由于操作系统、主机等原因宕机重启后,在ALTER DATABASE OPEN的时候,就会自动做实例恢复。而在RAC环境中,如果某个实例宕了,或者的实例将会接管,替宕掉的实例做实例恢复。除非是所有的实例都宕了,这样的话,第一个执行ALTER DATABASE OPEN的实例将会做实例恢复。这也是REDO LOG是实例私有的组件,但是REDO LOG文件必须存放在共享存储上的原因。

  Oracle数据库的CACHE机制是以性能为导向的,CACHE机制应该最大限度的提高数据库的性能,因此CACHE被写入数据文件总是尽可能的推迟。这种机制大大提高了数据库的性能,但是当实例出现故障时,可能出现一些问题。

  首先是在实例故障时,可能某些事物对数据文件的修改并没有完全写入磁盘,可能磁盘文件中丢失了某些已经提交事务对数据文件的修改信息。其次是可能某些还没有提交的事务对数据文件的修改已经被写入磁盘文件了。也有可能某个原子变更的部分数据已经被写入文件,而部分数据还没有被写入磁盘文件。实例恢复就是要通过ONLINE REDO LOG文件中记录的信息,自动的完成上述数据的修复工作。这个过程是完全自动的,不需要人工干预。

  在这个机制里,有两个问题需要解决,第一个是如何确保已经提交的事务不会丢失,第二个是如何在数据库性能和实例恢复所需要的时间上做出平衡,既确保数据库性能不会下降,又保证实例恢复的快速。

  解决第一个问题比较简单,Oracle有一个机制,叫做Log-Force-at-Commit,就是说,在事务提交的时候,和这个事务相关的REDO LOG数据,包括COMMIT记录,都必须从LOG BUFFER中写入REDO LOG文件,此时事务提交成功的信号才能发送给用户进程。通过这个机制,可以确保哪怕这个已经提交的事务中的部分BUFFER CACHE还没有被写入数据文件,就发生了实例故障,在做实例恢复的时候,也可以通过REDO LOG的信息,将不一致的数据前滚。

  解决第二个问题,oracle是通过checkpoint机制来实现的。Oracle数据库中,对BUFFER CAHCE的修改操作是前台进程完成的,但是前台进程只负责将数据块从数据文件中读到BUFFER CACHE中,不负责BUFFER CACHE写入数据文件。BUFFER CACHE写入数据文件的操作是由后台进程DBWR来完成的。DBWR可以根据系统的负载情况以及数据块是否被其他进程使用来将一部分数据块回写到数据文件中。这种机制下,某个数据块被写回文件的时间可能具有一定的随机性的,有些先修改的数据块可能比较晚才被写入数据文件。而CHECKPOINT机制就是对这个机制的一个有效的补充,CHECKPOINT发生的时候,CKPT进程会要求DBWR进程将某个SCN以前的所有被修改的块都被写回数据文件。这样一旦这次CHECKPOINT完成后,这个SCN前的所有数据变更都已经存盘,如果之后发生了实例故障,那么做实例恢复的时候,只需要冲这次CHECKPOINT已经完成后的变化量开始就行了,CHECKPOINT之前的变化就不需要再去考虑了。

  到目前为止,我们了解了实例恢复机制的一些基本的原理,我们也可以大体上理解REDO LOG的工作机制了。不过我想我们还需要再更加深入一些。了解一些更为深入的内幕。实际上通过上面老白的介绍,大家也许已经觉得对实例恢复了解的很透彻了,而实际上,有很多问题我们还没有解决。有些爱动脑筋的读者可能要问了,有没有可能数据文件中的变化已经写盘,但是REDO LOG信息还在LOG BUFFER中,没有写入REDO LOG呢,这种情况如何恢复呢?

  这里我们又要引入一个名词:Write-Ahead-Log,就是日志写入优先。日志写入优先包含两方面的算法,第一个方面是,当某个BUFFER CACHE的修改的变化矢量还没有写入REDO LOG文件之前,这个修改后的BUFFER CACHE的数据不允许被写入数据文件,这样就确保了再数据文件中不可能包含未在REDO LOG文件中记录的变化;第二个方面是,当对某个数据的UNDO信息的变化矢量没有被写入REDO LOG之前,这个BUFFER CACHE的修改不能被写入数据文件。

  介质恢复和实例恢复的机制是类似的,所不同的是,介质恢复是当存储的数据文件出现故障的时候进行的,介质恢复无法自动进行,必须手工执行recover Database或者recover datafile命令来实施。一般来说,介质恢复是从一个恢复的数据文件为起点进行恢复,因此在做介质恢复的时候,需要使用归档日志。

原文:https://blog.csdn.net/scofy0/article/details/47150999

转载于:https://www.cnblogs.com/kingle-study/p/10856622.html

锐角检测插件2.0是一款专为ArcGIS环境设计的功能扩展模块,主要用于识别并修正地理信息系统数据中存在的尖锐连接角。在地理信息处理过程中,线状要素的交接处若形成过小的夹角,可能引发数据完整性与分析可靠性的隐患。该工具通过集成自动化检测与处理机制,显著提升了空间数据的几何质量与可用性。作为Esri公司ArcGIS软件体系的辅助组件,该插件能够与平台核心功能紧密融合,为用户提供流畅的操作流程。使用者无需具备编程知识,仅通过若干交互步骤即可完成对矢量线数据的角度筛查。该工具的核心应用场景集中于线要素的几何连接点分析。当相邻线段交汇角度低于预设限值时,系统将自动标注该位置为潜在异常区域。此类几何问题常见于交通网络结点、水系交汇处等空间结构,可能对后续的拓扑分析、空间量算等操作产生干扰。插件2.0版本具备以下主要特性:1. **系统化扫描**:自动遍历所有线状要素,分析连接点几何特征,识别异常夹角。2. **参数化配置**:支持用户根据数据规范自定义角度阈值,如设定临界值为89度。3. **交互式展示**:检测结果通过可视化符号系统呈现,异常点位采用高亮标记便于辨识。4. **批量化处理**:提供多种几何校正方案,可对异常角度进行批量调整与优化。5. **文档化输出**:生成结构化检测报告,详细记录问题点位坐标与属性信息。该工具采用开放式架构设计,允许技术人员访问其实现逻辑。这种设计为专业用户提供了定制化修改的可能性,可根据特定项目需求调整算法参数或扩展功能模块。总体而言,锐角检测插件2.0通过优化空间数据的几何质量,有效增强了ArcGIS平台在处理复杂地理信息时的专业能力。其直观的操作界面与系统化的处理流程,使不同技术背景的地理信息工作者都能高效解决数据中的角度异常问题。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值