暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

达梦 DM9 初体验:DM8 单机数据库升级实录

原创 孙莹 2026-09-08
257

达梦 DM9 初体验:DM8 单机数据库升级实录

前言

我们现有的数据库环境大部分仍在使用 DM8。这次选择一套 CentOS 7.9 单机环境,尝试保留原数据库文件,通过替换数据库软件升级到 DM9。

升级后,数据库进入 OPEN 状态,业务模式的对象总数与升级前一致,启动日志也记录了数据字典和回滚段版本的变化。创建系统包时出现了编译警告,现有记录没有给出后续处理结果,业务读写和恢复演练也缺少完整记录。下面整理这次原库升级的操作过程,并标出后续验收需要补充的检查。

1. 本次升级的范围与版本

这次先正常关闭 DM8 并完成脱机备份,再安装 DM9 软件,由 DM9 启动原有实例。整个过程沿用原数据库文件,不涉及新建业务库或逻辑导出、导入。

本文记录的是表中的单机版本组合。DM8 官方《版本升级》介绍了正常停库和跨版本格式变化的要求,并未给出所有 DM8 构建直接升级到 DM9 的依据。换用其他版本前,应核对目标 DM9 安装介质随附的升级说明和支持范围,并在数据库副本上演练。DM8 官方《版本升级》

项目 本次环境
操作系统 CentOS 7.9
CPU / 架构 4 核 / x86_64
内存 16 GB
部署方式 单机
数据库端口 5236
升级前数据库 DM Database Server x64 V8
DM8 构建号 03134284368-20250917-293539-20149
DM9 安装介质 dm9_20260514_x86_centos7_64.iso
升级后构建号 03151060506-20260417-322930-20218
数据库软件目录 /home/dmdba/dmdbms
数据目录 /dmdata/data
实例配置文件 /dmdata/data/DAMENG/dm.ini
归档目录 /dmdata/arch
备份目录 /dmdata/dmbak
操作系统服务名 DmServiceDAMENG
数据库实例名 DMSERVER

服务名中的 DAMENG 是注册服务时指定的后缀,与查询得到的实例名 DMSERVER 不同。后面检查服务时使用前者,查询实例和查找本次日志时使用后者。

介质文件名中的日期与数据库构建号中的日期并不相同,应分别记录,实际运行版本以数据库查询结果为准。本次使用试用许可,启动日志提示许可到期日为 2027-04-17;其他环境需要核对自己的许可类型和有效期。

CentOS Linux 7 已于 2024 年 6 月 30 日结束维护。本文保留 CentOS 7.9 的环境信息,以便对照现有环境的升级过程。新项目选型仍需检查操作系统的支持周期。CentOS 官方生命周期说明

文中的版本、日志和对象数量均来自本次操作记录,业务模式名统一脱敏为 APP_RULE。“补充检查”和“演练示例”是整理流程时增加的内容,尚无本次执行通过的记录。

2. 升级前保存版本和业务基线

2.1 确认连接的是待升级实例

使用 DM8 安装目录中的客户端连接,按提示输入密码,不把密码写入命令或截图。

# dmdba 用户 /home/dmdba/dmdbms/bin/disql SYSDBA
SELECT * FROM V$VERSION; SELECT NAME, INSTANCE_NAME, HOST_NAME, SVR_VERSION, DB_VERSION, BUILD_VERSION, BUILD_TIME, STATUS$ FROM V$INSTANCE;

本次升级前记录到的主要信息如下。

检查项 升级前结果
数据库版本 DM Database Server 64 V8
构建号 03134284368-20250917-293539-20149
DB Version 0x7000d
实例名 DMSERVER
实例状态 OPEN

使用绝对路径可以减少新旧客户端混用,但客户端显示的 disql V8 或 disql V9 仍然只表示客户端版本。服务端版本要看 V$VERSION 和 V$INSTANCE。

2.2 保存业务对象和数据核对基线

