达梦redo与undo

达梦的redo日志与undo日志,全部参照官方文档。

  1. 支持故障恢复的技术主要是日志,日志以一种安全的方式记录数据库系统变更的历史信息,一旦系统出现故障,数据库系统可以根据日志将系统恢复至故障发生前的某个时刻。数据库系统的日志分为两种类型:一是REDO日志,在数据被修改后记录它的新值;另一种是UNDO日志在数据被修改前记录它的旧值。另外当服务器处于归档模式时,若数据库发生故障通过备份文件和归档日志可以恢复到指定时间点。
  2. 在恢复操作中最重要的结构是联机REDO日志。REDO日志存放在日志表空间文件中,这些文件存储数据库所作的所有物理更改信息。DM数据库每一个实例都有一个相关联的联机重做日志,通过重做日志可以保证数据库的完整性和一致性。DM SERVER的REDO日志用于存储被修改数据的新值,包括事务对数据文件和回滚段的修改。REDO日志每次被修改以后,都会自动生成一个新的日志序列值LSN(LONG SEQUENCE NUMBER)。LSN取值范围0~正无穷大,新建的库LSN为0,以后日志每被写入一次,LSN值增加1。
  3. REDO日志里包含有一种特殊的记录,叫PWR(page written record)日志。PWR包括(ts_id,fil_id,page_no,page_lsn)信息,每个数据页刷盘时,都会生成一条对应的PWR日志。PWR日志的lsn与上一个日志的lsn相同。DSC故障恢复时,可以利用PWR日志减少加载磁盘数据页的次数;故障恢复时,利用PWR日志日升redo日志;增量备份时利用PWR日志提升备份速度。
  4. DM服务器可以运行在两种模式下,即归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件。归档日志包含以下五种类型:本地归档、实时归档、即时归档、异步归档、远程归档。
  5. 本地归档:写入REDO日志到本地归档文件,在REDO日志写入日志文件后触发,由归档线程完成本地归档动作,最多可以设置8个本地归档。若磁盘空间不足,所有本地归档一旦失效,系统将会被强制挂起,直到磁盘空间释放,本地归档成功后再继续执行。
  6. 实时归档:在写入REDO日志到日志文件之前,通过MAL系统发送redo日志到远程服务器,远程服务器收到REDO日志后,返回确认消息。收到确认消息后,执行后续操作,若发送REDO日志失败,或从备库返回的数据库模式不是STANDBY,将数据库切换为SUSPEND状态,阻塞所有REDO日志的写入操作。只能配置1个实时归档(那岂不是说实时主备只能配置两节点?)。
  7. 即时归档:即时归档在主库将redo日志写入联机redo日志文件之后,再通过MAL系统将redo日志发送到备库,即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送redo日志的时机不同,一个主库可以配置1~8个即时备库。
  8. 异步归档:在设定的时间点或者每隔设定时间点,启动归档redo日志发送。设置定时归档必须确保至少有一个本地归档,系统调度线程根据设定,触发归档redo日志发送事件,通过MAL系统,获取远程服务器的当前LSN,生成发送归档redo日志任务,加入任务队列。归档任务线程获取任务,通过MAL系统,发送到远程服务器。最多可以设置8个异步归档。
  9. 远程归档:将写入本地归档的redo日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档与本地归档的主要区别是redo日志写入的位置不同,本地归档将redo日志写入数据库实例所在节点的磁盘,而远程归档则将redo日志写入到其它数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。最多可以配置8个远程归档。
  10. 创建数据库时,联机日志文件通常被扩展到一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填满。为了达到循环利用日志系统空间的目的,必须在所有日志文件空间将被占满时,系统能自动清空一部分日志,以便重用日志文件的空间,为了保证被清空的日志所保护的数据在磁盘上是安全的,需要引入一个关键的数据库概念——检查点。当系统产生检查点时,将系统缓冲区中被修改过的数据页写入磁盘,以保证当前日志所保护的数据页都已安全写入磁盘,这样日志文件可以被安全重用。
  11. 当服务器启动和关闭时,系统都会产生检查点。服务器运行过程中,系统会自动判断是否需要执行检查点,当空闲日志空间不足时,系统自动产生一个检查点,系统调度线程也会定时产生检查点,还可以通过调用系统函数CHECKPOINT主动生成检查点。系统调度线程根据ini配置产生检查点:CKPT_INTERVAL、CKPT_FLUSH_RATE(刷盘比例)、CKPT_FLUSH_PAGES。检查点系统函数CHECKPOINT(FLUSH_RATE),其中FLUSH_RATE表示刷盘比例,同时ini参数CKPT_FLUSH_PAGES也生效。
  12. DM SERVER采用回滚段机制来处理UNDO日志,回滚段由一定数量的回滚页组成,回滚页存放的是一批回滚记录。回滚记录存放被修改数据的旧值,并有专属的格式,与物理记录格式不同。回滚段的管理同一般数据文件一样,其回滚数据页的分配、淘汰和释放也交由数据缓冲区完成。回滚文件属于回滚表空间。回滚段的数据并不会永久保存,事务结束后,由系统的PURGE模块释放回滚页。(之前一直以为purge是刷盘的)REDO日志记录了所有对数据库数据进行修改的数据,当然也包括回滚段的修改数据。因此redo日志同样会保存回滚数据。当使用重做日志恢复数据时,系统将重做回滚段中修改了的数据,并将这些修改写回到回滚段中,从而形成回滚记录。回滚记录与重做记录类似,只不过回滚记录记录被修改数据的旧值,以达到数据回滚到原来状态的目的。另外回滚表空间不允许修改和删除操作。
  13. 系统故障恢复的最后一步是重新启动DM服务器,此时系统将从最近一个检查点处开始扫描联机日志,并重做日志记录的内容,这样系统即恢复到了故障发生前的某个很近的时刻,然后将系统中仍然活动的事务再次利用回滚段进行回滚。由此可以看出系统故障恢复可以保证事务的原子性和持久性,即系统发生故障时,仍然活动的事务可以被安全回滚,而已经提交的事务则保证其所修改数据的持久性。

你可能感兴趣的:(达梦数据库)