为提升数据库的安全性、稳定性与性能,修复已知问题以匹配业务发展的需求,定期对数据库进行版本升级是必不可少的工作。本文将基于达梦8数据库,详细介绍在数据守护集群(以一主一备为例)环境下的完整升级流程,涵盖从准备、升级到验证的全方位操作。
升级前准备工作
充分的准备工作是升级成功的关键,主要涉及数据备份、当前环境确认以及升级包获取。
1. 登录数据库并进行完整备份
在开始任何升级操作前,首要任务是执行数据库全量备份。假设你已配置好免密登录和环境变量(例如设置了 alias ds="disql -L /:5236 as sysdba"),可以快速执行备份命令。
ds
backup database backupset '/dmbak/fullbak20260304' compressed;

提示:配置环境变量和别名可以极大简化日常运维操作。例如,将常用路径设置为别名,能快速切换目录或执行特定命令。
2. 校验备份集的完整性
备份完成后,务必使用 dmrman 工具检查备份文件是否完整可用,这是保证备份有效性的关键一步。
dmrman
check backupset '/dmbak/fullbak20260304';

3. 记录当前数据库版本
明确升级前的基线版本,便于升级后对照验证。
select * from v$version;

4. 安装升级镜像并获取bin目录
升级的本质是替换数据库安装目录下的 bin 可执行文件。首先需要从新版ISO镜像中提取出 bin 目录。
- 创建升级目录 (root用户执行)
mkdir -p /dm_update
chown dmdba:dinstall -R /dm_update
- 挂载新版ISO镜像包 (root用户执行)
mount dm8_20250910_x86_kylin10_sp1_64.iso /mnt

-
执行镜像安装 (切换至dmdba用户执行)
进入挂载点,以交互模式安装到准备好的升级目录。
cd /mnt
./DMInstall.bin -i
安装过程中,请根据提示选择语言(如简体中文)、时区(中国标准时间)和安装类型(典型安装),并将安装路径指定为 /dm_update。
安装成功后,控制台会提示执行root脚本,此时无需执行,因为我们仅需 bin 目录。
- 打包bin目录
安装完成后,进入升级目录,将 bin 文件夹打包。
cd /dm_update
tar -czvf dm_update.tar.gz bin/
至此,我们得到了核心升级包 dm_update.tar.gz。
5. 提取并保存函数索引创建语句
如果你的数据库中存在函数索引,必须提前获取其创建脚本,因为在升级过程中函数索引可能失效,需在升级后重建。
ds
select
'create index "'
||t1.index_name
||'" on '
||t1.owner
||'.'
|| t1.table_name
||'('
||FBI_DEF(t2.id)
||');'
FROM
ALL_INDEXES t1,
sysobjects t2
where
t1.index_name=t2.name
and t1.INDEX_TYPE='FUNCTION-BASED NORMAL';

请将查询结果妥善保存到一个SQL脚本文件中,以备后续使用。
升级达梦数据库
本阶段将按照“备库 -> 监视器 -> 主库”的顺序进行滚动升级,以最大程度保证集群的高可用性。
1. 分发升级包
使用 dmdba 用户,将 dm_update.tar.gz 复制到主库、备库和监视器服务器的达梦安装目录(例如 /dm)。
cp -rp dm_update.tar.gz /dm
2. 升级备库
- 登录备库服务器,进入安装目录并备份原
bin 目录。
cd /dm
cp -r bin bin_bak2026
- 依次停止相关服务。
/dm/bin/DmWatcherServiceGRP1 stop
/dm/bin/DmServiceDAMENG stop # 请替换为实际的服务名
/dm/bin/DmAPService stop
关键检查:停止数据库后,务必查看日志文件(如 /dm/log/dm_DAMENG_202603.log),确认最后有 DM Database Server shutdown successfully 字样,表示数据库已正常停止。
- 执行版本升级:删除旧目录,解压新包,并恢复原有的服务控制脚本。
cd /dm
rm -rf bin/
tar -zxvf dm_update.tar.gz
cd bin_bak2026/
cp DmServiceDAMENG ../bin/ # 将备份的旧服务脚本拷贝回新bin目录
3. 升级监视器
如果部署了多个监视器,需对每一台执行此操作。
- 登录监视器服务器,停止监视器服务。
cd /dm/bin
./DmMonitorService stop
- 备份并升级,步骤与备库类似。
cd /dm
cp -r bin bin_bak2026
rm -rf bin/
tar -zxvf dm_update.tar.gz
cd bin_bak2026/
cp DmServiceDAMENG ../bin/ # 同样恢复服务脚本
4. 升级主库
在升级主库前,必须检查purge系统,建议purge值在10万以下,以防事务堆积影响升级。
Select * from v$purge;
确认无误后,登录主库服务器,执行与备库完全相同的停止、备份、替换操作(步骤2.1至2.3)。
5. 启动服务并恢复集群
按照 备库 -> 主库 -> 监视器 的顺序启动服务,恢复数据守护集群。
- 启动备库服务:
cd /dm/bin
./DmServiceDAMENG start
./DmWatcherServiceGRP1 start
- 启动主库服务:
cd /dm/bin
./DmServiceDAMENG start
./DmWatcherServiceGRP1 start
- 启动监视器服务:
cd /dm/bin
./DmMonitorService start
升级后的验证检查工作
升级完成后,必须进行系统性的验证,确保数据库集群运行正常且版本升级成功。
1. 检查数据守护集群状态
使用命令行监视器连接到集群,查看主备库状态、守护进程等信息是否正常。
cd /dm/bin
./dmmonitor /dmdata/DAMENG/dmmonitor.ini
进入监视器界面后,输入 show 命令,仔细核对各项信息。
2. 确认数据库版本
登录数据库,验证版本号是否已更新为目标版本。
ds
select * from v$version;

3. 重建函数索引(如需要)
如果之前提取了函数索引创建语句,现在需要先删除旧的函数索引,再使用保存的语句重建。
- 生成删除语句:
select
'drop index '
||t1.owner
||'."'
||t1.index_name
||'";'
FROM
ALL_INDEXES t1,
sysobjects t2
where
t1.index_name=t2.name
and t1.INDEX_TYPE='FUNCTION-BASED NORMAL';
执行生成的 drop index 语句。
- 执行重建:运行在准备阶段保存下来的
create index 语句。
完成以上所有步骤后,你的达梦8数据库数据守护集群就已成功升级到新版本。整个流程涉及众多细节,建议在测试环境充分演练后再于生产环境操作,并确保每一个备份步骤都执行到位。如果在升级过程中遇到具体问题,也可以在云栈社区的相关技术板块与更多同行交流探讨。