SELECT USERNAME FROM DBA_USERS ORDER BY USERNAME; -- 补充检查:按实际类型展开,避免遗漏未单列的对象。 -- APP_RULE 为脱敏示例,执行时替换成实际业务模式名。 SELECT OWNER, OBJECT_TYPE, COUNT(*) AS OBJECT_COUNT FROM DBA_OBJECTS WHERE OWNER = 'APP_RULE' GROUP BY OWNER, OBJECT_TYPE ORDER BY OWNER, OBJECT_TYPE; SELECT COUNT(*) AS TOTAL_OBJECTS FROM DBA_OBJECTS WHERE OWNER = 'APP_RULE';

升级前的统计结果为 18 张表、19 个索引,总对象数为 39;单列的视图、序列、过程、函数和触发器数量均为 0。表和索引合计只有 37 个,还有 2 个对象没有在原查询的分类列中展示,需要用上面的分组查询确认其类型。

对象数量可用于初步比较。补充检查还应保存对象名称及定义、关键表实际行数,以及业务能够核对的汇总值,例如固定日期范围内的记录数和金额合计。停止业务写入后保存最终基线,升级后使用相同的查询条件复核。

2.3 检查 PURGE 状态和升级条件

SELECT * FROM V$PURGE;

本次返回:

OBJ_NUM IS_RUNNING PURG_FOR_TS 0 N N

这条结果只反映 PURGE 状态,业务连接和未提交事务还需另行检查。停库前应停止应用写入、暂停定时任务,并确认事务已经收尾。跨越历史格式版本时,还要按相应升级章节核对额外条件。DM8 官方《版本升级》

补充检查时,应记录页大小、字符集、大小写敏感设置、兼容模式,以及实际使用的驱动版本、归档和备份配置。涉及加密、外部文件、空间数据等功能时,还要单独核对其升级要求和依赖。

在操作系统侧检查剩余空间:

# dmdba 用户;检查数据、归档、备份和软件所在文件系统。 df -h /home/dmdba /dmdata/data /dmdata/arch /dmdata/dmbak du -sh /home/dmdba/dmdbms /dmdata/data /dmdata/arch /dmdata/dmbak

空间预算应同时包含 DM9 软件、旧软件副本、数据库备份、升级日志,以及恢复演练所需空间。备份文件的大小也不能直接当作数据库占用空间。

3. 正常停库,保留可用于回退的备份

3.1 停止业务并正常关闭 DM8

先停止应用和其他写入入口,保存停写后的核对结果,再关闭数据库服务。

# dmdba 用户 /home/dmdba/dmdbms/bin/DmServiceDAMENG stop

本次返回:

Stopping DmServiceDAMENG: [ OK ]

补充检查时,结合服务状态、数据库日志和进程信息确认目标实例正常退出。

# root 用户,输出中的其他实例需要分别识别。 systemctl status DmServiceDAMENG.service --no-pager pgrep -a dmserver

进程退出后,还要查日志确认数据库正常关闭。如果旧库异常退出,应先用原 DM8 版本恢复到能够正常启动、正常关闭的状态,再继续升级。跨日志格式版本的升级对正常停库有明确要求。DM8 官方《版本升级》

3.2 使用原 DM8 工具做脱机备份

在替换软件之前,使用原安装目录的 dmrman。此时先保留旧版 DmAPService,待备份和校验完成后再停止它。

# dmdba 用户 /home/dmdba/dmdbms/bin/dmrman

在 RMAN 提示符下执行以下命令。备份集应使用本次专用的新目录,下面保留实际使用的目录名。

BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET '/dmdata/dmbak/FULL20260825';

原始输出包括:

backup successfully! time used: 00:00:05.657

备份目录中生成了 .bak 和 .meta 文件,ls -lh 显示 .bak 约为 1.6 GB。5.657 秒是这条备份命令的耗时。

补充检查:执行备份集校验,并保存结果。

CHECK BACKUPSET '/dmdata/dmbak/FULL20260825'; EXIT;

