注册
DM8数据库联机日志管理
专栏/技术分享/ 文章详情 /

DM8数据库联机日志管理

BigQ 2026/08/28 177 0 0
摘要

一、联机日志基础知识

1.1 REDO日志作用

联机重做日志(REDO Log)是DM8数据库必备的物理日志文件,属于数据库核心物理存储结构,默认存储在数据库data数据目录下,遵循WAL 预写日志机制。数据库所有的数据修改操作,包括DML(INSERT/UPDATE/DELETE)、DDL(建表、改字段、建索引等),均会优先生成REDO日志记录,再完成内存数据页修改,最终刷入磁盘数据文件。

其核心作用为实例崩溃恢复:当数据库突发断电、进程异常终止、服务器宕机等故障时,内存中未写入磁盘的脏数据会全部丢失。数据库重启后,会自动读取联机REDO日志,重做所有已提交但未落地的事务,回滚所有未提交的事务,最终保证数据库数据的一致性与完整性。

1.2 REDO运行机制

DM8数据库REDO日志采用循环写入、循环覆写机制。数据库默认配置2组联机REDO日志文件,默认单文件大小4096M,命名规则为DAMENG01.log、DAMENG02.log。DM8通过LSN(日志序列号)标记日志写入位置,每一条REDO日志都对应唯一LSN,是日志切换、归档同步、故障恢复的核心标识。

redo日志写入、循环覆盖运行流程:

  1. 日志缓冲写入:数据库执行DML、DDL事务操作时,不会直接将REDO日志写入磁盘文件,而是优先写入REDO日志缓冲区,通过内存缓冲机制减少磁盘IO,提升数据库事务执行性能。
  2. FLUSH线程定时刷盘:日志FLUSH刷盘线程实时监控日志缓冲区状态,当事务提交或者执行检查点时,将缓冲区中REDO日志数据,批量、有序地刷入磁盘联机REDO日志文件,同时更新全局LSN日志序列号,保障日志数据持久化落地。
  3. 自动日志切换与归档触发:当正在写入的联机REDO日志文件达到预设最大容量时,系统自动触发日志切换动作,激活下一组空闲联机日志文件承接新事务日志写入;同时已完成写入的旧日志文件状态变更,自动触发归档线程执行归档动作。
  4. 日志循环覆写复用:待旧联机日志文件的归档动作完全完成、日志数据完整转存为归档日志后,该组联机日志标记为空闲状态,后续新产生的REDO日志可直接覆盖复用,实现联机日志循环写入、循环覆写的核心机制。

1.3 REDO核心视图

-- 查询REDO日志整体状态、当前活跃日志、数据库LSN信息 select * from v$rlog; -- 查询所有联机REDO日志文件路径、大小、文件编号 select * from v$rlogfile; --查询自服务启动后,当前节点 redo 日志切换的历史信息 select * from v$log_history;

二、数据库REDO维护管理

2.1 设置Redo日志后缀名

达梦数据库重做日志文件默认后缀为 log,日常运行过程中该类文件磁盘占用较高。当存储空间紧张时,部分运维人员因不熟悉数据库物理存储结构,误将命名格式为 DAMENGXX.log 的重做日志当作数据库日志直接删除清理,最终引发数据库异常宕机。

为规避此类人为误操作风险,可在数据库初始化阶段配置参数 RLOG_POSTFIX_NAME,自定义重做日志文件的后缀名称,依靠区分文件名的方式,防止日志文件被误删。

##初始化数据库,指定 RLOG_POSTFIX_NAME 修改redo日志后缀名 [dmdba@dm8 dmdata]$ dminit PATH=/data/dmdata PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=256 RLOG_POSTFIX_NAME=redo SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 [dmdba@dm8 DAMENG]$ ls -lrth DAMENG0* -rw-r--r-- 1 dmdba dinstall 256M 8月 11 15:55 DAMENG01.redo -rw-r--r-- 1 dmdba dinstall 256M 8月 11 15:55 DAMENG02.redo

2.2 新增REDO日志文件

