资讯动态

达梦DM8数据库归档配置实战:从重做日志到Mount状态详解

发布时间:2026/9/18 19:56:47 来源:尧图企业网站定制
做达梦数据库运维的人迟早会碰上归档配置这件事。特别是数据库要用于备份恢复、要做主备同步或者你正为恢复过程中的日志断层发愁的时候开启归档几乎是绕不开的第一步。DM8达梦8和常见商业数据库的逻辑类似但具体操作又有一点小门槛很多人第一次配置时会栽在“必须先进入MOUNT状态”“配置了dmarch.ini但没生效”“归档目录写满”这类问题上。这篇内容我就把从零配置归档的完整链路讲透包括命令、参数、坑点以及在正式环境里我建议你怎么操作。1. 归档之前的必要认知先搞清楚 DM8 归档到底在解决什么问题1.1 从重做日志说起达梦数据库和大部分关系型数据库一样在写入数据时不会立刻把每个变更都刷到数据文件里而是先记录重做日志redo log。这样做的好处是事务提交很快数据库可以把随机小写入先攒成顺序大写入。但重做日志文件是有固定大小的比如 128MB 一个写满一个就切到下一个。如果日志循环覆盖了而数据文件还没来得及完整写入这时候系统一旦崩溃重启恢复时就有可能出现“日志断档”丢失一部分本可以恢复的提交记录。归档日志的作用就是在重做日志文件写满准备覆盖之前把它完整复制一份出来放到一个独立的归档目录里。这个动作不阻塞业务但会让 MPP 或者主备场景中的日志变更路径变得更可靠。你可以把它理解成“日志的保险箱”主日志循环删掉不要紧只要归档里有一份后续做介质恢复、时间点恢复、备库同步就有材料可用。DM8 的归档分为本地归档和远程归档两种。本地归档就是把日志文件保存在本机磁盘上主要用于配合备份做恢复远程归档则是把归档日志通过网络发送到另一个节点是达梦 Data Watch 主备同步、读写分离集群中的基础能力。这篇内容重点讲本地归档因为多数单机环境、备份环境先把 local 归档配置好就够用。1.2 开启归档前必须确认的事项不管在 Windows 还是 Linux 上开启归档之前有些事情不提前确认后面很容易难受。第一确认数据库版本。DM8 不同小版本的实例管理界面会有一点差别但核心 SQL 语法基本一致。如果还在用 DM7部分视图名和归档参数名会有差异不能完全照搬先执行SELECT * FROM V$VERSION;看一眼版本信息。第二确认磁盘空间。归档文件不是临时文件它会持续累积。单机业务如果每天产生 10GB 重做日志你就得准备至少 30GB~50GB 的独立空间用来保留三天归档。我后面会专门说估算方法这里先提醒一句千万不要把归档目录和数据文件放在同一个分区还不做空间限制否则某一天磁盘满整个实例都会陷入长时间挂起。第三确认数据库的启动状态和连接方式。开启归档的核心命令必须让实例处于 MOUNT 状态。这个状态很特殊实例已启动参数文件已读取但数据文件尚未开放给业务使用。所以如果你有一个正在跑的 OLTP 库直接ALTER DATABASE MOUNT;会把当前的业务连接全部断开。生产环境操作前必须提前停应用或者在维护窗口操作。第四最容易被忽略的一点一定要先做一次完整备份。归档模式是对数据库运行方式的重大改变万一中途操作失误一个全备就是你的后悔药。达梦里可以用BACKUP DATABASE BACKUPSET /dm8/backup/full_bak;快速做物理备份时间窗口不够就先做增量但全备更稳妥。2. 两种主流开启方式命令行动手与图形化向导2.1 使用 disql 命令行开启归档最推荐的方式如果是 Linux 服务器尤其是云服务器没装图形桌面的场景命令行是你最可靠的方式。而且把命令写进脚本以后初始化新库、批量环境部署都能直接复用。先创建归档目录。这个步骤很多人会忽略权限建议显式设置文件属主。mkdir -p /dm8/arch chown -R dmdba:dinstall /dm8/arch注意安装达梦时通常会用dmdba用户和dinstall组如果你不是默认安装用id dmdba确认一下别把目录属性弄错。数据库进程要以该用户运行目录读写权限也必须放开给这个用户。然后切到 dmdba 用户登录 disql。su - dmdba disql SYSDBA/你的密码localhost:5236登录成功后先把实例切换到 MOUNT 状态。ALTER DATABASE MOUNT;这一步如果实例原本是 OPEN 状态会立刻中断所有连接所以要确保你已经等业务彻底停止后操作。命令执行成功会返回“操作已执行”或类似提示。接着添加归档配置。这里用的是 DM8 联机配置归档的典型语句ALTER DATABASE ADD ARCHIVELOG DEST/dm8/arch, TYPElocal, FILE_SIZE128, SPACE_LIMIT10240;参数分别解释一下DEST 是归档文件存放路径必须写绝对路径并且目录已经存在。TYPE 当前写 local表示本地归档。FILE_SIZE 是单个归档文件的最大大小单位 MB这里设成 128MB切到下一个文件时会自动生成新文件。SPACE_LIMIT 是所有归档文件总的空间上限单位 MB这里 10240 表示最多 10GB超过限制之后达梦会自动清理最旧归档文件。然后打开归档模式ALTER DATABASE ARCHIVELOG;最后把数据库恢复到 OPEN 状态ALTER DATABASE OPEN;验证是否生效我用得最多的 SQL 是SELECT ARCH_MODE FROM V$DATABASE;返回 1 表示当前是归档模式返回 0 是非归档模式。想看得更细可以查归档配置视图SELECT * FROM V$DM_ARCH_INI;这个视图会显示归档目标、类型、文件大小、空间限制、当前状态VALID等信息是日常排查归档问题的主要入口。还有一点要提醒ADD ARCHIVELOG这个语句不是任何时候都能重复执行。如果你已经配置过一个归档目标想改路径或大小要用MODIFY ARCHIVELOG比如ALTER DATABASE MODIFY ARCHIVELOG DEST/dm8/arch02, TYPElocal, FILE_SIZE256, SPACE_LIMIT20480;如果在 ADD 时报错“归档配置已存在”就先用SELECT * FROM V$DM_ARCH_INI;看一下当前配置再决定是要 MODIFY 还是 DELETE 后重新添加。2.2 使用 DM 管理工具手动配置新手更容易上手如果你对命令行不熟或者第一次操作想有一个可视化确认DM 管理工具DM Management Tool会友好很多。连接数据库实例后在左侧对象树里找到你的实例右键选择“管理服务器”或者“实例管理”在不同版本里菜单名称可能叫“归档管理”“归档配置”但基本都在管理界面的一个页签里。进入归档配置页签后通常会有“归档模式”的勾选项。勾选“归档”然后填写归档目标路径也就是你想存放归档日志的目录再填单个文件大小和空间上限。填完点“应用”或“保存”工具会把这些配置写入到 dmarch.ini 里部分版本还会弹出提示告诉你需要重启数据库实例才能生效。这时候要注意一个细节图形化工具和命令行最大的区别是工具写的是配置文件有些版本不会自动帮你执行ALTER DATABASE ARCHIVELOG所以你可能会遇到“配置都填好了但SELECT ARCH_MODE FROM V$DATABASE;查出来还是 0”的情况。遇到这种问题不要慌按下面的顺序手动切一次ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;当然如果你用的是比较新的 DM8 管理工具它内部会自动处理这些步骤操作完工具提示你会重启实例那就不用手动执行。2.3 两种方式如何选择我的习惯是Linux 生产环境一律用命令行尤其是要批量部署几套环境时把 SQL 写进 shell 脚本每套库执行一遍保证输出一致。图形化工具更适合做“一次性学习验证”或者给刚接触达梦的同事演示整个配置过程。不过不管用哪种方式最终都是改两样东西一个是 dmarch.ini 里归档目标相关参数一个是数据库运行参数里必须开启 ARCH_INI 开关。只是命令行在执行ALTER DATABASE ADD ARCHIVELOG时达梦内部会同步更新归档配置文件和实例内存参数不用你手工去碰 ini而图形化工具本质是帮你编辑配置文件。理解了这个底层关系后面遇到“配置了但没生效”就不会一头雾水。3. 核心配置参数逐一拆解改完别急着重启3.1 dm.ini 与 dmarch.ini 中你真正需要关心的参数很多运维喜欢直接上手改参数但改完重启起不来再回头找问题效率很低。我建议先搞清楚这几个关键参数再动手。先说 dm.ini。这个文件是数据库实例的主参数文件在数据目录下比如/dm8/data/DAMENG/dm.ini。归档相关的核心开关就是ARCH_INI它控制实例启动时是否加载归档配置。用命令行方式开启归档时这个参数会被自动置为 1手工改配置文件时需要自己把这一项设置成 1。再说 dmarch.ini。这个文件专门保存归档配置通常也在数据目录下。通过 ALTER DATABASE ADD ARCHIVELOG 配置后内容会写入这个文件。几个关键参数我整理成了表格参数含义示例值注意点ARCH_DEST_STATUS归档目标状态VALID只有 VALID 才会生效排查问题先看这个ARCH_TYPE归档类型local / remote单机备份用 local主备同步用 remoteARCH_DEST归档文件存放路径/dm8/arch目录必须存在dmdba 必须有写权限ARCH_FILE_SIZE单个归档文件大小MB128太小则切换频繁太大不利于按粒度恢复ARCH_SPACE_LIMIT归档总空间上限MB102400 表示不限制生产环境不建议设为 0这里重点说明ARCH_SPACE_LIMIT。我遇到过不少同学图省事直接设成 0觉得“不限制最安全”。实际上在持续高并发写入的系统里归档文件生成速度非常快一天几十 GB 很常见如果不限制磁盘被写满是早晚的事。盘满了之后不只归档写不进去整个实例的正常 DML 都会受影响。反过来设置了空间上限之后达梦会在总量达到上限时自动清理最旧的归档文件。但注意这个清理动作不一定能完美跟上写入速度特别是系统突然出现大量日志切换时仍然可能触发磁盘告警。所以更稳妥的做法是把ARCH_SPACE_LIMIT设成一个既能保留足够恢复窗口、又明显低于磁盘容量的值同时用外部监控盯着。3.2 归档目录规划与磁盘空间估算归档目录的规划我一般会用“业务日变化量 x 保留天数 x 冗余系数”来估算。比如一个典型的 OLTP 系统每天新增数据大概 20GB更新也很多重做日志日产生量大约在 15GB。如果要求保留最近 7 天的归档那么至少需要15 * 7 105GB。考虑到业务大促、批量任务时日志量可能是平时的 2 到 3 倍我建议留 200GB 以上归档空间上限可以设定为SPACE_LIMIT 204800即 200GB。归档目录最好单独使用一个挂载点不要和数据库数据文件、系统盘放在一起。原因很简单如果数据盘满了数据库本来就会告警再被归档文件一冲可能连最基本的备份任务都跑不动。独立挂载点还能避免你删归档时误碰数据文件。权限方面目录属主必须是 dmdba不能用 root 创建的目录直接丢给数据库写否则大概率遇到权限错误。日常巡检时我建议至少盯两个指标df -h看归档目录所在分区剩余空间归档目录中最近一个文件的时间比如ls -lt /dm8/arch | head如果最新文件停止更新超过 30 分钟而系统又有写入压力说明归档可能没正常工作。如果想看得更细可以连到数据库里查归档视图SELECT PATH, START_TIME, END_TIME, SIZE FROM V$ARCHIVED_LOG ORDER BY END_TIME DESC;这条 SQL 能看到每个归档文件的路径、写入开始结束时间和文件大小排查“归档有没有断”非常直观。3.3 开启归档后的性能影响与监控很多人担心开启归档后业务性能明显下降。说实话正常配置下影响并不大因为归档不是每条 SQL 提交时都写归档文件而是在重做日志文件切换时把整个日志文件复制归档。日志切换本身又是顺序写比随机写快得多。实测下来多数环境性能损耗在 5% 左右如果磁盘足够快甚至感知不到。但有两个场景要特别小心。第一归档目录和数据文件在同一块机械盘。日志切换时数据库既要写新的重做日志又要读旧日志写归档磁盘寻道压力会瞬间翻倍这个场景下性能损耗可能到 15% 以上。所以有条件的话把归档目录放到 SSD 或者独立盘。第二开了SPACE_LIMIT自动清理但归档目录里正好有文件被备份任务占用。清理任务碰到被占用的文件一般会跳过或者延迟这时候归档总大小会临时超过限制短时间磁盘空间告警。这种情况不用太慌等备份结束达梦会自动补清理但如果长期不清理就需要人为介入删除一些确定用不上的归档文件。监控层面除了上面提到的V$ARCHIVED_LOG之外还有一个更简单的状态字段。用SELECT ARCH_MODE FROM V$DATABASE;确认是否还在归档模式用SELECT * FROM V$DM_ARCH_INI;确认每个归档目标状态是不是 VALID。我习惯写一个脚本每小时跑一次把这两个查询结果输出到日志再配合df -h检测磁盘基本能覆盖 90% 的归档故障。4. 实操过程中常见的卡点与排查方法4.1 数据库为什么在开启归档后起不来这个场景我见过太多次了尤其是在手工编辑 dmarch.ini 的场景。现象就是重启实例时数据库起不来查看日志才发现在归档初始化阶段就失败了。排查步骤其实很固定第一步看实例日志。达梦数据目录下会有类似dm_DAMENG.log的文件用tail -200翻到最后重点找 ERROR 和 arch 关键字的行。常见提示是归档目录不存在或者对归档目录没有写权限。第二步检查归档目录。ls -ld /dm8/arch看属主和权限。如果属主是 root用chown -R dmdba:dinstall /dm8/arch修正。第三步检查 dmarch.ini 格式。手工编辑这个文件时最容易出现行尾有隐藏空格、全角字符、参数名拼写错误。直接对比我之前表格里的参数名逐行检查。还有一点如果文件里同时存在多个归档目标别让它们在配置格式上互相冲突。第四步确认 dm.ini 中ARCH_INI是否为 1。如果这个开关没打开即使 dmarch.ini 写得再对实例启动时也不会去加载归档配置也就不会进入归档模式。另外如果你是在 OPEN 状态下直接执行了ALTER DATABASE ARCHIVELOG;达梦会明确报错提示数据库必须处于 MOUNT 状态。这时候不要慌先执行ALTER DATABASE MOUNT;再执行 ARCHIVELOG最后 OPEN。4.2 归档目录满导致数据库像“卡死”一样归档目录写满是个经典事故。现象非常吓人整个数据库的 DML 变慢应用端报错一大堆甚至连接到数据库都困难。有人会去查锁、查会话最后发现是磁盘满了。如果你是紧急处理先看df -h确认哪个分区满了。如果满的就是归档目录用ls -lt /dm8/arch找出那些很早之前、确定已经做完备份的归档文件可以先手动删除一部分旧的。注意手动删除只是应急不要连续删正在被数据库写入的最新文件否则可能有归档断档的风险。清理出一点空间后数据库通常会自行恢复可用。这时候再连进去把ARCH_SPACE_LIMIT改成合理值或者把归档目录迁移到更大的分区。迁移目录的方法不复杂但也要走标准流程。先把新目录创建好并授权然后执行ALTER DATABASE MOUNT; ALTER DATABASE MODIFY ARCHIVELOG DEST/dm8/arch02, TYPElocal, FILE_SIZE128, SPACE_LIMIT20480; ALTER DATABASE OPEN;当然老目录下的历史归档文件需要你自己决定是保留还是迁移数据库不会自动帮你搬。从这个教训你可以看出来一开始就设好SPACE_LIMIT和独立分区比事后救火省太多事。4.3 日志切换不动、没有新归档文件生成有时候你开启了归档模式但等了半天发现归档目录里一个文件都没增加第一反应就是“配置有问题”。其实这不一定是问题要结合业务场景判断。归档文件的生成时机是重做日志文件从当前日志文件切换到下一个日志文件的那一刻。如果系统极其空闲长时间没有写入重做日志里几乎没有变化那确实可能不产生新归档。这是正常现象不是故障。但如果业务明明有写入归档文件却一直不更新就要检查下面几点1先确认归档模式还开着执行SELECT ARCH_MODE FROM V$DATABASE;。2查看V$DM_ARCH_INI确认归档目标的状态是 VALIDDEST 路径正确。3手动触发一次日志切换。如果达梦版本支持可以执行ALTER SYSTEM SWITCH LOGFILE;执行成功后观察/dm8/arch目录是否出现新文件。如果出现了说明归档链路本身没问题如果没出现再查实例日志。4检查实例日志里有没有归档写入失败的信息比如磁盘满、权限错。有的话按前面说的方法修正。这个问题的关键是把“业务正常但没归档”和“归档链路断了”区分开来别一上来就重启数据库。优先用视图和手动日志切换做小范围验证。4.4 临时关闭归档回到非归档模式有时候测试环境要做对比验证或者你想清理掉归档相关配置临时关闭归档也是常见需求。关闭归档同样要在 MOUNT 状态下操作。先确保业务已停止然后ALTER DATABASE MOUNT; ALTER DATABASE NOARCHIVELOG; ALTER DATABASE OPEN;执行完再查SELECT ARCH_MODE FROM V$DATABASE;如果返回 0说明已经回到非归档模式。如果你还想把归档目标从配置里彻底删除可以在 MOUNT 状态下再执行ALTER DATABASE DELETE ARCHIVELOG DEST/dm8/arch, TYPElocal;注意这条命令删的是“归档目标配置”不是归档文件本身。历史归档文件依然会留在 /dm8/arch 目录里。这些文件要不要删、什么时候删取决于你是否还有未完成任务比如需要在某个时间点恢复数据。我的建议是配置删掉可以文件先保留几天确认一切正常后再手动清理。否则你刚关掉归档就把历史文件全部删掉万一有恢复需求就真的回不去了。5. 一点运维经验补充最后说几个我自己在实际项目里总结出来的细节不是官方文档里一定会写的”。第一次在生产环境开启归档前我强烈建议先做一次全备份并且把执行前的重做日志序列号记录下来。这样就算操作过程中出了意外你至少知道自己的数据恢复到哪个位置是安全的。另外不要把归档配置过程当成“一次性手工活”。你现在配好了可能过几个月要新加一套环境或者灾备演练要再搭一套库如果每次都打开图形界面点来点去很容易漏步。不如把整套 SQL 整理成一个脚本放到统一的自动化发布平台里。我自己的脚本大概长这样先检查目录再检查当前模式然后执行 MOUNT、ADD ARCHIVELOG、ARCHIVELOG、OPEN最后用 SELECT 断言验证结果。一旦断言失败脚本直接退出避免带病状态流入下一步。还有一个容易踩的坑远程归档和本地归档不要混用。如果你不是在做达梦 Data Watch 主备同步只是单机做备份老老实实只用TYPElocal。我见过有同事只配了远程归档却没搭配合适的主备环境结果归档日志发不出去主库重做日志切换时一等再等最后业务堵塞。这个问题排查起来很绕一开始就明确归档用途能少走很多弯路。归档配置本身不难难的是一开始就要想清楚目的你是为了备份恢复留后路还是为了做主备同步。明确了目的再决定用 local 还是 remote定好 FILE_SIZE 和 SPACE_LIMIT按上面的步骤操作基本能一步到位。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价