Oracle数据库的发行版本号(release number)一般由五位数字组成,那么这些数字分别代表什么含义呢?
Major Database Release Number
第一位阿拉伯数字是我们最常提到的一个大版本标识,它代表了数据库主要发行版本号;譬如我们说的10g不管是R1还是R2,其版本号的第一位总是10;不同Major release Number之间预示着存在功能上的巨大差别,例如在11g中加入了许多10g上永远不会有的新特性。新的major release number表明这是崭新一代的产品。
Database Maintenance Release Number
第二位阿拉伯数字代表数据库维护版本发行号,也就是我们常说的R1或者R2。已有的Maintenance Release Number包括:8.1(比较特殊)、9.1、9.2、10.1、10.2和11.1、11.2。从9i开始每一个大版本都有2个release,一般来说R1总是显得不那么稳定(至少11g之前是这样),通过在R1中引入大量特性后发行并根据用户实际使用情况不断修正Bug,到R2发行时R1中引入的新特性已经日渐成熟,当然按照Oracle的风格在R2中还会引入部分特性,一些特性甚至可能是颠覆性的(例如10.2.0.2中引入mutex保护的Cursor pin)。另外值得一提的是R1极不稳定这个铁律似乎在11g中被打破了,11gR1的使用率非常之高,这是9.1或10.1所不能想象的。
Application Server Release Number
第三位阿拉伯数字代表了Oracle Application Server (OracleAS)的发行版本号;对于Oracle database软件而言这一位总是为0
Component-Specific Release Number
第四位阿拉伯数字代表了某个组件的发行版本号。这里说的组件是指我们在使用DBCA创建数据库是选择安装的Component,例如Oracle OLAP、Label Security等(如果是手动创建数据库,那么必然运行了安装组件的脚本,一般位于$ORACLE_HOME/rdbms/admin目录下)取决于数据库上所打过的Component Patch set补丁集或interim release临时版本,同一个数据库中不同组件可能存在不同的组件版本号。实际使用中该组件发行版本号一般被我们用来指代数据库软件或者某个数据库所打过的Patch set补丁集,Patch set补丁集一般都是些大家伙(1-2GB不稀奇)。在给数据库软件打上Patch set后我们需要给已经存在的数据库升级组件版本,通俗地说是给数据库升级数据字典,这样数据库内的组件版本一般是一致的,如我将一个10.2.0.1的数据库升级到10.2.0.4,那么这个数据库里的组件版本也会是10.2.0.4(不排除说你为某个组件打了特殊的Patch后造成这个组件的版本独树一帜,当然这很少见,也不推荐)。我们可以通过查询DBA_SERVER_REGISTRY视图来了解数据库中的组件版本情况:
desc dba_server_registry;
Name Null? Type
----------------------------------------- -------- ----------------------------
COMP_ID NOT NULL VARCHAR2(30)
COMP_NAME VARCHAR2(255)
VERSION VARCHAR2(30)
STATUS VARCHAR2(11)
MODIFIED VARCHAR2(20)
CONTROL NOT NULL VARCHAR2(30)
SCHEMA NOT NULL VARCHAR2(30)
PROCEDURE VARCHAR2(61)
STARTUP VARCHAR2(8)
PARENT_ID VARCHAR2(30)
OTHER_SCHEMAS VARCHAR2(4000)
col comp_name for a60
select comp_name,version from dba_server_registry
COMP_NAME VERSION
------------------------------------------------------------ ------------------------------
Spatial 10.2.0.4.0
Oracle interMedia 10.2.0.4.0
OLAP Catalog 10.2.0.4.0
Oracle Enterprise Manager 10.2.0.4.0
Oracle XML Database 10.2.0.4.0
Oracle Text 10.2.0.4.0
Oracle Expression Filter 10.2.0.4.0
Oracle Rules Manager 10.2.0.4.0
Oracle Workspace Manager 10.2.0.4.3
Oracle Data Mining 10.2.0.4.0
Oracle Database Catalog Views 10.2.0.4.0
Oracle Database Packages and Types 10.2.0.4.0
JServer JAVA Virtual Machine 10.2.0.4.0
Oracle XDK 10.2.0.4.0
Oracle Database Java Packages 10.2.0.4.0
OLAP Analytic Workspace 10.2.0.4.0
Oracle OLAP API 10.2.0.4.0
Platform-Specific Release Number
第五位阿拉伯数字代表了平台相关发行版本号。通常意义上该位数字受到另一种补丁(不是Patch set)的影响。在10g以后Oracle引入了在某个特定的补丁集的基础上发行的补丁集的更新(PSU-patch set update),用中文说起来十分拗口;通过PSU的发行,Oracle可以针对某个特定的补丁集版本上发生的Bug集中性地修复,例如10.2.0.4是一个10g使用十分广泛的版本,如果在10.2.0.4上发现了Bug那么就可以将fix合并到PSU中。一般来说PSU会每年的1、4、7、10月份release,最近的一次PSU释放是在2011年的4月,包含了10.2.0.4的第8个PSU也就是10.2.0.4.8。注意Oracle只会为某个大版本上的几个final release制作PSU补丁,目前在10g上保持PSU发布的版本是10.2.0.4和10.2.0.5,而对于10.2.0.3则不再有PSU的支持。可以通过查询registry$history表了解数据库(DB ,not Database Software)的PSU信息:
SQL> desc registry$history;
Name Null? Type
----------------------------------------- -------- ----------------------------
ACTION_TIME TIMESTAMP(6)
ACTION VARCHAR2(30)
NAMESPACE VARCHAR2(30)
VERSION VARCHAR2(30)
ID NUMBER
COMMENTS VARCHAR2(255)
BUNDLE_SERIES VARCHAR2(30)
SQL> select * from registry$history;
ACTION_TIME
---------------------------------------------------------------------------
ACTION NAMESPACE
------------------------------ ------------------------------
VERSION ID
------------------------------ ----------
COMMENTS
--------------------------------------------------------------------------------
BUNDLE_SERIES
------------------------------
17-MAY-11 10.42.32.533510 PM
APPLY SERVER
10.2.0.4 4
PSU 10.2.0.4.4
PSU
以上可以看到示例数据库打过PSU 10.2.0.4.4,还可以通过opatch lsinventory找出数据库软件(Database Software,not DB)打过的Patch Number,一般包含大量Bug修复的Interim patches可能是PSU(也可能是CPU),如Patch 9352164即对应为PSU 10.2.0.4.4。
我们还可以通过查询V$VERSION来了解当前数据库软件(注意是Database Software,而不是DB)的版本,该视图中还包含PL/SQL引擎和TNS协议的版本:
SQL> startup nomount;
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production