在实际运维场景中,当数据库业务并发量大、事务频繁提交,导致联机REDO日志切换过于频繁,引发数据库性能抖动、归档压力增大、日志切换等待、业务卡顿等问题时,需要新增REDO日志文件组,提升日志写入吞吐量,均衡日志切换频率,保障数据库稳定运行。

-- 新增256M重做日志文件 SQL> alter database add logfile '/dm/data/DAMENG/DAMENG04.redo' size 256;

2.3 扩大REDO日志文件

在日志组数已满足部署规范、无需新增日志文件的前提下,可通过扩容单个REDO日志文件容量,延长单次日志写入周期,减少日志切换频次,降低系统IO开销与归档压力,稳定数据库运行性能。DM8仅支持REDO日志文件容量扩容,不支持缩容操作

--1. 将 redo 日志扩容到 512 M SQL> alter database resize logfile '/dm/data/DAMENG/DAMENG04.redo' to 512; 操作已执行 --2. 尝试 redo 日志缩容回 256M SQL> alter database resize logfile '/dm/data/DAMENG/DAMENG04.redo' to 256; alter database resize logfile '/dm/data/DAMENG/DAMENG04.redo' to 256; [-2410]:数据文件[/dm/data/DAMENG/DAMENG04.redo]大小无效.

2.4 迁移REDO日志存储路径

当数据库初始部署目录磁盘容量不足、磁盘IO性能较差、日志文件与数据文件混盘存放导致IO争抢严重,需要迁移REDO日志文件到独立磁盘或I/O性能更高的磁盘。通过独立存放联机日志,可分散数据库IO压力,避免磁盘故障牵连整库数据,同时提升数据库事务写入性能与运行稳定性。

--1. 将数据库转换成 MOUNT 状态 SQL> alter database mount; 操作已执行 --2. 修改日志文件存放路径,源文件会移动到新目录下 SQL> alter database rename logfile '/dm/data/DAMENG/DAMENG04.redo' to '/data/dmredo/DAMENG04.redo'; 操作已执行 --3. 打开数据库 SQL> alter database open; 操作已执行

2.5 删除REDO日志文件

当前期为优化高并发业务、缓解日志频繁切换压力而手动新增了多组REDO日志,后期业务量回落、并发事务减少,多余日志组造成磁盘资源浪费、日志管理冗余;或进行数据库标准化整改、日志架构规整、磁盘空间瘦身、恢复数据库默认标准日志架构时,需要删除多余的REDO日志文件。删除冗余日志可精简数据库物理存储结构,减少后台日志扫描与监控开销,保障日志组数量合理、架构规范,适配当前业务负载。

注意:禁止删除当前活跃日志、系统默认DAMENG01/02基础日志文件,仅可删除手动新增的最大编号空闲日志文件

--1. 删除多余的redo日志文件 SQL> alter database drop logfile '/data/dmredo/DAMENG04.redo'; 操作已执行 --2. 不能删除当前活跃日志 SQL> alter database drop logfile '/dm/data/DAMENG/DAMENG03.log'; alter database drop logfile '/dm/data/DAMENG/DAMENG03.log'; [-566]:目标联机日志文件上存在有效日志,不允许删除. --3. 无法删除ID较小的 redo 日志文件 SQL> alter database drop logfile '/dm/data/DAMENG/DAMENG02.log'; alter database drop logfile '/dm/data/DAMENG/DAMENG02.log'; [-3463]:只允许删除ID最大的文件.

2.6 每小时REDO日志切换频率

在实际运维场景中,数据库高并发业务波动、大批量数据写入、定时任务批量操作等场景,极易造成REDO日志短时间内频繁切换。若日志切换次数过高,会持续加重FLUSH刷盘线程与归档线程压力,引发磁盘IO飙升、事务等待、业务响应变慢、集群同步延迟等性能问题。为提前预判业务压力、优化日志文件大小与组数、规避性能瓶颈、保障数据库平稳运行,需要根据切换频次动态调整日志大小和个数。

