在恢复操作中最重要的结构是联机 REDO 日志。REDO 日志存放在日志表空间文件中,这些文件存储数据库所做的所有物理更改信息。达梦数据库每一个实例都有一个相关联的联机重做日志,通过重做日志可以保证数据库的完整性和一致性。
DM SERVER 的 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日志:
- RAC 故障恢复时:利用 PWR 日志减少加载磁盘数据页的次数;
- 故障恢复时:利用 PWR 日志提升 redo 速度;
- 增量备份时:利用 PWR 日志提升备份速度。
DM系统采用了单独的日志文件来存储 REDO 日志,DM 至少有两个日志文件,日志文件是循环利用的。日志文件由日志表空间管理
redo日志归档
DM 服务器可以运行在两种模式下,即归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件,此时系统管理员应该事先预留出足够的磁盘空间以便存储归档日志文件。通过 dm.ini 和 dmarch.ini 可以配置归档。归档日志有五种类型。
本地归档
写入 REDO 日志到本地归档文件,在 REDO 日志写入日志文件后触发,由归档线程完成本地归档动作,最多可以设置 8 个本地归档。若磁盘空间不足,所有本地归档一旦失效,系统会被强制挂起,直到磁盘空间释放,本地归档成功后,再继续执行。
实时归档
在写入 REDO 日志到日志文件之前,通过 MAL 系统发送 REDO 日志到远程服务器,远程服务器收到 REDO 日志后,返回确认消息。收到确认消息后,执行后续操作,发送 REDO 日志失败,或从备库返回的数据库模式不是 STANDBY,将数据库切换为 SUSPEND 状态,阻塞所有 REDO 日志的写入操作。只能配置 1 个实时归档。
即时归档
即时归档在主库将 Redo 日志写入联机 Redo 日志文件后,再通过 MAL 系统将 Redo 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 Redo日志的时机不同。一个主库可以配置 1~8 个即时备库。
异步归档
在设定的时间点或者每隔设定时间,启动归档 REDO 日志发送。设置定时归档,必须确保至少有一个本地归档。系统调度线程根据设定,触发归档 REDO 日志发送事件。通过 MAL系统,获取远程服务器的当前 LSN,生成发送归档 REDO 日志任务,加入任务队列。归档任务线程获取任务,通过 MAL 系统,发送到远程服务器。最多可以设置 8 个异步归档。
远程归档
远程归档就是将写入本地归档的 REDO 日志信息,发送到远程节点,并写入远程节点的指定归档目录中。远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。最多可以配置 8 个远程归档。
V$RLOG
:显示日志的总体信息。通过该视图可以了解系统当前日志事务号 LSN 的情况、归档日志情况、检查点的执行情况等。
V$RLOGBUF
:显示日志 BUFFER 信息。通过该视图可以查询日志 BUFFER 的使用情况,如 BUFFER 状态、总大小、已使用大小,这样可以带来帮助,如 BUFFER 剩余空间过小产生的失败等。
V$RLOGFILE
: 显示日志文件的具体信息。包括文件号、完整路径、文件的状态、文件大小等等。
V$ARCHIVED_LOG
:显示当前实例的所有归档日志文件信息。
redo日志配置
查看当前Redo log 信息:
SQL> select file_id,path,rlog_size/1024/1024 as "Size" from V$RLOGFILE;
行号 FILE_ID PATH Size
---------- ----------- --------------------- --------------------
1 0 /dm8/data/DM/DM01.log 256
2 1 /dm8/data/DM/DM02.log 256
已用时间: 31.102(毫秒). 执行号:1205.
查看DB 当前正在适用的Redo log:
SQL> select cur_file from V$RLOG;
行号 CUR_FILE
---------- -----------
1 0
已用时间: 0.992(毫秒). 执行号:1206.
在DB open的状态下,可以添加