在识别您的 Oracle 数据库软件版本中,Oracle 声明您可以通过查询PRODUCT_COMPONENT_VERSION找到您的“特定于平台的版本号”(补丁集) :
要确定当前安装的 Oracle 数据库版本并查看您正在使用的其他数据库组件的版本级别,请查询数据字典视图 PRODUCT_COMPONENT_VERSION。
据此,我们正在使用 11.2.0.3.0
SQL> select * from product_component_version;
PRODUCT VERSION STATUS
----------------------------------- --------------- ---------------
NLSRTL 11.2.0.3.0 Production
Oracle Database 11g 11.2.0.3.0 64bit Production
PL/SQL 11.2.0.3.0 Production
TNS for Linux: 11.2.0.3.0 Production
V$VERSION 也会发生同样的情况(PRODUCT_COMPONENT_VERSION 是偶然的一个视图):
SQL> select * from v$version;
BANNER
---------------------------------------------------------
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
但是,根据DBA_REGISTRY_HISTORY,数据库似乎在 11.2.0.3.5 1上:
SQL> select action, namespace, version, id, comments from dba_registry_history;
ACTION NAMESPACE VERSION ID COMMENTS
--------------- --------- ---------- ---------- ------------------------------
VIEW INVALIDATE 8289601 view invalidation
UPGRADE SERVER 11.2.0.3.0 Upgraded from 11.2.0.1.0
APPLY SERVER 11.2.0.3 0 Patchset 11.2.0.2.0
APPLY SERVER 11.2.0.3 5 PSU 11.2.0.3.5
DBA_REGISTRY_HISTORY 中不一定包含任何数据,因此我无法可靠地使用此视图。而且,Oracle 似乎没有提供填充评论字段的标准化方法,我似乎只能做以下事情,然后祈祷它可以工作。
select max(regexp_replace(comments, '[^[:digit:].]'))
keep (dense_rank first order by action_time desc)
from dba_registry_history
是否有更简单、可靠的方法来以编程方式查找当前版本(包括补丁集)?
1.也可能:我完全误读了这个,人们忘记了他们修补了什么。