达梦日志文件主要由重做日志文件(联机日志文件)、归档日志文件、跟踪日志文件、事件日志文件构成。
1. 重做日志文件(联机日志文件)
重做日志文件记录了数据库所有的操作记录。是数据库备份和恢复的主要数据支撑。重做日志文件默认有两个物理文件DAMENG01.log,DAMENG02.log。可自行增加或者扩大日志文件
-----------------------ADD NEW LOG FILE
ALTER DATABASE ADD LOGFILE 'DAMENG03.log' size 50;
-----------------------ALTER FILE SIZE
ALTER DATABASE RESIZE LOGFILE 'DAMENG03.log' to 100;
通过视图RLOGFILE查看当前日志文件
SELECT * FROM V$RLOGFILE;
重做日志主要由回滚段(undo)和前滚段(redo)组成,redo段存放数据库数据修改后的新值,undo段存放数据旧值。达梦中undo所在表空间为ROLL表空间,且包含在日志文件中。redo存在于日志文件中。redo日志中包含一种特殊的记录,PWR(Page Written Record)日志,包含(ts_id, fil_id, page_no, page_lsn)信息,每个数据页刷盘时都会生成一条对应的PWR日志。在以下情况下可利用PWR日志
DSC故障恢复时:利用PWR日志减少加载磁盘数据页的次数 |
故障恢复时:利用PWR日志提升redo速度 |
增量备份时:利用PWR日志提升备份速度 |
日志文件大小是有限的,因此会进行循环利用。当所有日志文件被写满时,系统需要清空一部分日志以便重用日志文件的空间。为了保证所清空的日志所对应的数据是安全的,引入了检查点(CHECK POINT)的概念。当产生检查点时,系统将缓冲区中的日志和脏数据页都写入磁盘(刷盘)。这样日志文件即可被安全重用。
此过程中主要涉及的线程为日志flush线程,以及相关的日志缓冲区。
2. 归档日志文件
首先数据库要处于归档模式,归档日志文件通过日志归档线程连续写入到归档日志后生成归档日志文件。归档文件其实是一种持久化的重做日志文件。功能同重做日志文件一样主要用于数据备份及恢复。根据备份方式可分为本地归档、实时归档、即时归档、异步归档、远程归档。
2.1 本地归档
redo日志直接写到本地,由dm.ini中ARCH_INI开启归档,dmarch.ini配置归档参数。最多可设8个本地归档。若磁盘空间不足,所有本地归档一旦失效,系统会被强制挂起,直到磁盘空间释放,本地归档成功后再继续运行。
2.2 实时归档
在写入redo日志到联机日志文件之前(刷盘之前),通过MAL系统发送redo日志到远程服务器,远程服务器收到redo日志后,返回确认信息。收到确认信息后,执行后续操作(刷盘),发送redo日志失败,或从备库返回数据库模式不是STANDBY,将数据库切换为suspend状态,阻塞所有redo日志写汝操作,只能配置一个实时归档。
2.3 即时归档
即时归档同实时归档类似,区别在于发送时间,即时归档为写入联机日志文件后再发送redo日志
2.4 异步归档
异步归档依托于本地归档,定时发送redo日志。通过MAL系统发送redo日志到远程服务器
2.5 远程归档
换个主机的本地归档。远程节点的“本地归档”
3. 跟踪日志文件
分析处理数据库异常(数据库错误及性能问题)最重要的日志文件之一(另一个为事件日志文件后续介绍),该文件为文本文件,记录了各系统各会话执行的SQL语句、参数信息、错误信息、用户信息等。由dm.ini中SVR_LOG参数控制是否开启,具体配置由sqllog.ini控制。
sql日志的开启会影响系统性能,可实际生产环境是建议开启的,纠错及排查性能问题都要用到。为了使性能影响降到最低,可结合实际情况配置sqllog.ini,如只记录关注的相关记录以减少日志总量(SVR_TRACK_MASK和SVR_LOG_MIN_EXEC),同时设置SVR_LOG_ASYNC_FLUSH打开SQL日志异步刷盘提高系统性能
4. 事件日志文件
事件日志文件,位于log子目录下,命名规则一般为“dm_实例名_日期"对DM数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO错误等一些致命错误。事件日志文件主要用于系统出现严重错误时进行查看并定位问题
更多达梦相关技术文档可访问达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心