达梦数据库故障恢复_yxy

15 篇文章 0 订阅
7 篇文章 0 订阅

1 概述

①故障恢复是数据库系统必须保证即使发生故障,也可以保障数据的完整性和一致性
②故障恢复的技术主要是日志,日志以一种安全的方式记录数据库系统变更的历史信息,一旦系统出现故障,数据库系统可以根据日志将系统恢复至故障发生前的某个时刻。日志分为redo日志(记录数据修改后的新值)和undo日志(数据修改前的旧值)。
③当服务器处于归档模式时,如果数据库发生故障,通过备份文件和归档日志可以恢复到指定时间点。

2 REDO日志

①REDO 日志存放在日志表空间文件中,这些文件存储数据库所做的所有物理更改信息。redo日志可以保证数据库的完整性和一致性。
②DM的 REDO 日志用于存储被修改数据的新值,包括事务对数据文件和回滚段的修改。REDO 日志每次被修改以后,都会自动生成一个新的日志序列值 LSN(Log Sequence Number)。LSN 取值范围 0~正无穷大,新建的库 LSN 为 0,以后日志每被写入一次,LSN值增加 1。
③REDO 日志里包含有一种特殊的记录,叫 PWR(Page Written Record)日志。PWR包括(ts_id, fil_id, page_no, page_lsn)信息。每个数据页刷盘时,都会生成一条对应的PWR 日志。PWR 日志的 lsn 与上一个日志的 lsn 相同。在以下情况下可以利用 PWR日志:

  1. DSC 故障恢复时:利用 PWR 日志减少加载磁盘数据页的次数;
  2. 故障恢复时:利用 PWR 日志提升 redo 速度;
  3. 增量备份时:利用 PWR 日志提升备份速度。
    ④DM采用联机日志文件来存储redo日志,DM 至少有两个日志文件,日志文件是循环利用的。日志文件由日志表空间管理。DM 支持增加日志文件和扩展日志文件大小。如下:
    例1增加大小为 80M 的日志文件 dameng_003.log
    ALTER DATABASE ADD LOGFILE ‘dameng_003.log’ size 80;
    例 2 将日志文件 dameng_003.log 大小更改为 100M
    ALTER DATABASE RESIZE LOGFILE ‘dameng_003.log’ to 100;
    在 MOUNT 状态下,支持对日志文件的重命名操作。
    例 3 将日志文件 dameng_003.log 重命名为 dameng_004.log
    ALTER DATABASE RENAME LOGFILE ‘dameng_003.log’ to ‘dameng_004.log’;

3 REDO日志归档

DM 有归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件。

3.1 本地归档

写入 REDO 日志到本地归档文件,在 REDO 日志写入日志文件后触发,由归档线程完成本地归档动作,最多可以设置 8 个本地归档。若磁盘空间不足,所有本地归档一旦失效,系统会被强制挂起,直到磁盘空间释放,本地归档成功后,再继续执行。

3.2 实时归档

写入 REDO 日志到日志文件之前,通过 MAL 系统发送REDO 日志到远程服务器,远程服务器收到 REDO 日志后,返回确认消息。收到确认消息后,执行后续操作,发送 REDO 日
志失败,或从备库返回的数据库模式不是 STANDBY,将数据库切换为 SUSPEND 状态,阻塞所有 REDO 日志的写入操作。只能配置 1 个实时归档。

3.3 即时归档

即时归档在主库将 Redo 日志写入联机 Redo 日志文件后,再通过 MAL 系统将 Redo 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 Redo日志的时机不同。一个主库可以配置 1~8 个即时备库。

3.4 异步归档

在设定的时间点或者每隔设定时间,启动归档 REDO 日志发送。设置定时归档,必须确保至少有一个本地归档。系统调度线程根据设定,触发归档 REDO 日志发送事件。通过 MAL系统,获取远程服务器的当前 LSN,生成发送归档 REDO 日志任务,加入任务队列。归档任务线程获取任务,通过 MAL 系统,发送到远程服务器。最多可以设置 8 个异步归档。

3.5 远程归档

远程归档就是将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。最多可以配置 8 个远程归档。

4 检查点

