了解Oracle数据库的版本号

Oracle数据库的发行版本号(release number)一般由五位数字组成,那么这些数字分别代表什么含义呢?
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

关注dbDao.com的新浪微博

扫码关注dbDao.com 微信公众号:

Comments

  1. zappa says:

    继续扫盲,有些细节问题真的没注意过

  2. ericszp says:

    你在上文中详细介绍了查询database software的方法,那如何查询DB的版本呢?我查了些资料,不过没找到。

  3. ericszp says:

    不好意思,对你的上文理解有误啊。按照你上文的说法是否意味着每次执行完数据库软件升级后,可以通过v$version来确认database的版本,通过dba_server_registry来确认升级后的database版本呢?

  4. balsilliy says:

    有个问题请教下,索引在增长到一定量的时候(2G或者更高),原来的extent扩展很多,这个会降低索引的使用效率吗?
    如果说我现在重建索引 将initial 的大小设置大点 或者就设置成当前索引总大小 这样会提升效率吗?

Speak Your Mind

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569