2026-10-02  ·  日常运维

达梦数据库在线更换授权文件(不停机版)

日常运维
不想看文字?这里有 1 分 43 秒的视频演示
在线更换授权文件全流程 —— 六步实操,命令清晰、配音讲解,跟着做一遍就会了

什么情况下用得上这篇:达梦的授权文件(dm.key)快到期了,或者已经到期——
到期后数据库可能直接停摆,服务起不来,日志里甩一行 [FATAL] ... License violation detected。
但生产库哪有停机窗口?这篇讲的就是业务不停、把新授权换上去的完整做法,全程通常不到一分钟。


一、先搞明白 dm.key 是什么

你可以把 dm.key 理解成数据库的行驶证:证件过期,车就上不了路。

它是一个放在达梦安装目录 bin 下面的小文件,数据库启动时会读它,确认自己的版本、CPU 架构和有效期。
授权只约束服务端——你用管理工具、客户端、JDBC 驱动连库,都不需要授权。

新授权通常来自两个渠道:

顺带看懂授权文件名

拿到 dm8.4-arm-企业版2025.12.25.zip 这种文件时,四个片段分别是:

片段含义
dm8.4达梦数据库主版本号
arm适配的 CPU 架构(常见 x86_64、aarch64)
企业版产品版本类型(企业版 / 安全版 / 标准版等)
2025.12.25临时授权的到期日

拿错架构是最常见的翻车原因之一,换之前扫一眼这个文件名。


二、动手前,先备齐三样东西

  1. 新的授权文件(含 .key 的那个压缩包)
  2. 服务器登录权限——能 root 或有 sudo 的 SSH 账号,后面要改文件所有者和权限
  3. 数据库管理员口令——SYSDBA 或同等级别的账号,最后要连库执行重载命令

另外准备一个传文件的工具:SFTP、SCP、WinSCP、MobaXterm 任选,用着顺手就行。


三、操作步骤

第 1 步|解压并改名(在你自己电脑上做)

把收到的压缩包解压,会得到一个类似 DM1701120153.key 的文件。

把它重命名为 dm.key——数据库只认这个名字。

第 2 步|找到 bin 目录,把旧文件备份掉

登录数据库服务器。dm.key 就在达梦安装目录的 bin 文件夹里,不确定路径的话先搜一下:

# 找到 dmserver 可执行文件的位置,它所在的目录就是 bin 目录
dirname $(find / -name dmserver 2>/dev/null)

拿到路径后进去(下面是示例路径,按你的实际情况改):

cd /home/dmdba/dmdbs/bin

先备份旧文件再动它。万一新授权有问题,这就是你的后悔药:

# 备份文件名里带上日期,方便以后追溯
mv dm.key dm.key_bak_$(date +%Y%m%d)

第 3 步|上传新文件

用 SFTP、WinSCP 之类的工具,把第 1 步准备好的 dm.key 传到服务器的 bin 目录里。

第 4 步|改权限(这步不做,数据库读不到)

文件传上去默认归上传者所有,而数据库是以 dmdba 用户跑的,读不到就是白传。

这里有个容易被忽略的细节:上传文件的默认权限由服务器的 umask 决定。
大多数系统是 022,上传后是 644(其他人可读,dmdba 恰好能读到);
但如果这台机器把掩码收紧过(比如 077),上传后就是 600——只有上传者能读,dmdba 读不到。

所以别赌掩码,显式改一遍最稳妥:

# 先看一眼当前掩码(可选,只是帮你知道为什么会出问题)
umask

# 把所有者改成达梦的运行用户(通常是 dmdba:dinstall)
chown dmdba:dinstall dm.key

# 给一个正常的读写权限
chmod 644 dm.key

改完不要靠猜,直接验一下:

# 以 dmdba 的身份试读,能打印出文件内容才算真的到位
su - dmdba -c "test -r dm.key && echo 可读"

看到 可读 才继续下一步。如果这里报权限不足,说明前面两步没生效,回去检查。

第 5 步|让新授权生效

这一步是整篇的关键。先看一眼数据库现在是什么状态,再决定用哪种方式:

# 看看 dmserver 进程在不在
ps -ef | grep dmserver | grep -v grep

进程在 → 走「情况一」,这是首选方案,业务不用停。

# 切到达梦用户
su - dmdba

# 连库(推荐交互式,回车后按提示输密码)
disql SYSDBA@localhost:5236

连上后在 SQL> 提示符下执行:

sp_load_lic_info;