--统计每小时REDO日志切换次数 SELECT TO_CHAR(RECTIME, 'yyyy-mm-dd hh24') AS log_hour, COUNT(*) AS switch_cnt FROM V$LOG_HISTORY GROUP BY TO_CHAR(RECTIME, 'yyyy-mm-dd hh24') ORDER BY log_hour;

三、REDO日志误删恢复

在运维过程中,若操作人员误通过rm命令物理删除正在使用的联机REDO日志文件,会直接威胁数据库正常运行与数据安全。该故障分为两种核心场景,处理方式完全不同:一种是数据库dmserver进程未停止、日志文件句柄未释放,可通过系统句柄无损恢复日志;另一种是数据库已重启、文件句柄彻底释放,无法直接恢复文件,可通过初始化新的实例,将新初始化的REDO日志,修改日志文件 db_magic

请注意:重做日志替换后拉起的数据库,无论经由哪种方案完成恢复,都存在潜在风险。为避免后续业务运行产生新问题、致使数据库服务再度故障,应当尽快将业务数据迁移部署至全新生产环境。

3.1 实验环境说明

本次故障修复基于如下环境进行操作:

环境参数 参数详情
CPU架构 x86_64
操作系统 Kylin Linux Advanced Server V10 (Sword)
数据库版本 03134284552-20260414-322369-20221

3.2 删除后数据库未重启

原理:数据库进程未关闭时,内核会保留已删除文件的句柄,可通过/proc目录还原文件,数据库恢复正常。

3.2.1 模拟误删除操作

  1. 模拟数据库业务操作
--1. 创建表 CREATE TABLE APP_USER.EMPINFO ( EMPNO INT, ENAME VARCHAR(20) NOT NULL, JOB VARCHAR(20), MGR INT, HIREDATE DATE, SAL NUMBER(10,2), COMM NUMBER(10,2), DEPTNO INT) STORAGE(ON DMDATA, CLUSTERBTR) ; --2. 插入数据 insert into "APP_USER"."EMPINFO"("EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO") values(18264, 'Tonya Pokora', '教育', 62030, '2020-04-11', 4513.63, 851.37, 43); insert into "APP_USER"."EMPINFO"("EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO") values(8545, 'Shenita Nortz', '国际组织', 98016, '1984-11-27', 21936.57, 170.57, 59); insert into "APP_USER"."EMPINFO"("EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO") values(47728, 'Chase Hascall', '采矿业', 23875, '2007-04-13', 9493.47, 144.67, 18); insert into "APP_USER"."EMPINFO"("EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO") values(36269, 'Maurice Brussell', '房地产业', 8394, '2017-07-04', 14950.74, 72.59, 15);
  1. 物理层面删除redo日志
[dmdba@dm8 DAMENG]$ rm -f DAMENG0*.log [dmdba@dm8 DAMENG]$ ll DAMENG0* ls: 无法访问 'DAMENG0*': 没有那个文件或目录
  1. 删除后,数据库运行正常
SQL> delete from APP_USER.EMPINFO where empno=36269; 影响行数 1 已用时间: 2.161(毫秒). 执行号:11313. SQL> commit; 操作已执行 已用时间: 5.322(毫秒). 执行号:11314. SQL> select count(*) from APP_USER.EMPINFO; 行号 COUNT(*) ---------- -------------------- 1 3

3.2.2 数据库修复流程

  1. 查询数据库PID进程号
[root@dm8 DAMENG]# ps -ef|grep dmserver dmdba 1320 1 0 14:30 ? 00:00:19 /dm/dmdbms/bin/dmserver path=/dm/data/DAMENG/dm.ini -noconsole
  1. 找到被删除REDO日志的文件句柄
[root@dm8 DAMENG]# ll /proc/1320/fd|grep delete lrwx------ 1 dmdba dinstall 64 8月 11 14:30 7 -> /dm/data/DAMENG/DAMENG01.log (deleted) lrwx------ 1 dmdba dinstall 64 8月 11 14:30 8 -> /dm/data/DAMENG/DAMENG02.log (deleted) lrwx------ 1 dmdba dinstall 64 8月 11 14:30 9 -> /dm/data/DAMENG/DAMENG03.log (deleted)
  1. 通过文件句柄复制删除的文件到原来的位置
