目标:把厂家交付的授权包解开,得到唯一的 .key 文件并改名为 dm.key(达梦只认这个文件名)。
# 1) 解压授权 ZIP(按实际文件名调整)
unzip -o <授权包.zip> -d /tmp/lic_new
# 2) 将解出的 .key 重命名为 dm.key
cp /tmp/lic_new/<原key文件名>.key /tmp/lic_new/dm.key
# 3) 确认文件在位
ls -l /tmp/lic_new/dm.key
目标:找到达梦安装目录下的 bin 目录(dm.key 就放在这里),并把旧 dm.key 备份(换失败可秒回退)。
# 1) 自动定位 dmserver 所在的 bin 目录
DM_BIN=$(dirname "$(find / -name dmserver 2>/dev/null | head -1)")
echo "$DM_BIN"
# 2) 进入 bin 目录,备份旧 dm.key(文件名带日期,便于追溯)
cd "$DM_BIN"
mv dm.key dm.key_bak_$(date +%Y%m%d)
# 3) 确认目录状态(此时应无 dm.key,只有备份)
ls -l dm.key*
目标:把新 dm.key 上传到 bin 目录,并设置正确的属主与权限,保证数据库进程能读。
# 1) 上传:用 SFTP / WinSCP / MobaXterm 将本地 dm.key 传到 $DM_BIN
# (上传后继续执行下面命令)
# 2) 属主改为达梦运行用户(常见 dmdba:dinstall,以安装时实际为准)
chown <运行用户>:<安装组> dm.key
# 3) 权限 644(属主可读写,其他只读)
chmod 644 dm.key
# 4) 核对
ls -l dm.key
目标:用 SYSDBA 执行重载存储过程,校验新授权与当前版本/运行环境是否一致。
# 1) 切换到数据库运行用户(或用该用户登录)
su - <运行用户>
# 2) 交互式登录(推荐,密码不落历史)
disql SYSDBA@localhost:5236
# 按提示输入密码后,在 SQL> 提示符下执行:
SP_LOAD_LIC_INFO();
# 3) 退出
exit
目标:查询 V$LICENSE 确认新授权已生效,重点核对过期日期、授权客户、产品版本。
-- 基础版:查看全部授权字段
SELECT * FROM V$LICENSE;
-- 友好列名版(重点核对这几项)
SELECT SERIES_NO AS "序列号",
EXPIRED_DATE AS "过期日期",
AUTHORIZED_CUSTOMER AS "授权客户",
PROJECT_NAME AS "项目名称",
CONCURRENCY_USER_NUMBER AS "并发连接数",
DECODE(SERVER_TYPE, 1, '正式版', 2, '测试版', 3, '试用版', '其他') AS "授权类型",
DECODE(SERVER_SERIES, 'P', '单机版', 'S', '标准版', 'E', '企业版',
'A', '安全版', 'T', '可信版', 'X', '定制版', '其他') AS "产品版本"
FROM V$LICENSE;
| 场景 | 业务是否中断 | 需要做到哪一步 |
|---|---|---|
| 单实例数据库 | 不中断 | 重载后客户端连接与应用照常,无需重启实例 |
| 主备集群 / 读写分离(多实例) | 不中断 | 每个数据库实例节点各做一遍,并各自验证一次授权信息 |
| 集群中的监视器节点 | 不受影响 | 监视器不加载 dm.key,无需操作 |
| 客户端工具与应用驱动 | 不受影响 | dm.key 只对服务端生效,客户端侧无需任何变更 |
| Windows 版实例 | 不中断 | 路径同样在安装目录的 bin 下,但没有 chown / chmod,改用文件属性设置所有者与读取权限 |
| 字段 | 含义 |
|---|---|
| LIC_VERSION | 许可证版本号 |
| SERIES_NO | LICENSE 文件序列号 |
| SERVER_SERIES | 服务器版本类型:P 单机版 / S 标准版 / E 企业版 / A 安全版 / T 可信版 / X 定制版 |
| SERVER_TYPE | 服务器发布类型:1 正式版 / 2 测试版 / 3 试用版 / 4 其他 |
| SERVER_VER | 服务器版本号 |
| EXPIRED_DATE | 有效日期(更换授权后重点核对这一项) |
| AUTHORIZED_CUSTOMER | 授权用户名称 |
| AUTHORIZED_USER_NUMBER / CONCURRENCY_USER_NUMBER | 授权用户数 / 并发连接数 |
| MAX_CPU_NUM | 最大 CPU 数目 |
| CPU_TYPE / OS_TYPE / HARDWARE_ID | 授权运行的 CPU 类型 / 操作系统 / 绑定硬件编码 |
| PROJECT_NAME | 项目名称 |
没有 dm.key 时,数据库使用默认试用授权。现场常见口径:试用期约为自该安装包生成日期起一年,具体以 V$LICENSE 实查的 EXPIRED_DATE 为准(SERVER_TYPE 显示为 3=试用版)。
不需要。dm.key 仅针对数据库服务端;客户端工具与驱动程序无授权限制。只有数据库服务器进程做 LICENSE 检查。
集群中每一个数据库实例节点(主库、备库)都要执行上述五步;监视器(Monitor)节点无需授权文件,不用操作。建议逐节点执行并各自验证 V$LICENSE。
多为授权文件与运行环境不一致。按文档口径核对:LICENSE 类型须与实际运行环境相匹配。排查动作:
# 核对服务器实际 CPU 架构
hostnamectl | grep Architecture
# 对照 V$LICENSE 中的 CPU_TYPE / OS_TYPE
SELECT CPU_TYPE, OS_TYPE, SERVER_SERIES, SERVER_TYPE FROM V$LICENSE;
不一致(如 x86 的 key 放到 ARM 机器、或版本类型不符)→ 联系达梦申请匹配的授权文件。
运行中的实例通常不会立即中断——到期那一刻,已经在对外服务的实例一般仍可继续读写,业务不会当场掉线。但服务器下一次重启就一定起不来:启动阶段就会做 LICENSE 检查,判定授权已过期即强制退出,实例根本起不动。所以更换授权这件事,不能拖到重启那天再办。
启动时的判定证据在实例日志里(安装目录 log/ 下 dm_实例名_日期.log),出现 FATAL 级授权错误即属此类:
[FATAL] ... License violation detected, or product has expired. System halt!
预防建议:把 V$LICENSE 的 EXPIRED_DATE 纳入巡检,到期前提前更换。
把卡在第几步、报错原文、版本号发我就够判断了 —— 不用发 dm.ini 或任何配置文件。共性问题我会补进这篇,下一个人就不用再踩这个坑。
现象和上面几步都对不上?把已经试过的命令和结果说一下,我能判断是文档该补一句,还是版本或环境差异。真要贴参数,先把 IP、路径、口令替换掉。
想让答案别人也能查到?在 Gitee 仓库 提 issue,回复公开可查。