①创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填充。为了达到循环利用日志系统空间的目的,必须在所有日志文件空间将被占满时,系统能够自动清空一部分日志,以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,需要引入一个关键的数据库概念——检查点。当系统产生检查点时,将系统缓冲区中被修改过的数据页写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件即可被安全重用。
②当服务器启动和关闭时,系统都会产生检查点。服务器运行过程中,系统会自动判断是否需要执行检查点;当空闲日志空间不足时,系统自动产生一个检查点;系统调度线程也会定时产生检查点;还可以通过调用系统函数 CHECKPOINT 主动生成检查点。
③系统调度线程根据 dm.ini 的参数配置,产生检查点,下面给出具体的例子和说明。
CKPT_INTERVAL = 1800 #每间隔 1800 秒,产生检查点间隔
CKPT_FLUSH_RATE = 5 #检查点的刷盘比例为 5%,将系统中所有脏页的 5%写入磁盘
CKPT_FLUSH_PAGES = 1000 #一个检查点最少写入 1000 个脏页
④检查点系统函数 CHECKPOINT(FLUSH_RATE),其参数FLUSH_RATE 为 INTEGER 类 型或 DOUBLE 类型,指示刷盘比例,替代 dm.ini 中的 CKPT_FLUSH_RATE,同时CKPT_FLUSH_PAGES 参数同时生效。例如,执行 SELECT CHECKPOINT(10);会将系统中10%脏页写入磁盘。

5 回滚段与回滚记录

①DM采用回滚段机制来处理 UNDO 日志。回滚段由一定数量的回滚页组成,回滚页存放的是一批回滚记录。回滚记录存放被修改数据的旧值,并有专属的格式,与物理记录格式不同。回滚段的管理同一般数据文件一样,其回滚数据页的分配、淘汰和释放也交由数据缓冲区完成。回滚文件属于回滚表空间。回滚段的数据并不会永久保留, 事务结束后,由系统的 PURGE 模块释放回滚页。
②REDO 日志记录了所有对数据库数据进行修改的数据,当然也包括回滚段的修改数据。因此,REDO 日志同样也会保护回滚数据。当使用重做日志恢复数据库时,系统将重做回滚段中修改了的数据,并将这些修改写回到回滚段中,从而形成回滚记录。回滚记录与重做记录类似,只不过回滚记录记录被修改数据的旧值,以达到数据回滚到原来状态的目的。
③另外,回滚表空间不允许修改和删除操作。

6 系统故障恢复

①系统崩溃的原因有硬件故障,或者是数据库软件或操作系统的漏洞等。它导致整个系统停止运行,内存中的数据全部丢失,但磁盘上存储的数据仍然有效。
②当系统故障发生时,系统管理员可以通过查看系统日志文件以了解系统故障发生的原因或故障发生之前系统的运行状况。多数情况下,系统在故障发生之前会自动记录产生故障的原因,但也不全是这样,如系统掉电时,发生故障的原因可能来不及记录。总之,在处理系统故障之前,系统管理员需要完全了解系统故障发生的原因,并采取相应的措施,如更换硬件,升级操作系统或数据库软件等。
③系统故障恢复的最后一步则是重新启动 DM 服务器。此时,系统将从最近一个检查点处开始扫描联机日志,并重做日志记录的内容,这样系统即恢复到了故障发生前的某个很近的时刻,然后将系统中仍然活动的事务再依次利用回滚段进行回滚。由此可以看出,系统故障恢复可以保证事务的原子性和持久性,即系统故障发生时,仍然活动的事务可以被安全回滚,而已经提交的事务则保证其所修改数据的持久性。

7 介质故障恢复

①介质故障指的是由于各种原因导致数据库系统存储在磁盘上的数据被损坏,如磁盘损坏等。介质故障是数据库系统最为严重的故障,此时系统已经无法重新启动,磁盘上的数据也无法复原。
②出现介质故障后,系统管理员首先需要分析介质故障发生的原因,并采取措施,如磁盘损坏则更换磁盘等。由于系统的数据已经全部或部分丢失,此时只能依赖以前建立的备份和系统产生的归档日志文件进行恢复。
③需要说明的是,为了避免系统在出现故障时丢失数据,应关闭磁盘缓存(若存在的话)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值