建议先扣产品经理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' #替换为备份文件名

在这里插入图片描述
这里不用转换,直接看到达梦数据库软件版本。

Logo

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

更多推荐