(联机)重做日志文件
重做日志文件以.log为后缀,记录数据库对物理页的增删改(DML)操作,记录内容包含操作类型、表空间号、文件号、页号、页内偏移、实际数据等。
重做日志循环写入,新内容可覆盖旧内容。每个实例至少有两个重做日志文件(若只有一个日志文件,则写满时整个系统需要等待其重新清空),最好设置为相同大小。
重做日志属于WAL(Write Ahead Logging),先写重做日志,再写数据文件。
当日志文件写入量达到一定量时,系统需要清空部分日志,此时将产生检查点,把缓冲区中的日志和脏数据页都写入磁盘,之后即可安全重用。
检查点相关参数在`dm.ini`中配置,关键字为`CKPT`,可以周期性触发检查点,并且可以指定刷盘比例和最少写入脏页数。
- DM有完全检查点和部分检查点两种。绝大多数情况下执行的都是部分检查点。
- 完全检查点会把所有脏页写入磁盘,并调整CKPT_LSN。数据库正常关闭时会产生一个检查点。
- 部分检查点会根据`dm.ini`中的配置确定刷脏页的数量。
- 理想情况下不会用到重做日志的信息。
- 写时频繁在不同重做日志间切换可能会对性能产生影响,此时可以考虑增加日志文件或扩展文件大小
- `v$rlogfile`视图可以看到重做日志的信息
管理重做日志文件
- 先把数据库转换到mount状态
- 在manager中可以右键服务器选择管理服务器-日志文件。
- `alter database rename logfile
- 新增重做日志文件:`alter database add logfile
- 修改(只能增加)重做日志文件大小:`alter database resize logfile
- 最后转化到open状态即可
重做日志原理
- 达梦以Redo日志包(RLOG_PKG)为单元保存重做日志,一个日志包可保存一个或多个PTX产生的重做日志,大小不固定。
- 重做日志和归档日志与LSN有关。LSN是系统自动维护的bigint型数值,自动递增且全局唯一,每一个LSN值代表系统产生的一个物理事务。可以查询`v$rlog`表获取。
- CUR_LSN:系统已分配的最大LSN值,分配发生在物理事务提交时,因此其为RLOG_PKG中最大LSN。
- FLUSH_LSN:已发起刷盘请求但尚未写入联机日志文件的最大LSN,其仍在设备缓冲区中。
- FILE_LSN:已写入联机重做日志文件的最大LSN值
- CKPT_LSN:检查点,所有LSN<=CKPT_LSN的物理事务修改的数据页均已写入磁盘,同时小于该LSN的联机重做日志记录也可被覆盖
- 当事务提交或RLOG_PKG满或执行检查点时会进行刷盘。
- 当发生故障后,
- CKPT_LSN及之前的物理事务均已被记录在数据页中,因此无需关注。
- [CKPT_LSN+1, FILE_LSN]都已被写入重做日志,这也是故障后需要重做的范围,称为有效日志;
- 而在缓冲区中的[FILE_LSN+1, FLUSH_LSN]和在RLOG_PKG中的[FLUSH_LSN+1, CUR_LSN]尚未写入,即[FILE_LSN+1, CUR_LSN]将不在重做日志中。
归档日志文件
由于重做日志会被覆盖,一旦发生意外,重做日志只能保留意外发生前一小段时间的操作记录,若上次备份时间很久则中间会产生大段空档。为此,可以使用归档日志来保存更久时间段的操作记录。
利用归档日志可以把系统恢复到故障发生的前一刻,或指定的时间点。没有归档日志时只能使用备份来恢复。归档日志还用于数据库守护集群、读写分离集群的同步。开启归档会对性能产生较小影响。
可在dm_ini中查看`ARCH_INI`的值来查看归档开启状况,1为开启。
- 归档日志分为五种,可在`dmarch.ini`中配置:
- 本地归档:在redo日志写入日志文件后触发,由归档线程完成本地归档动作。最多可设置8个本地归档。若磁盘空间不足导致本地归档失败,则系统将被强制挂起,直到本地归档成功为止。
- 实时归档:redo日志写入到日志文件之前,通过MAL系统发送redo日志到服务器,当远程服务器收到并本地收到确认后,才执行后续操作。只能配置1个实时归档。
- 即时归档:redo日志写入到日志文件后,再通过MAL系统发送到备库。
- 异步归档:在设定的时间点或时间间隔进行发送,必须确保至少有一个本地归档。通过MAL系统获取远程服务器的LSN,生成发送任务并加入任务队列。归档任务线程获取任务,并通过MAL系统发送到远程服务器。最多可设置8个异步归档
- 远程归档:把本地归档写入的信息发送到远程节点,写入远程节点的指定归档目录。
开启归档
先使数据库进入mount配置状态
- `alter database add archivelog 'type=local, dest=
- `alter database archivelog|noarchivelog;`
- 可以采用`select name, arch_mode from v$database;`查看数据库的归档启用情况
- 使用GUI也可以开启归档。使用manager工具,左边右键服务器选择管理服务器,先在系统管理中切换到配置模式,然后配置归档路径、大小及限制即可
- 运行中切换归档开关会导致归档文件不连续,无法备份,需要在备份前调用`checkpoint(100);`(完全检查点)主动刷新检查点