[dmdba@dm8 fd]$ cp /proc/1320/fd/7 /dm/data/DAMENG/DAMENG01.log [dmdba@dm8 fd]$ cp /proc/1320/fd/8 /dm/data/DAMENG/DAMENG02.log [dmdba@dm8 fd]$ cp /proc/1320/fd/9 /dm/data/DAMENG/DAMENG03.log
  1. 进行数据库全备
SQL> backup database to shutdownbefore backupset '/backup/shutdownbefore'; 操作已执行
  1. 重启数据库验证数据
[root@dm8 DAMENG]# systemctl stop DmServiceDMSERVER [root@dm8 DAMENG]# systemctl start DmServiceDMSERVER
  1. 验证业务数据
[dmdba@dm8 fd]$ disql SYSDBA/Dameng123 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.232(ms) disql V8 SQL> select count(*) from APP_USER.EMPINFO; 行号 COUNT(*) ---------- -------------------- 1 3

3.3 删除后数据库发生重启

原理:在其他服务初始化一套初始化参数完全一致的空白临时实例,将新实例生成的完整REDO日志文件,传输替换到故障数据库的日志目录中,再通过 dmmdf 工具修改替换后日志文件的 db_magic、clsn 元数据,从而拉起故障数据库。

3.3.1 模拟误删除操作

  1. 模拟业务操作
