为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:win10
【CPU】:
【问题描述】*:Oracle普通用户可以通过sql查询数据库的OS版本
该用户只有connect resource权限
达梦只具有上述两个权限的普通用户,如何通过sql查询OS版本
你的问题是想取得数据库所在服务器的OS版本信息么?
我试了下,有几个办法能获取到服务器的OS信息,但只能区分OS类型,没有找到获取到OS版本信息的办法。。。
第一个办法是通过AWR兼容包 DBMS_WORKLOAD_REPOSITORY_DATA 的 AWR_GET_HOST_INFO_DATA 过程获取到OS信息,内容比较简单,没有明确的版本信息。
下面是我手头几个环境的测试情况:
win10环境,返回 Microsoft Windows 10
麒麟v0/CentOS7环境,返回Linux
测试过程如下:
--因为需要调用AWR程序包,所以先初始化AWR环境
--使用SYSDBA用户初始化,只需要初始化一次就行
BEGIN
SP_INIT_AWR_SYS(1);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
/
--使用查询用户调用AWR包中过程获取系统参数
DECLARE
V_STR SYS.DBMS_WORKLOAD_REPOSITORY_DATA.AWRRPT_STR_DATA_TYPE;
BEGIN
V_STR := SYS.DBMS_WORKLOAD_REPOSITORY_DATA.AWRRPT_STR_DATA_TYPE();
V_STR.EXTEND(5);
SYS.DBMS_WORKLOAD_REPOSITORY_DATA.AWR_GET_HOST_INFO_DATA(V_STR);
SELECT V_STR(1) AS OS,V_STR(2) AS CPU_NUM,V_STR(3) AS CORE_NUM,V_STR(4) AS SOCKETS_NUM,V_STR(5) AS "MEM_SIZE(GB)";
END;
/
第二个办法,如果你用的服务器已经部署正式授权文件,可以试着查询一下 V$LICENSE 系统视图,其中有OS_TYPE,不过这个是授权文件中的操作系统信息,而且从列名看,也是OS类型
还有个办法,如果你这个用户能在服务器上使用disql或manager连接本地服务器,可以从 v$sessions 中查到当前用户会话,里面有osname
这个是客户端应用所在机器的操作系统信息,所以需要在服务器上登录才能取到服务器的信息。
上面两个从V$视图查询的办法,需要用户有VTI角色授权。
亲测可以:

