跟 Inthirties学Oracle之checkpoint由来

什么是checkpoint?

checkpoint能干什么?

checkpoint是怎么运行的?

 

这是我们在了解检查点概念的时候,需要理解的问题。也是我们在理解检查点的时候,经常不能整明白的三个问题。 我们先不忙着对这三个文件进行理解。一个事物的出现,必然有他出现的理由,checkpoint也固然如此。 大家都知道在我们的系统里,存储是数据的最后的归属之地,数据库更是如此,只有数据落地生根的进入了物理的存储空间里,这个数据才算是放心的能够保存了, 所以如果要数据保证安全不丢失,及时的把他们放到了安心的地方就可以了,但是反观而谈,进入存储空间势必带来IO,而这个IO往往带来相对的性能上的劣 势。所以要即保证数据的安全,有同时保证性能的优化,这个及时就要做到恰到好处了。万事的两面性就带来了研究的快乐。这个检查点也是来之于此的。对于 Oracle来说主要的文件,大家都知道。无非就是控制文件,数据文件和重做日志文件,此为Oracle数据库实例能够运行的三个为高权重的文件类型了。 控制文件其是数据库实例的信息中心,数据文件更不必谈,是根本,重做日志文件,其实也是用来保证数据库的crash时的数据安全保证的。对于此三种文件其 中最为常见的IO,log buffer写入到log file,buffer cache里的脏数据之写于数据文件。其中前者是顺序写入的。从前向后不断写入,直至写满进行下一组的切换,后者与前者不同,并不是连续写入的,是离散型 的,不同的数据需要写入到不同的块里,不同的块需要进行不同的寻址,切换磁道等操作,这里读也亦然,不过读非本文说关心所在,暂不谈之,log buffer的写入LGWR为之。当数据Commit或者Rollback之刻。LGWR将写log buffer于Log file,我们故称redo log的写入是同步之写入。即数据生效及回滚是,redo条目必是在物理存储上记下来的,由此crash后,实例能够得以恢复。观data, data存储在data file中。用时,加载到buffer cache里,进行修改并进行访问,但是buffer cache中的数据不一定和data file中的一致,为何,因为上面提到了,为保证实例行之高效,修改了的数据(dirty data脏数据)并不会马上写入到数据文件。所以DBWR的写入和commit以及rollback并非同步而为。如此这般,如若实例crash比如断电或者shutdown abort,buffer cache里的dirty data并不能在data file里记录下来,这样岂不是数据将会丢失么,确实,现在data file里的数据并不和我们crash的时候一致。但是我们开启了数据库以后发现,已经提交的数据依然可以表现出来,不过是那些还没有来的及提交的数据没有叻。确实,虽然数据库库里的data file里的data不一致了,不过在startup的过程中,Oracle已经悄然为你上次的abort买单了。上面提到了redo log,这个redo log就是Oracle买单得以实现的手段了。Oracle记录了重做的记录条,根据重做的记录条,把那些还没有体现到data file里的数据重新做过一遍,也就达到目的了。不过,Oracle怎么知道你要做那些重做的内容,他会把所有的重做都做过么,这样来保证他找出来的重做条目就是我们所需的呢,这写就是通过上面提到的checkpoint来实现的。

 

这里累文叠字般的并没有对我们的checkpoint介绍过多,看似介绍的更多是数据库如果保证我们的数据在高效运行过程中的安全,实为提示大家我们提到的checkpoint并不是保证实例的运行状态的,最后一句话,点明了,checkpoint目的是恢复数据库而来的。是在恢复数据库的时候确定恢复的条目而来的。而别无他用。checkpoint是学习Oracle里的一个大家常觉得困难和不易理解的知识领域,如果你能够先认知下checkpoint不过是Oracle实例在crash recovery里的一个恢复过程中需要用到的手段,那么checkpoint的学习你就已经先有所得了。

 

一钱窥豹,焉识其貌。本文仅告知checkpoint的由来,哪么checkpoint如何来实现其目的,其又是如何在Oracle里表现,我们在认知checkpoint中又会有哪些误区。在后面的文章中我们再逐一道来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在Golang运维开发项目实战中,你可以考虑以下几个方向: 1. Linux系统管理及Shell脚本编程:掌握Linux系统管理技能,包括系统配置、服务管理、性能优化等,并习Shell脚本编程,以便自动化运维任务。 2. Golang编程基本功:熟悉Golang的语法和基本特性,包括变量、函数、数据结构等,以便编写高效可靠的运维工具和脚本。 3. Golang并发编程及并发编程进阶:习Golang的并发编程模型和相关的并发控制机制,以便处理高并发场景下的运维任务。 4. 程序测试与性能压测:掌握Golang的测试框架和工具,包括单元测试、接口测试、集成测试等,以及性能测试工具,以便保证运维工具的质量和性能。 5. Golang网络编程基础:了解Golang的网络编程基础,包括TCP/UDP通信、HTTP协议等,以便开发网络相关的运维工具和服务。 6. GolangWeb应用框架日志管理方法:习如何使用Golang的日志库,记录和管理运维工具和服务的日志,以便排查问题和监控运行状态。 7. MySQL应用深度实战:掌握Golang与MySQL的集成开发,包括数据库连接、数据操作、事务处理等,以便处理与数据库相关的运维任务。 8. GORM框架(jinzhu、gorm、xorm):习使用GORM框架进行ORM(对象关系映射)开发,简化数据库操作,提高开发效率。 以上是一些在Golang运维开发项目实战中的方向,你可以根据自己的兴趣和需求选择适合的方向进行深入习和实践。\[1\] #### 引用[.reference_title] - *1* *3* [小白怎么入门Golang开发实战?看这篇就够啦!(白嫖60G资料)](https://blog.csdn.net/weixin_70257503/article/details/127059787)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [GPE(Grafana+Prometheus+Exporter)项目实战之Golang篇(上)](https://blog.csdn.net/inthirties/article/details/124923659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值