这一条就是让数据库在线重新读取 bin 目录下的新授权。执行完不用重启。

换别的方式连库也行,效果完全一样——关键是执行到 sp_load_lic_info 这一条:

方式怎么用适合
disql 交互式上面这种,回车后按提示输密码通用,推荐
DM 管理工具(图形化)连上实例 → 打开 SQL 查询窗口 → 执行同一条语句不习惯命令行、或想顺手看一眼实例状态
操作系统认证disql / as sysdba(免密,需服务端已开启 OSAUTH)已开启 OS 认证的库
JDBC / 其他客户端任何能连 DM 的工具执行同一条语句已有现成连接

只有一点要注意:别把口令直接写在命令行里(会留在 shell 历史和进程列表里),
用交互式输入,或者干脆用图形化工具。

也支持把账号密码写进连接串,但要注意密码会留在命令历史里,而且格式对引号很敏感:

disql SYSDBA/'"YOUR_PASSWORD"'@localhost:5236

进程不在 → 走「情况二」,反而更简单。

数据库启动时会自动读取 bin 目录下的 dm.key,所以不需要执行任何 SQL,直接把它拉起来就行:

su - dmdba

# 服务名按实际填,输入 DmService 后按 Tab 补全
DmServiceDMSERVER start

第 6 步|验证(别跳过)

换完一定要确认新授权真的生效了。在 SQL> 提示符下(disql 或 DM 管理工具的查询窗口里)执行:

-- 只看这两列就够了:序列号 + 到期日
SELECT SERIES_NO AS "序列号", EXPIRED_DATE AS "到期日" FROM V$LICENSE;

⚠️ 这是 SQL 语句,要在数据库的查询窗口里执行,不是在 bash 命令行里敲。
在 bash 下你会看到 command not found——很多人卡在这一步。

怎么看结果:

需要更多信息(授权客户、项目名称、集群类型、产品版本)时再查全字段:

SELECT 
    SERIES_NO AS "序列号",
    EXPIRED_DATE AS "过期日期",
    AUTHORIZED_CUSTOMER AS "授权客户",
    PROJECT_NAME AS "项目名称",
    CLUSTER_TYPE AS "集群类型",
    DECODE(SERVER_TYPE, 1, '正式版', 2, '测试版', 3, '试用版', '其他') AS "授权类型",
    DECODE(SERVER_SERIES, 'P', '单机版', 'S', '标准版', 'E', '企业版', 'A', '安全版', 'T', '可信版', 'X', '定制版', '其他') AS "产品版本"
FROM V$LICENSE;

四、三个最容易翻车的地方

1. 架构拿错了。 授权文件里的 CPU 架构必须和服务器一致。换完如果日志报"授权不匹配",先查架构:

hostnamectl | grep Architecture

对不上就找达梦要正确架构的文件,没别的办法。

2. 忘了 chown。 文件传上去了、名字也对,但所有者还是 root,数据库读不到——现象是重载后授权信息没变。回去补第 4 步。

3. 集群只换了一个节点。 数据守护(DMDataWatch)或读写分离集群里,主库、备库每个实例都要执行一遍完整步骤。监视器(Monitor)节点不需要授权文件,不用管。


五、常见问题

Q1:bin 目录下原本就没有 dm.key,是怎么回事?

那说明这台库正在用默认试用授权。有效期一般从数据库安装包生成日期算起,往后延一年。

Q2:我只用达梦的管理工具或客户端,也需要授权文件吗?

不需要。dm.key 只管服务端。所有客户端工具和驱动程序都没有授权限制,可以永久免费使用。

Q3:数据守护或读写分离集群,怎么更新授权?

给集群里每一个数据库实例节点(主库、备库)都执行一遍上面的完整步骤。监视器节点不用。

Q4:换完之后日志里报"授权不匹配"之类的错误,是什么原因?

基本都是 CPU 架构不符。用 hostnamectl | grep Architecture 确认服务器架构,再核对授权文件名里标注的架构。不一致就联系达梦换正确架构的授权文件。

Q5:授权到期后数据库会自己停吗?怎么确认是不是这个原因?

会的,而且部分版本到期后会直接关停,没换有效授权之前都起不来。

想确认是不是授权导致的停机,去看数据库日志(路径通常是 达梦安装目录/log/,文件名类似 dm_INSTANCENAME_YYYYMM.log)。只要出现下面这行 [FATAL],就是授权问题:

[FATAL] ... License violation detected, or product has expired. System halt!
← 返回目录