backup successfully! 表示备份命令成功;CHECK BACKUPSET 检查备份集有效性;恢复演练还需实际还原并启动数据库,三者应分别记录。这次保留了备份成功输出,校验和恢复能力仍待验证。DM8 官方《备份还原实战》

3.3 保存软件、配置和服务定义

回退需要同时准备原 DM8 软件和升级前的数据状态,还要保留配置、许可及加密相关文件。只备份软件目录不够。

补充留档内容包括 dm.ini、实际使用的归档及其他实例配置、控制文件、软件环境配置、有效许可文件、加密所需文件,以及服务定义和自启动状态。数据文件可能分布在多个路径,备份范围应按实例实际文件清单核对。

下面是服务定义的留档示例,保存目录应由管理员预先创建并限制访问权限。

# root 用户;PRE_DM9_20260825 为补充留档目录。 mkdir -p /dmdata/dmbak/PRE_DM9_20260825 chmod 700 /dmdata/dmbak/PRE_DM9_20260825 systemctl cat DmServiceDAMENG.service > /dmdata/dmbak/PRE_DM9_20260825/DmServiceDAMENG.unit.txt systemctl cat DmAPService.service > /dmdata/dmbak/PRE_DM9_20260825/DmAPService.unit.txt systemctl is-enabled DmServiceDAMENG.service systemctl is-enabled DmAPService.service

这些文本可用于核对配置,恢复服务还需保留服务覆盖配置、权限、/etc/dm_svc.conf 和用户环境变量。归档配置及实际启用状态也要单独核查,目录存在并不能说明已经启用归档。

备份、校验和留档完成后,停止旧版 DmAPService,再复制软件目录。

# root 用户 systemctl stop DmAPService.service pgrep -a dmap
# dmdba 用户 # 确认目标备份目录不存在,避免重复执行时形成嵌套目录。 cp -a /home/dmdba/dmdbms /home/dmdba/dmdbms8_bak

核对副本内容和权限后,再腾出原路径安装 DM9。补充建议是将旧软件目录改名保留,便于升级失败后核对文件。

# dmdba 用户;先确认 dmdbms8_retired 不存在,所有相关旧进程已停止。 mv -T /home/dmdba/dmdbms /home/dmdba/dmdbms8_retired

备份、校验或目录操作失败时,先处理原因,再继续安装。同机保存的软件和备份只能应对部分操作失败,正式升级还应在独立存储上保留副本。

4. 安装 DM9,并将服务指向原实例

4.1 安装数据库软件

将介质挂载到空闲挂载点。示例假定当前目录中已有该 ISO 文件;执行前应核对介质来源及提供方的校验信息。

# root 用户 mount -o loop,ro dm9_20260514_x86_centos7_64.iso /mnt
# dmdba 用户 cd /mnt ./DMInstall.bin -i

本次安装选择服务器组件,安装目录为 /home/dmdba/dmdbms。安装器提示系统存在其他版本时,应先核对旧进程和安装路径,避免影响同机其他实例。

安装结束后,根据本次安装器提示,以 root 用户执行:

/home/dmdba/dmdbms/script/root/root_installer.sh

本次脚本创建了相关监控服务和 DmAPService,并启动 DmAPService。不同介质的提示可能有差异,应以正在安装的版本为准。

软件安装完成后,将使用已有的 /dmdata/data/DAMENG/dm.ini 启动实例。不要对原数据路径运行 dminit 创建新库。

4.2 注册数据库服务并核对路径

# root 用户 cd /home/dmdba/dmdbms/script/root ./dm_service_installer.sh -t dmserver \ -dm_ini /dmdata/data/DAMENG/dm.ini \ -p DAMENG

本次返回:

创建服务(DmServiceDAMENG)完成

补充检查:核对系统服务和脚本指向的 DM9 软件目录、原实例配置文件,以及运行用户。

# root 用户 systemctl cat DmServiceDAMENG.service ls -l /home/dmdba/dmdbms/bin/DmServiceDAMENG

