zoukankan      html  css  js  c++  java
  • 浅谈数据库日志

    与往常一样,这不会太深入谈到技术点。数据库日志最好的学习是,读Oracle 8/9的日志原理。
    所有的系统都是程序员写出来的,因此,所有的IT系统,都是源于生活。
    我接触最早的是Dbase II,那时是单文件版本,单用户操作。到后来FoxPro 2 时结合NetWare386+DOS无盘站,就变成多用户系统(可参考当时订单处理系统,出入库系统等,证券网点大厅也有应用),那时有两个痛点:1,某个用户电脑忽然断电,数据写入不完整,导致大家都不能用了;2、多个用户对同一条记录进行写操作,或读与写不致,或ID增量重号。

    现在的数据库系统(Oracel、DB2、MS sql、Mysql等)都支持多用户,所有的数据库系统(包括Exchange),都是把数据先写到日志中,等某个时机(比如:确认commit)后再写到数据库记录中,日志是数据库最重要的数据之一,理解日志是相当重要的。为什么要用日志呢?就是要解决Foxfro多用户的痛点一啊。
    日志一般分成Undo与Redo:Undo一般用于事务的取消与回滚,记录的是数据被修改前的值,Redo一般用于恢复已确认但未写入数据库的数据,记录的是数据修改后的值,例如:数据库忽然断电重启,数据库启动时一般要做一致性检查,会把已写到Redo的数据但未写入数据库的数据重做一遍。

    数据库系统如何来确认哪些数据需要redo或undo呢?那就需要一个检查点(checkpoint),在系统中一般有一个表或一个控制文件来记录检查点,日志是按顺序一直写下去的,检查点设置后,只需要比对检查点之后的数据就可以了。

    源于生活就是这样,让我们想如何这个问题?估计也就是用这种日志方式,具体操作时加上一个检查点。

    日志明白了之后,有什么用呢?
    备份,知道如何设置备份的粒度。
    数据恢复,当出问题时,知道需要找到哪些文件可以恢复数据。例如,让你恢复3个月前的一笔交易,只要日志备份的足够长,还是有办法的。

    引申:
    MS SQL 中日志设置分成三种,简单、大容量、完成,有什么区别?
    MS SQL用户进行错误操作后,如何查日志?APEX SQL Log是一个好工具。

  • 相关阅读:
    美团配送系统架构演进实践
    系统学习NLP(二十一)--SWEM
    转:大众点评信息流基于文本生成的创意优化实践
    从Encoder到Decoder实现Seq2Seq模型
    从YOLOv1到YOLOv3,目标检测的进化之路
    23岁融了一千万,被创新工场投资,创业就是解决问题。专访丨陈海沙
    通俗理解word2vec
    关于眼下分词的想法
    Angular 2的12个经典面试问题汇总(文末附带Angular測试)
    ubuntu14.04-64位机配置android开发环境,ADT,sdk,eclipsea
  • 原文地址:https://www.cnblogs.com/owenwong/p/8241928.html
Copyright © 2011-2022 走看看