什么情况下用得上这篇:达梦的授权文件(
dm.key)快到期了,或者已经到期——
到期后数据库可能直接停摆,服务起不来,日志里甩一行[FATAL] ... License violation detected。
但生产库哪有停机窗口?这篇讲的就是业务不停、把新授权换上去的完整做法,全程通常不到一分钟。
一、先搞明白 dm.key 是什么
你可以把 dm.key 理解成数据库的行驶证:证件过期,车就上不了路。
它是一个放在达梦安装目录 bin 下面的小文件,数据库启动时会读它,确认自己的版本、CPU 架构和有效期。
授权只约束服务端——你用管理工具、客户端、JDBC 驱动连库,都不需要授权。
新授权通常来自两个渠道:
- 临时授权:还没走完采购流程时,找达梦销售申请,一般给到某个具体日期
- 正式授权:采购完成后,随光盘或交付文件一起给你,通常是
.key文件
顺带看懂授权文件名
拿到
dm8.4-arm-企业版2025.12.25.zip这种文件时,四个片段分别是:
片段 含义 dm8.4达梦数据库主版本号 arm适配的 CPU 架构(常见 x86_64、aarch64)企业版产品版本类型(企业版 / 安全版 / 标准版等) 2025.12.25临时授权的到期日 拿错架构是最常见的翻车原因之一,换之前扫一眼这个文件名。
二、动手前,先备齐三样东西
- 新的授权文件(含
.key的那个压缩包) - 服务器登录权限——能
root或有sudo的 SSH 账号,后面要改文件所有者和权限 - 数据库管理员口令——
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——很多人卡在这一步。
怎么看结果:
- 重点看
到期日这一列 - 换的是临时授权 → 这里应该显示新授权的到期日
- 换的是正式授权 → 这里通常是
NULL,代表永久授权
需要更多信息(授权客户、项目名称、集群类型、产品版本)时再查全字段:
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!