如果已有同名服务,应按目标版本脚本说明处理旧注册项,再复查最终配置。本次返回“创建完成”,并不说明其他环境也允许直接覆盖。采用新路径并行安装时,需要相应修改服务和环境变量。DM8 官方《Linux 脚本使用手册》

5. 首次启动:用日志确认升级动作

以 dmdba 用户启动实例:

/home/dmdba/dmdbms/bin/DmServiceDAMENG start

本次实例日志为 /home/dmdba/dmdbms/log/dm_DMSERVER_202608.log。下面按时间顺序摘取关键原文,省略时间戳、进程号和重复的初始化信息;其他环境应按实际日志配置查找文件。

DM Database Server 64 V9 03151060506-20260417-322930-20218 startup... Update DM8_DCT_VERSION from 113 to 134, rebuild dynamic tables begin... Update DM8_DCT_VERSION from 113 to 134, rebuild dynamic tables end. System upgrade from 0x8010450 to 0x901001a System DM8_DCT_VERSION upgrade from 113 to 134 System PSEG_VERSION change from 0x7000b to 0x7000c local instance name is DMSERVER, mode is NORMAL, status is OPEN. SYSTEM IS READY.

这段日志记录了本次 DM9 启动时的字典升级,并显示实例最终进入 OPEN 状态。DM8_DCT_VERSION 是日志使用的内部字段名,出现 DM8 字样不意味着服务端仍在运行 DM8。

回退方案也要考虑这些变化:新版本已经执行了字典和内部版本更新,不能假设只把软件目录换回 DM8 就能继续打开这份数据。本次按恢复升级前备份来设计回退,不将旧程序直接启动已升级数据作为操作方案。

日志记录了自动字典升级,是否还需执行其他升级脚本,应核对目标 DM9 的版本说明。DM8 手册提到的 V8.1.1.15 对应历史 REDO 日志格式升级,不能用来判断任意 DM8 到 DM9 的字典处理要求。“自动执行”也不等于可以跳过升级。DM8 官方《版本升级》

6. 处理启动告警和系统包编译警告

6.1 TEMP_SIZE 参数调整

首次启动时出现:

Global parameter value of TEMP_SIZE is illegal, use min value! INI parameter TEMP_SIZE changed, the original value 10, new value 32

实例将 TEMP_SIZE 从 10 调整为 32 后继续启动。日志没有说明 dm.ini 是否同步修改,32 也不能作为所有 DM9 环境的通用最小值。

DM8 公开手册将 TEMP_SIZE 定义为以 MB 为单位的静态参数,最小值与页大小有关:4096 个 8 KB 页对应 32 MB。该说明有助于理解日志中的数值,目标 DM9 构建的取值范围仍需查阅随附手册。DM8 官方《DM 物理存储结构》

处理时先保存原配置,核对本次实例页大小和参数范围,再在停库状态下修改 /dmdata/data/DAMENG/dm.ini 中已有的参数项。对于本次日志报告的取值,修改示例为:

TEMP_SIZE = 32

如果配置了非零的 TEMP_SPACE_LIMIT,还应确认它不小于 TEMP_SIZE。修改后重新启动,复查生效值和新的启动日志。32 MB 只是本次日志采用的下限,业务需要的临时空间还要根据实际负载安排。

此次尚无修改后的重启日志,告警是否消失仍待复查。日志中的 DPC_2PC、TRX_VIEW_SIZE 等参数也发生了调整,应一并保存并核对其影响。

6.2 缺少 libgssapi_krb5.so

另一条告警是:

fail to load libgssapi_krb5.so, libgssapi_krb5.so: cannot open shared object file: No such file or directory

操作记录中给出了以下处理命令:

# root 用户;确认软件源和匹配的软件包后执行。 yum install -y krb5-libs krb5-devel

执行前可先补充检查软件包安装情况和文件来源:

rpm -q krb5-libs krb5-devel yum provides '*/libgssapi_krb5.so'

