浅谈数据库日志

与往常一样,这不会太深入谈到技术点。数据库日志最好的学习是,读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是一个好工具。

原文地址:https://www.cnblogs.com/owenwong/p/8241928.html