Oracle数据库之所以强大,和其30年来不断迭代以及更新是绝对分不开的。
而在这个迭代过程中,各种版本和补丁的概念也变得非常复杂,本文将帮助你理清Oracle版本相关知识以及补丁相关的概念。
数据库的版本
当你使用SQL*Plus等工具成功连接数据库库后,SQL命令提示符前通常会显示出下面的提示信息:
代码语言:javascript复制--11g输出例
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sun Apr 12 02:41:10 2020
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
--19c输出例
代码语言:javascript复制$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Apr 12 02:40:35 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
这个由五位数字组成的如“11.2.0.4.0”、“19.3.0.0.0 ”的信息,表示的是Oracle数据库软件的发行版本信息。
包括数据库软件发布流程以及Oracle 版本编号,以12.2版本为界限,Oracle进行了一次重要的调整。
・数据库 12.1 及以前版本,采用传统的 PSU/BP 流程以及版本编号。
・数据库 12.2 及之后版本,将采用新的RU和 RUR流程以及新的版本编号。
12.2之前的版本编号
12.2之前的Oracle数据库软件的详细发行版本号(Release Number),由以下内容组成。
代码语言:javascript复制11.2.0.4.0
| | | | |_ 平台相关发行版本号(Port Specific Maintenance Release)
| | | |___ 特定组件的版本号(Component-Specific Release Number)
| | |_____ 融合中间件的版本号(Internet Application Server (IAS) Release)
| |_______ 数据库维护版本发行号(Database Maintenance Release)
|_________ 数据库主要发行版本号(Major Database Release)
各位数字的介绍:
代码语言:javascript复制第1位:数据库主要发行版本号(Major Database Release)
是Oracle进行了重大更新的版本,通常功能上的可能有巨大差别。如10g,11g,12c等。
第2位:数据库维护版本发行号(Database Maintenance Release)
是对主要发行版本的更新。如10gR1,10gR2,11gR1,11gR2,12cR1,12cR2等。
第3位:融合中间件的版本(Internet Application Server (IAS) Release)
通常不是DB使用的版本号,主要目的是与中间件版本进行融合,
9i前的旧版本中非0(如8.1.7.X),9i以后基本为0。
第4位:特定组件的版本号(Component-Specific Release Number)
一般为PSR(Patch Set Release)号,是在主版本上发布的补丁集(Patchsets)
第5位:平台相关发行版本号(Port Specific Maintenance Release)
特定操作系统上软件产品的维护版本,一般为PSU(patch set update)号,是在某个特定的补丁集版本上的集中性地Bug修复。
12.2之后的版本编号
从2018年开始,为了更加适应云时代的需要,Oracle数据库产品的新版本发布时间变更成了每年一次, 数据库软件版本编号也采用新的形式。
新的版本编号主要由三位数组成 – Year.Update.Revision即年.更新.发布。
・Year 是发布年份的后两位数字,比如19c,表示该版本发布于2019年。
・Update 表示Release Update,一般每个季度发布一次。
・Revision 表示基于某个RU的修订,一般每个RU最多两个RUR。
例如:
代码语言:javascript复制 18.12.1.0.0
18.12.2.0.0
如何查看数据库版本和补丁状况
可以通过如下方法查看数据库的版本和补丁状况:
1. 通过v$version视图查看数据库版本
代码语言:javascript复制--11g输出例
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
--19c输出例
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
BANNER_FULL
----------------------------------------------------------------------------------------------------
BANNER_LEGACY CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 0
另外,也可以通过如下SQL查看数据库的版本。
例:
代码语言:javascript复制 SQL> select * from product_component_version;
PRODUCT
--------------------------------------------------------------------------------
VERSION
--------------------------------------------------------------------------------
VERSION_FULL
--------------------------------------------------------------------------------
STATUS
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition
19.0.0.0.0
19.3.0.0.0
Production
SQL> SET SERVEROUTPUT ON
SQL> EXEC dbms_output.put_line( dbms_db_version.version );
19
PL/SQL procedure successfully completed.
2. 通过opatch lsinventory 命令确认<ORACLE_HOME>的补丁状况和版本
例:
代码语言:javascript复制$ ./opatch lsinventory
Oracle Interim Patch Installer version 11.2.0.3.4
Copyright (c) 2012, Oracle Corporation. All rights reserved.
Oracle Home : <ORACLE_HOME>
Central Inventory : /refresh/home/app/oraInventory
from : <ORACLE_HOME>/oraInst.loc
OPatch version : 11.2.0.3.4
OUI version : 11.2.0.4.0
Log file location : <ORACLE_HOME>/cfgtoollogs/opatch/opatch2020-04-12_10-16-05AM_1.log
Lsinventory Output file location : <ORACLE_HOME>/cfgtoollogs/opatch/lsinv/lsinventory2020-04-12_10-16-05AM.txt
-------------------------------------------------------------------------------
Installed Top-level Products (1):
Oracle Database 11g 11.2.0.4.0
There are 1 products installed in this Oracle Home.
There are no Interim patches installed in this Oracle Home.
--------------------------------------------------------------------------------
3. 如果执行过PSU后期安装步骤的话
3.1 可以通过字典表的基表registry$history查看PSU状况. (12cR1之前的版本)
代码语言:javascript复制--11g输出例
set linesize 200
col action_time format a30
col ACTION format a10
col NAMESPACE format a15
col VERSION format a15
col comments format a60
col BUNDLE_SERIES format a20
col id format 99999
SQL> select * from registry$history;
ACTION_TIME ACTION NAMESPACE VERSION ID COMMENTS BUNDLE_SERIES
------------------------------ ---------- --------------- --------------- ------ ------------------------------------------------------------ --------------------
24-AUG-13 12.03.45.119862 PM APPLY SERVER 11.2.0.4 0 Patchset 11.2.0.2.0 PSU
24-AUG-17 10.54.11.141859 AM APPLY SERVER 11.2.0.4 0 Patchset 11.2.0.2.0 PSU
SQL>
3.2 可以通过字典表的基表registry$sqlpatch查看PSU状况. (12cR1之后的版本)
代码语言:javascript复制SQL>select PATCH_ID,ACTION,STATUS,ACTION_TIME,DESCRIPTION from registry$sqlpatch;
--CDB/PDB环境
SQL> select con_id,patch_id, action, action_time, description, bundle_series from cdb_registry_sqlpatch order by action_time;
3.3 可以通过字典表cdb_registry_sqlpatch查看PSU状况. (18c之后的版本)
代码语言:javascript复制SQL> select con_id,patch_id, action, action_time, description, patch_type from cdb_registry_sqlpatch order by action_time;