根据仓库查询结果确认提供该文件的软件包及架构,再安装缺失依赖。告警缺少的是 libgssapi_krb5.so,检查时应核对这个文件名,其他带版本号的文件不能代替它的加载验证。系统已结束维护,也要确认当前配置的软件源可用。

数据库随后进入了 OPEN,这条告警没有阻止本次启动。安装依赖后的重启日志和相关认证功能测试仍未记录,告警是否消失、功能是否受影响还有待确认。

6.3 创建系统包时出现编译警告

本次执行了以下语句,列出它们是为了说明编译警告出现的过程。这不是所有 DM9 升级都必须执行的步骤。

SP_CREATE_SYSTEM_VIEWS(0); SP_CREATE_SYSTEM_VIEWS(1); SP_CREATE_SYSTEM_PACKAGES(0); SP_CREATE_SYSTEM_PACKAGES(1);

这些语句包含删除和创建操作。在 DM8 官方文档中,系统视图过程的 0 和 1 分别表示删除和创建;系统包过程同样区分这两种操作,且有专门的覆盖范围。因此,重建前需要核对目标版本要求、已启用功能及依赖,不宜将整组语句笼统称为“编译系统包”。系统视图过程说明、系统包创建与删除说明

执行最后一条语句时,本次输出为:

警告: 创建的对象带有编译错误 DMSQL 过程已成功完成

“DMSQL 过程已成功完成”并不表示所有系统包都创建成功。官方文档说明,批量创建时即使某个包失败,过程也会继续处理后续包,需要检查具体包的创建结果。DM8 官方《系统包概述》

后续应保存完整会话输出,定位具体失败的对象,核对依赖、权限及对应功能要求,再按目标版本文档处理。诊断范围应包含系统对象,不能只检查 APP_RULE。对未能创建出来的对象,也需要与所需系统包清单比对。

操作记录尚未列出具体失败对象及处理结果,原因也待确认,目前不能归因于空间包或某个缺失视图。业务验收前应完成排查并复核所需系统包的可用性。

7. 升级后的核对结果与业务验收

7.1 确认服务端版本和实例状态

使用 DM9 客户端重新连接,并执行第 2 节的版本查询。

# dmdba 用户 /home/dmdba/dmdbms/bin/disql SYSDBA

本次 V$VERSION 的关键输出为:

DM Database Server 64 V9 DB Version: 0x7000d 03151060506-20260417-322930-20218

V$INSTANCE 显示服务端为 V9,构建时间为 May 13 2026 15:49:55,实例状态为 OPEN。

升级前后的 DB Version 都是 0x7000d,而服务端大版本和启动日志中的字典、回滚段版本已经变化。这些字段反映不同的版本信息,不能只凭 DB_VERSION 相同就判断没有升级,或判断旧版本能够回退打开。

7.2 比较业务对象,继续核对数据内容

重复升级前的用户和业务对象查询,得到以下汇总结果。

检查项 DM8 DM9
表 18 18
索引 19 19
原查询单列的视图、序列、过程、函数和触发器 均为 0 均为 0
未被上述分类列单列的对象 2,类型待核对 2,类型待核对
总对象数 39 39

升级前后对象数量一致,对象定义、表内数据、权限和业务行为仍需继续核对。这次业务模式中没有过程和函数,因此也未覆盖复杂存储程序的兼容性验证。

补充数据检查时,可用下面的查询生成业务表行数统计 SQL,检查生成结果后再逐条执行。运行下面这条查询本身不会统计所有表。

SELECT 'SELECT COUNT(*) AS ROW_COUNT FROM "' || REPLACE(OWNER, '"', '""') || '"."' || REPLACE(TABLE_NAME, '"', '""') || '";' AS CHECK_SQL FROM DBA_TABLES WHERE OWNER = 'APP_RULE' ORDER BY TABLE_NAME;

对较大表应评估扫描开销;对关键数据,还应比较事先保存的业务汇总值和抽样记录。若两个检查时点之间仍有写入,需先解释增量变化,再判断差异。

