达梦数据库版本,想搞清楚不容易
也就是说开发人员编译时在17号,然后经过打包测试后发布日期为22号。想试用一下达梦数据库,登录官网点击“达梦数据库管理系统”记住这里的文件名中日期显示20250122。but,数据库版本该如何登记和称呼呢?领导问:我们达梦数据库版本是什么?这里显示的日期为20250117。你告他:03134284336。建议先扣产品经理100元工资。安装后检查一下数据库版本。然后,点击“试用下载”选择后,下载了一
建议先扣产品经理100元工资
想试用一下达梦数据库,登录官网点击“达梦数据库管理系统”
然后,点击“试用下载”

选择后,下载了一个文件
解压后
记住这里的文件名中日期显示20250122
安装后检查一下数据库版本
SELECT * FROM V$VERSION
UNION
SELECT BUILD_VERSION FROM V$INSTANCE
UNION
SELECT ID_CODE;

这里显示的日期为20250117
也就是说开发人员编译时在17号,然后经过打包测试后发布日期为22号
but,数据库版本该如何登记和称呼呢?
领导问:我们达梦数据库版本是什么?
你告他:03134284336
领导说:记不住
你解释:看这里
SELECT ID_CODE ,
BUILD_TYPE ,
TO_NUMBER(SUBSTR(VER,1,2),'XX')||'.'||
TO_NUMBER(SUBSTR(VER,3,2),'XX')||'.'||
TO_NUMBER(SUBSTR(VER,5,2),'XX')||'.'||
TO_NUMBER(SUBSTR(VER,7,2),'XX') AS INNER_VER
FROM (SELECT DECODE(SUBSTR(VER,1,2),'03','企业版','05','安全版','02','标准版','其他') AS BUILD_TYPE
,RAWTOHEX(CAST(SUBSTR(VER,3) AS INT)) AS VER
FROM (SELECT REGEXP_SUBSTR(ID_CODE,'[^-]+',1,1) AS VER)
);

简洁的写法
SQL> select id_code;
ID_CODE
-----------------------------------
--03134284458-20251113-301923-20178
已用时间: 0.349(毫秒). 执行号:55118.
SQL> SELECT RAWTOHEX(CAST(SUBSTR('03134284458',3) AS INT));
RAWTOHEX(CAST(SUBSTR('03134284458',3)ASINT))
--------------------------------------------
080104AA
已用时间: 3.983(毫秒). 执行号:55119.
SQL> select to_number('AA','xx');
TO_NUMBER('AA','xx')
--------------------
170
已用时间: 13.470(毫秒). 执行号:55120.
SQL>
胆子大些的直接一步到位(从第3位取id_code)
select rawtohex(134284458);

有16进制基础的人,看一眼AA,就能算出16*10+10=170,所以版本可以称为8.1.4.170,这下好记些了吧。
场景一:
如果给你一个达梦数据库环境,还没有创建数据库,那么当前软件版本是多少?
可以用disql这个命令获取
disql -id
或
disql help|head -2


那就好说了,随便找个别的达梦数据库环境,执行上面的转换方法就可以得到软件版本。
场景二:
如果给你一套数据库的文件,如何确定来自哪个版本?
可以从控制文件中直接读取
dmctlcvt type=1 src=dm.ctl dest=ctl.txt;grep version ctl.txt|head -2

还是用上面的rawtohex函数直接转换(不用从第3位截取)。
场景三:
如果给你一套达梦数据库的备份文件,该如何确认来自哪个版本?
这就需要用到元数据文件
strings *meta|grep -A 2 'DB_TEST_FULL_20260205' #替换为备份文件名

这里不用转换,直接看到达梦数据库软件版本。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)