2026-10-02  ·  日常运维

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

日常运维

📋 这篇有交互操作版:左侧步骤卡片导航、命令可一键复制,现场照着敲更方便。打开交互操作版 →

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

授权文件 dm.key 快到期,或者已经到期,数据库可能直接停摆,服务起不来,日志里甩一行 [FATAL] ... License violation detected。生产库没有停机窗口,这篇讲的是业务不停、把新授权换上去的做法,全程通常不到一分钟。


一、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/dmdbms/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/'"密码"'@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;

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

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

hostnamectl | grep Architecture

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

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

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


五、常见问题

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

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

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

不需要。dm.key 只管服务端,所有客户端工具和驱动程序都没有授权限制。

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

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

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

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

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

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

想确认是不是授权导致的停机,去看事件日志。一般在安装目录的 log/ 下,文件名类似 dm_DMSERVER_202610.log。只要出现下面这行,就是授权问题:

[FATAL] ... License violation detected, or product has expired. System halt!
← 返回目录 达梦利用备份恢复误删表(时间点恢复)→