7.3 通过应用完成验收

数据库能够打开后,应使用实际应用账号、连接池和驱动完成回归,至少覆盖应用登录、关键查询、事务提交与回滚、定时作业,以及应用使用到的存储过程或系统包。测试写入应使用事先约定的测试数据,并核对清理结果。

性能比较需要保持数据、SQL 参数和负载条件一致。几次管理 SQL 的毫秒级耗时不足以说明升级后的性能变化,还需安排单独的性能回归。

验收项 已有记录与待完成事项
DM9 启动并进入 OPEN 已有日志和查询结果
字典及内部版本升级 已有启动日志
用户和业务对象数量比较 已有结果,其他 2 个对象类型待展开
TEMP_SIZE、依赖告警复查 有原始告警和处理方法,缺少复查输出
系统包编译警告 已记录,具体对象和处理结果待补充
关键表数据、应用读写和性能回归 尚无检查记录
备份集校验、DM8 恢复演练 尚无检查记录

业务验收通过后,还应在 DM9 上建立新的备份基线,检查备份作业、归档和监控是否正常,并按保留策略继续保存升级前的 DM8 备份。

8. 回退应恢复升级前的数据状态

回退条件和最晚决策时间需要在停机前确定。例如,数据库无法正常打开、关键数据核对不一致,或应用回归发现无法在维护窗口内解决的问题,就应按演练过的方案回退。

对于这次原库升级,回退设计是停止 DM9,保留现场,再用原 DM8 软件恢复升级前的备份。软件目录、服务定义和配置文件也要同步恢复,避免服务继续指向 DM9。

以下是备份恢复部分的演练示例,尚无本次实际执行结果。执行前,先隔离升级后的数据和配置,由原 DM8 版本创建恢复目标实例,匹配必要的初始化参数,再按原库文件清单核对所有恢复目标路径。恢复目标须保持停库状态。仅修改 dm.ini 路径不足以隔离全部数据文件。

先将 FULL20260825 整个备份集目录(含全部 .bak 和 .meta 文件)复制到恢复主机的示例路径,校验通过后再还原。

在独立恢复环境中,使用与备份匹配的原 DM8 dmrman。下面的程序路径是该环境安装原 DM8 软件的示例,必须替换成实际路径。

# 恢复主机上的 dmdba 用户;仅用于本文磁盘备份示例。 /opt/dm8/dmdbms/bin/dmrman USE_AP=2

USE_AP=2 让 DM RMAN 自身执行备份还原,避免依赖另一版本的 DMAP;该模式不适用于 TAPE 第三方备份。若使用默认的 DMAP 模式,则要保证服务也与原 DM8 工具匹配。DM8 官方《备份还原实战》

在 RMAN 提示符下执行:

CHECK BACKUPSET '/dmdata/dmbak/FULL20260825'; RESTORE DATABASE '/dmrestore/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/FULL20260825'; RECOVER DATABASE '/dmrestore/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/FULL20260825'; RECOVER DATABASE '/dmrestore/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

/dmrestore/data/DAMENG/dm.ini 是演练目标的示例路径,需要事先准备。RESTORE 负责还原数据,RECOVER 按备份条件完成恢复,最后更新 DB_MAGIC。脱机备份在 BEGIN_LSN = END_LSN 等相应条件下不需要重做 REDO;这里保留完整恢复流程,实际步骤按备份类型和原 DM8 手册确认。DM8 官方《备份还原实战》、《备份还原原理》

恢复后,用 DM8 启动目标实例,核对版本、关键数据和业务访问,并记录总恢复时间,作为安排维护窗口的依据。

恢复升级前的备份,会回到该备份对应的数据状态。如果 DM9 已经接收新的业务写入,这些增量不会因为恢复旧备份而自动保留。接入业务前应明确回退边界;接入后再回退,则需要另外制定增量数据处理方案。

最后修改时间:2026-09-09 10:01:43
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论