--1. 创建表 CREATE TABLE "APP_USER"."DEPTINFO" ( "DEPTNO" INT, "DNAME" VARCHAR(30) NOT NULL, "LOC" VARCHAR(30)) STORAGE(ON "DMDATA", CLUSTERBTR) ; --2. 插入数据 insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(1388, 'Nichol Truan', '贵州省贵阳市乌当区'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(971, 'Lise Plyer', '山西省太原市晋源区'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(570, 'Valene Ohaver', '湖南省岳阳市湘阴县'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(1456, 'Quyen Sondrup', '广东省江门市台山市'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(260, 'Nohemi Hammersley', '浙江省衢州市龙游县'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(79, 'Krissy Escobar', '湖南省株洲市茶陵县'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(1043, 'Taisha Tintinger', '河北省唐山市迁西县'); insert into "APP_USER"."DEPTINFO"("DEPTNO", "DNAME", "LOC") values(594, 'Cordie Meche', '重庆市北碚区');
  1. 物理层面删除Redo日志
[dmdba@dm8 DAMENG]$ ll DAMENG0* -rw-r--r-- 1 dmdba dinstall 268435456 8月 12 13:54 DAMENG01.log -rw-r--r-- 1 dmdba dinstall 268435456 8月 12 13:51 DAMENG02.log -rw-r--r-- 1 dmdba dinstall 536870912 8月 12 13:56 DAMENG03.log [dmdba@dm8 DAMENG]$ rm -f DAMENG0*
  1. 删除REDO日志后,继续进行数据库操作
SQL> select LOC from APP_USER.DEPTINFO WHERE DEPTNO=594; 行号 LOC ---------- ------------------ 1 重庆市北碚区 SQL> update APP_USER.DEPTINFO set LOC='贵州省贵阳市乌当区' WHERE DEPTNO=594; 影响行数 1 SQL> select LOC from APP_USER.DEPTINFO WHERE DEPTNO=594; 行号 LOC ---------- --------------------------- 1 贵州省贵阳市乌当区
  1. 重启数据库,无法启动
[root@dm8 ~]# systemctl stop DmServiceDMSERVER [root@dm8 ~]# systemctl start DmServiceDMSERVER ##数据库日志: 2026-08-12 14:06:19.481 [ERROR] database P0000001328 T0000000000000001436 file [/dm/data/DAMENG/DAMENG01.log] is not exist 2026-08-12 14:06:19.481 [ERROR] database P0000001328 T0000000000000001436 file [/dm/data/DAMENG/DAMENG02.log] is not exist 2026-08-12 14:06:19.481 [ERROR] database P0000001328 T0000000000000001436 file [/dm/data/DAMENG/DAMENG03.log] is not exist 2026-08-12 14:07:07.482 [FATAL] database P0000002511 T0000000000000002511 [EID:285]nsvr_check_ts_datafile_if_necessary, /dm/data/DAMENG/DAMENG01.log not exist,can not startup

3.3.2 数据库修复流程

  1. 在新服务器初始化数据库实例,初始化参数与源库保持一致
##1. 可参考源数据库的 dminit_DAMENG_XXX.log,了解源库的初始化参数 [dmdba@dm8 newdmdata]$ dminit PATH=/data/newdmdata PAGE_SIZE=8 EXTENT_SIZE=16 LOG_SIZE=512 CHARSET=1 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123 LOG_PATH=/data/newdmdata/DAMENG/DAMENG01.log LOG_PATH=/data/newdmdata/DAMENG/DAMENG02.log LOG_PATH=/data/newdmdata/DAMENG/DAMENG03.log
  1. 正常启动新初始化的数据库,启动完成后进行关闭
[dmdba@dm8 bin]$ ./dmserver path=/data/newdmdata/DAMENG/dm.ini exit
  1. 复制新初始化数据库的REDO日志到要恢复的数据库数据目录
[dmdba@dm8 DAMENG]$ cp DAMENG0* /dm/data/DAMENG/ [dmdba@dm8 DAMENG]$ cd /dm/data/DAMENG/ [dmdba@dm8 DAMENG]$ ll DAMENG0* -rw-r--r-- 1 dmdba dinstall 536870912 8月 12 14:52 DAMENG01.log -rw-r--r-- 1 dmdba dinstall 536870912 8月 12 14:52 DAMENG02.log -rw-r--r-- 1 dmdba dinstall 536870912 8月 12 14:52 DAMENG03.log
  1. 通过dmmdf工具查看要恢复数据库的 db_magic
[dmdba@dm8 DAMENG]$ dmmdf type=1 file=/dm/data/DAMENG/SYSTEM.DBF dmmdf V8 ********************************************************** 1 db_magic=140527125 2 next_trxid=328704 3 pemnt_magic=731447538 4 enable_page_check=3 5 rlog_gen_for_huge=1 ********************************************************** Please input which parameter you want to change(1-5), q to quit: q
  1. 使用 dmmdf 工具依次修改REDO日志文件的 db_magic
##1. 按照以下步骤依次修改 DAMENG01.log、DAMENG02.log、DAMENG03.log 文件 [dmdba@dm8 DAMENG]$ dmmdf type=2 file=/dm/data/DAMENG/DAMENG01.log dmmdf V8 ********************************************************** 1 sig = DMRLOG 2 ver = 7007 3 chksum = 1921230114 4 sta = 1 5 n_magic = 7 6 db_magic = 223729181 7 len = 536870912 8 free = 12296192 9 clsn = 49497 10 clsn_fil = 0 11 clsn_off = 12296192 12 pemnt_magic = 570526317 13 fil_id = 0 15 next_seq = 3160 16 g_next_seq = 3160 17 arch_lsn = 0 18 arch_seq = 0 19 dbversion = 0x7000d 20 min_exec_version = V8.1.1.1 21 min_dct_version = 4 22 p_db_magic = 0 23 n_apply_ep = 0 24 apply_info_lsn = 0 pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 25 recv_p_db_magic = 0 26 recv_n_apply_ep = 0 recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 27 l_term_id = 0 28 term_id = 0 29 c_seqno = 3159 30 c_lsn = 49497 31 rpkg_crc_stand = 1 ********************************************************** You can only reset sta(4) or db_magic (6) or clsn (9) or clsn_fil(10) or clsn_off(11) or pemnt_magic(12) or fil_id(13) or next_seq(15) or g_next_seq(16) or p_db_magic(22) or n_apply_ep(23). Please input the num which one you want to change, q to quit: 6 <----修改数据库的 db_magic Input the new value: 140527125 <----输入获取到的 db_magic 值 ********************************************************** 1 sig = DMRLOG 2 ver = 7007 3 chksum = 2008429866 4 sta = 1 5 n_magic = 7 6 db_magic = 140527125 7 len = 536870912 8 free = 12296192 9 clsn = 49497 10 clsn_fil = 0 11 clsn_off = 12296192 12 pemnt_magic = 570526317 13 fil_id = 0 15 next_seq = 3160 16 g_next_seq = 3160 17 arch_lsn = 0 18 arch_seq = 0 19 dbversion = 0x7000d 20 min_exec_version = V8.1.1.1 21 min_dct_version = 4 22 p_db_magic = 0 23 n_apply_ep = 0 24 apply_info_lsn = 0 pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 25 recv_p_db_magic = 0 26 recv_n_apply_ep = 0 recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 27 l_term_id = 0 28 term_id = 0 29 c_seqno = 3159 30 c_lsn = 49497 31 rpkg_crc_stand = 1 ********************************************************** Do you want to quit and save the change to file (y/n): y <-----输入y进行确认 Save to file success!
  1. 通过数据库日志获取最后一条刷盘日志的 cur_lsn 值
##获取要恢复数据库的 cur_lsn [dmdba@dm8 log]$ cat dm_DMSERVER_202608.log 2026-08-12 14:06:19.021 [INFO] database P0000001328 T0000000000000001536 checkpoint begin, used_space[0], free_space[1073729536]... 2026-08-12 14:06:19.024 [INFO] database P0000001328 T0000000000000001536 ckpt2_log_adjust: full_status: 160, ptx_reserved: 0 2026-08-12 14:06:19.024 [INFO] database P0000001328 T0000000000000001536 ckpt2_log_adjust: ckpt_lsn(1475547), ckpt_fil(2), ckpt_off(56340480), cur_lsn(1475547), l_next_seq(13880), g_next_seq(13880), cur_free(56340480), total_space(1073729536), used_space(0), free_space(1073729536), n_ep(1), db_open_id(56) 2026-08-12 14:06:19.024 [INFO] database P0000001328 T0000000000000001436 shutdown archive subsystem... 2026-08-12 14:06:19.036 [INFO] database P0000001328 T0000000000000001436 OK 2026-08-12 14:06:19.036 [INFO] database P0000001328 T0000000000000001436 shutdown redo log subsystem...
  1. 使用 dmmdf 工具依次修改REDO日志文件的 cur_lsn 值
## 修改值比获取的值稍大即可 [dmdba@dm8 DAMENG]$ dmmdf type=2 file=/dm/data/DAMENG/DAMENG01.log dmmdf V8 ********************************************************** 1 sig = DMRLOG 2 ver = 7007 3 chksum = 2008429866 4 sta = 1 5 n_magic = 7 6 db_magic = 140527125 7 len = 536870912 8 free = 12296192 9 clsn = 49497 10 clsn_fil = 0 11 clsn_off = 12296192 12 pemnt_magic = 570526317 13 fil_id = 0 15 next_seq = 3160 16 g_next_seq = 3160 17 arch_lsn = 0 18 arch_seq = 0 19 dbversion = 0x7000d 20 min_exec_version = V8.1.1.1 21 min_dct_version = 4 22 p_db_magic = 0 23 n_apply_ep = 0 24 apply_info_lsn = 0 pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 25 recv_p_db_magic = 0 26 recv_n_apply_ep = 0 recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 27 l_term_id = 0 28 term_id = 0 29 c_seqno = 3159 30 c_lsn = 49497 31 rpkg_crc_stand = 1 ********************************************************** You can only reset sta(4) or db_magic (6) or clsn (9) or clsn_fil(10) or clsn_off(11) or pemnt_magic(12) or fil_id(13) or next_seq(15) or g_next_seq(16) or p_db_magic(22) or n_apply_ep(23). Please input the num which one you want to change, q to quit: 9 <-----选择修改clsn Input the new value: 1575547 <-----输入比获取的值大一些 ********************************************************** 1 sig = DMRLOG 2 ver = 7007 3 chksum = 2007957000 4 sta = 1 5 n_magic = 7 6 db_magic = 140527125 7 len = 536870912 8 free = 12296192 9 clsn = 1575547 10 clsn_fil = 0 11 clsn_off = 12296192 12 pemnt_magic = 570526317 13 fil_id = 0 15 next_seq = 3160 16 g_next_seq = 3160 17 arch_lsn = 0 18 arch_seq = 0 19 dbversion = 0x7000d 20 min_exec_version = V8.1.1.1 21 min_dct_version = 4 22 p_db_magic = 0 23 n_apply_ep = 0 24 apply_info_lsn = 0 pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 25 recv_p_db_magic = 0 26 recv_n_apply_ep = 0 recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 27 l_term_id = 0 28 term_id = 0 29 c_seqno = 3159 30 c_lsn = 49497 31 rpkg_crc_stand = 1 ********************************************************** Do you want to quit and save the change to file (y/n): y <-----选择y进行确认 Save to file success!

修改其他日志文件,存在的报错:

##1. 该报错不影响修复 Please input the num which one you want to change, q to quit: 9 Input the new value: 1575547 ERROR, rlog is active, dmserver should shutdown normal.
  1. 修改数据库 dm.ini文件,增加RLOG_CHECK_SPACE 参数
[dmdba@dm8 DAMENG]$ vi dm.ini RLOG_CHECK_SPACE = 2
  1. 启动数据库,验证数据库数据
[root@dm8 ~]# systemctl start DmServiceDMSERVER [dmdba@dm8 ~]$ disql SYSDBA/Dameng123 SQL> select LOC from APP_USER.DEPTINFO WHERE DEPTNO=594; 行号 LOC ---------- --------------------------- 1 贵州省贵阳市乌当区

四、生产环境联机日志配置建议

4.1 修改REDO日志后缀名

通过初始化参数RLOG_POSTFIX_NAME自定义联机 REDO 日志文件后缀,添加redo时不使用 log 结尾的后缀名。数据库初始化完成后,联机 REDO 日志默认文件后缀为log,极易被运维人员误识别为普通日志文件,在执行批量日志清理操作时存在误删除联机 REDO 核心日志文件的高危风险。初始化使用该参数可更改联机 REDO 日志文件后缀,与普通日志文件做区分,有效规避运维批量清理文件过程中误删 REDO 日志的重大安全风险,保障数据库事务恢复与实例正常运行。

4.2 REDO日志独立存放

将联机 REDO 日志部署至独立高速磁盘,不与数据文件、归档日志共用存储介质。通过存储资源物理隔离,规避多类文件之间的 IO 资源争用冲突,减少 IO 竞争带来的性能损耗,保障日志缓存向联机 REDO 日志的刷写效率,提升事务日志落盘速度,同时降低因 IO 瓶颈引发的实例性能抖动、事务等待等问题,保障数据库事务提交与故障恢复能力。

4.3 合理配置REDO日志大小

结合实际业务访问特征与事务负载情况,合理配置联机 REDO 日志文件大小。建立常态化巡检机制,持续监控 REDO 日志切换频率,针对日志切换过于频繁的场景,及时调整 REDO 日志单文件大小或日志组数量进行扩容优化,减少短时间内频繁发生日志切换,降低由此带来的数据库性能抖动与业务响应延迟,保障业务高峰期数据库运行平稳。

4.4 每组REDO日志大小保持一致

进行联机 REDO 日志扩容操作时,需保证所有 REDO 日志组成员文件大小保持完全一致。若各日志文件规格不一致,会造成日志组之间处理能力不均衡,引发日志切换异常、检查点波动等潜在问题。统一 REDO 文件大小,可保障日志切换流程稳定可控,避免因文件大小差异带来的性能隐患,维护数据库事务处理的稳定性。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服