2. About Me
l Email:liu.maclean@gmail.com
l Blog:www.oracledatabase12g.com
l Oracle Certified Database Administrator Master 10g
and 11g
l Over 6 years experience with Oracle DBA technology
l Over 7 years experience with Linux technology
l Member Independent Oracle Users Group
l Member All China Users Group
l Presents for advanced Oracle topics: RAC,
DataGuard, Performance Tuning and Oracle Internal.
3. 在<Upgrade 11.2.0.1 GI/CRS to 11.2.0.2 in Linux>一文中我们介绍了升级 11.2.0.1 GI/CRS 到
11.2.0.2 的详细步骤,因为 GI/CRS 的版本总是要求大于 DB/RDBMS,所以这是我们升级
RDBMS 数据库软件的前提条件。
接下来我们将具体介绍升级 11.2.0.1 DB/RDBMS 到 11.2.0.2 的详细步骤:
一、 下载补丁介质
11.2.0.2 的 patchset 目前没有公开的下载地址,因为 updates.oracle.com 目前已经不再提供 ftp
下载模式,所以我们只能通过登录 My Oracle Support 后进入 Patch 栏目搜索 Patchid 并获得加
密的下载链接。
11.2.0.2 补丁集的全称是 11.2.0.2.0 PATCH SET FOR ORACLE DATABASE SERVER (Patchset)
(patchid:10098816),可以通过 10098816 这个 id 到 Patch 栏目搜索,并找出对应平台的介质
zip 包。如 在 Linux x86-64 平台上:
以上 p10098816_112020_Linux-x86-64_1of7.zip 和 p10098816_112020_Linux- x86-64_2of7.zip
,这 2 个 zip 包对应为 Database/RDBMS 软件的介质,我们不需要下载所有的 7 个 zip 包,有
这 2 个升级数据库软件就已经足够了。
完成以上 2 个软件的下载后,分别解压 zip 包:
unzip p10098816_112020_Linux-x86-64_1of7.zip -d $PATCHHOME
unzip p10098816_112020_Linux-x86-64_2of7.zip -d $PATCHHOME
二、以 out of place 方式安装 11.2.0.2 DB 数据库软件
因为 11.2.0.2 的 Patchset 以后都是 out of place 的,所以我们可以不用像在 11gr2 以前那样必
4. 须在原有安装低版本软件的基础上才能升级软件,而可以选择在别的位置完全新安装。
注意该步骤不需要停止数据库实例,可以在前期工作中完成。
以 DB/RDBMS 数据库软件的拥有者身份(oracle 用户)启动方才解压目录下的 oui 安装界面:
su - oracle
(oracle)$ unset ORACLE_HOME ORACLE_BASE ORACLE_SID
(oracle)$ export DISPLAY=:0
(oracle)$ cd $PATCHHOME
(oracle)$ ./runInstaller
在 Oracle Universal Installer 界面下的 Select Installation Options Screen 选择 install database
only.
在 Grid Installation Options 下若是 RAC 数据库则选择 Oracle Real Application cluster database
installation,注意如果在该屏幕下出现[FATAL] [INS-35354] The system on which you are
attempting to install Oracle RAC is not part of a valid cluster 则可能是在之前的安装 Gird 的过程
中没有正确的 Update Inventory 更新信息库信息,见<11gr2 RAC 安装 INS-35354 问题一例
>。
6. 在 Specify Installation Location Screen 上一般 OUI 会帮你自动匹配一个$ORACLE_BASE 变量
下不同于原有数据库软件安装目录的新目录,确认这些目录下有足够的磁盘空间,保 险起
见空间应大于 10GB。注意这里是 out of place 安装,所以千万不要填入原有的安装路径。
以上安装完成后 OUI 会提示要在所有节点上以 root 身份执行 root.sh 脚本:
su - root
(root #) /s01/orabase/product/11.2.0/dbhome_2/root.sh
Running Oracle 11g root script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /s01/orabase/product/11.2.0/dbhome_2
Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
8. This is a 64-bit database
================
Software Version
================
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
=============
Compatibility
=============
Compatibility is set as 11.2.0.0.0
================
Component Status
================
Comp ID Component Status Version Org_Version
Prv_Version
------- ---------------------------------- --------- --------------
-------------- --------------
CATALOG Oracle Database Catalog Views VALID 11.2.0.1.0
CATPROC Oracle Database Packages and Types VALID 11.2.0.1.0
OWM Oracle Workspace Manager VALID 11.2.0.1.0
RAC Oracle Real Application Clusters VALID 11.2.0.1.0
======================================================
List of Invalid Database Objects Owned by SYS / SYSTEM
======================================================
Number of Invalid Objects
------------------------------------------------------------------
There are no Invalid Objects
DOC>################################################################
DOC>
DOC> If there are no Invalid objects below will result in zero rows.
DOC>
DOC>################################################################
DOC>#
no rows selected
================================
List of Invalid Database Objects
================================
Number of Invalid Objects
------------------------------------------------------------------
There are no Invalid Objects
DOC>################################################################
DOC>
DOC> If there are no Invalid objects below will result in zero rows.
DOC>
DOC>################################################################
DOC>#
no rows selected
9. ==============================================================
Identifying whether a database was created as 32-bit or 64-bit
==============================================================
DOC>###########################################################################
DOC>
DOC> Result referencing the string 'B023' ==> Database was created as 32-bit
DOC> Result referencing the string 'B047' ==> Database was created as 64-bit
DOC> When String results in 'B023' and when upgrading database to 10.2.0.3.0
DOC> (64-bit) , For known issue refer below articles
DOC>
DOC> Note 412271.1 ORA-600 [22635] and ORA-600 [KOKEIIX1] Reported While
DOC> Upgrading Or Patching Databases To 10.2.0.3
DOC> Note 579523.1 ORA-600 [22635], ORA-600 [KOKEIIX1], ORA-7445 [KOPESIZ] and
DOC> OCI-21500 [KOXSIHREAD1] Reported While Upgrading To 11.1.0.6
DOC>
DOC>###########################################################################
DOC>#
Metadata Initial DB Creation Info
-------- -----------------------------------
B047 Database was created as 64-bit
===================================================
Number of Duplicate Objects Owned by SYS and SYSTEM
===================================================
Counting duplicate objects ....
COUNT(1)
----------
4
=========================================
Duplicate Objects Owned by SYS and SYSTEM
=========================================
Querying duplicate objects ....
OBJECT_NAME OBJECT_TYPE
----------------------------------------
----------------------------------------
AQ$_SCHEDULES TABLE
AQ$_SCHEDULES_PRIMARY INDEX
DBMS_REPCAT_AUTH PACKAGE BODY
DBMS_REPCAT_AUTH PACKAGE
DOC>
DOC>############################################################################
####
DOC>
DOC> If any objects found please follow below article.
DOC> Note 1030426.6 How to Clean Up Duplicate Objects Owned by SYS and SYSTEM
schema
DOC> Read the Exceptions carefully before taking actions.
DOC>
DOC>############################################################################
####
DOC>#
================
JVM Verification
10. ================
JAVAVM - NOT Installed. Below results can be ignored
================================================
Checking Existence of Java-Based Users and Roles
================================================
DOC>
DOC>############################################################################
####
DOC>
DOC> There should not be any Java Based users for database version 9.0.1 and
above.
DOC> If any users found, it is faulty JVM.
DOC>
DOC>############################################################################
####
DOC>#
User Existence
---------------------------
No Java Based Users
DOC>
DOC>###############################################################
DOC>
DOC> Healthy JVM Should contain Six Roles.
DOC> If there are more or less than six role, JVM is inconsistent.
DOC>
DOC>###############################################################
DOC>#
Role
------------------------------
No JAVA related Roles
Roles
=========================================
List of Invalid Java Objects owned by SYS
=========================================
There are no SYS owned invalid JAVA objects
DOC>
DOC>#################################################################
DOC>
DOC> Check the status of the main JVM interface packages DBMS_JAVA
DOC> and INITJVMAUX and make sure it is VALID.
DOC> If there are no Invalid objects below will result in zero rows.
DOC>
DOC>#################################################################
DOC>#
no rows selected
INFO: Below query should succeed with 'foo' as result.
select dbms_java.longname('foo') "JAVAVM TESTING" from dual
*
ERROR at line 1:
ORA-00904: "DBMS_JAVA"."LONGNAME": invalid identifier
11. *** End of LogFile ***
以上 spool 内容显示所要升级的数据库现有 CATALOG、CATPROC、OWM 和 RAC 组件,且
没有安装 JVM,升级 JVM 组建的数据字典将消耗较长的时间。
另外一个建议运行的脚本是 utlu112i.sql,它位于新安装的$ORACLE_HOME/rdbms/admin 目
录下。
该脚本会给出一些升级前地建议,包括建议保证系统表空间和闪回区域有足够的空间,以及
收集数据字典的统计信息,如以下输出:
SQL> @/s01/orabase/product/11.2.0/dbhome_2/rdbms/admin/utlu112i.sql
Oracle Database 11.2 Pre-Upgrade Information Tool 09-07-2011 20:02:30
Script Version: 11.2.0.2.0 Build: 001
.
**********************************************************************
Database:
**********************************************************************
--> name: VPROD
--> version: 11.2.0.1.0
--> compatible: 11.2.0.0.0
--> blocksize: 8192
--> platform: Linux x86 64-bit
--> timezone file: V11
.
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
--> SYSTEM tablespace is adequate for the upgrade.
.... minimum required size: 267 MB
--> SYSAUX tablespace is adequate for the upgrade.
.... minimum required size: 150 MB
--> UNDOTBS1 tablespace is adequate for the upgrade.
.... minimum required size: 253 MB
--> TEMP tablespace is adequate for the upgrade.
.... minimum required size: 61 MB
.
**********************************************************************
Flashback: ON
**********************************************************************
FlashbackInfo:
--> name: +SYSTEMDG
--> limit: 4977 MB
--> used: 264 MB
--> size: 4977 MB
--> reclaim: 0 MB
--> files: 7
WARNING: --> Flashback Recovery Area Set. Please ensure adequate disk space
in recover
y areas before performing an upgrade.
.
**********************************************************************
Update Parameters: [Update Oracle Database 11.2 init.ora or spfile]
Note: Pre-upgrade tool was run on a lower version 64-bit database.
**********************************************************************
--> If Target Oracle is 32-Bit, refer here for Update Parameters:
-- No update parameter changes are required.
.
--> If Target Oracle is 64-Bit, refer here for Update Parameters:
12. -- No update parameter changes are required.
.
**********************************************************************
Renamed Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
-- No renamed parameters found. No changes are required.
.
**********************************************************************
Obsolete/Deprecated Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
-- No obsolete parameters found. No changes are required
.
**********************************************************************
Components: [The following database components will be upgraded or installed]
**********************************************************************
--> Oracle Catalog Views [upgrade] VALID
--> Oracle Packages and Types [upgrade] VALID
--> Real Application Clusters [upgrade] VALID
--> Oracle Workspace Manager [upgrade] VALID
.
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> The "cluster_database" parameter is currently "TRUE"
.... and must be set to "FALSE" prior to running a manual upgrade.
WARNING: --> Database is using a timezone file older than version 14.
.... After the release migration, it is recommended that DBMS_DST package
.... be used to upgrade the 11.2.0.1.0 database timezone version
.... to the latest version which comes with the new release.
WARNING: --> Your recycle bin is turned on and currently contains no objects.
.... Because it is REQUIRED that the recycle bin be empty prior to upgrading
.... and your recycle bin is turned on, you may need to execute the command:
PURGE DBA_RECYCLEBIN
.... prior to executing your upgrade to confirm the recycle bin is empty.
.
**********************************************************************
Recommendations
**********************************************************************
Oracle recommends gathering dictionary statistics prior to
upgrading the database.
To gather dictionary statistics execute the following command
while connected as SYSDBA:
EXECUTE dbms_stats.gather_dictionary_stats;
**********************************************************************
Oracle recommends removing all hidden parameters prior to upgrading.
To view existing hidden parameters execute the following command
while connected AS SYSDBA:
SELECT name,description from SYS.V$PARAMETER WHERE name
LIKE '_%' ESCAPE ''
Changes will need to be made in the init.ora or spfile.
**********************************************************************
Oracle recommends reviewing any defined events prior to upgrading.
To view existing non-default events execute the following commands
while connected AS SYSDBA:
13. Events:
SELECT (translate(value,chr(13)||chr(10),' ')) FROM sys.v$parameter2
WHERE UPPER(name) ='EVENT' AND isdefault='FALSE'
Trace Events:
SELECT (translate(value,chr(13)||chr(10),' ')) from sys.v$parameter2
WHERE UPPER(name) = '_TRACE_EVENTS' AND isdefault='FALSE'
Changes will need to be made in the init.ora or spfile.
**********************************************************************
5.如果数据库很大那么建议打开闪回数据库 flashback database,并创建还原点,这样可以极
大地缩短回退时间。
可以通过以下查询判断数据库是或否启用了 flashback database 功能:
SQL> select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------
NO
若显示 NO 则说明之前没有启用数据库闪回功能,若希望启用数据库闪回功能需要数据库短
时间停机:
关闭所有的数据库实例
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
启动某一套实例到 mount 状态
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2212936 bytes
Variable Size 603982776 bytes
Database Buffers 637534208 bytes
Redo Buffers 8933376 bytes
Database mounted.
SQL> alter database flashback on;
Database altered.
14. 在本节点打开数据库,并启动所有节点
SQL> alter database open;
Database altered.
以上在数据库级别启用了闪回 flashback 功能。
接着我们需要停止应用程序,注意在这一步之前的准备工作都可以在线完成,但是本步骤将
要求停止一切应用程序的链接,关闭数据库,并启动到 restrict 限制模式,以便创建 restore
point,方便可能的升级回退。,strict 模式避免了普通用户的链接。
在所有节点上关闭数据库实例,并在唯一节点上启动数据库到 restrict 模式。
startup restrict;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2212936 bytes
Variable Size 603982776 bytes
Database Buffers 637534208 bytes
Redo Buffers 8933376 bytes
Database mounted.
Database opened.
SQL> conn maclean/maclean
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege
Warning: You are no longer connected to ORACLE.
conn / as sysdba
SQL> create restore point maclean_rollback guarantee flashback database;
Restore point created.
SQL> select * from v$restore_point;
SCN DATABASE_INCARNATION# GUA STORAGE_SIZE
---------- --------------------- --- ------------
TIME
---------------------------------------------------------------------------
RESTORE_POINT_TIME PRE
--------------------------------------------------------------------------- ---
NAME
--------------------------------------------------------------------------------
601958 1 YES 15941632
07-SEP-11 07.52.59.000000000 PM
YES
MACLEAN_ROLLBACK
16. Total System Global Area 1252663296 bytes
Fixed Size 2226072 bytes
Variable Size 402655336 bytes
Database Buffers 838860800 bytes
Redo Buffers 8921088 bytes
Database mounted.
Database opened.
SQL> set echo on
SQL> SPOOL /tmp/upgrade.log
SQL> set time on;
20:40:40 SQL> @/s01/orabase/product/11.2.0/dbhome_2/rdbms/admin/catupgrd.sql
在以上 catupgrd.sql 脚本运行过程中可以通过 DBA_SERVER_REGISTRY 视图了解组件字典升级的进度
SQL> select * from DBA_SERVER_REGISTRY;
select * from DBA_SERVER_REGISTRY
*
ERROR at line 1:
ORA-04063: view "SYS.DBA_SERVER_REGISTRY" has errors
or
ERROR at line 1:
ORA-04063: package body "SYS.DBMS_REGISTRY" has errors
在一开始会提示该视图有错误,这不要紧,稍等一会。
SQL> select comp_name,status,version from dba_server_registry;
COMP_NAME STATUS
VERSION
-------------------------------------------------- --------------------------
------------------------------
Oracle Workspace Manager UPGRADING
11.2.0.1.0
Oracle Database Catalog Views VALID
11.2.0.2.0
Oracle Database Packages and Types VALID
11.2.0.2.0
Oracle Real Application Clusters VALID
11.2.0.2.0
20:50:40 SQL>
20:50:40 SQL> Rem
*********************************************************************
20:50:40 SQL> Rem END catupgrd.sql
20:50:40 SQL> Rem
*********************************************************************
20:50:40 SQL>
以上 catupgrd.sql 脚本运行了 10 分钟左右
重启实例,运行 utlrp.sql 脚本编译失效对象
sqlplus / as sysdba
startup;
@?/rdbms/admin/utlrp
17. TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN 2011-09-07 20:53:38
该脚本会自动根据 cpu 数目选择并行度
DOC> This script automatically chooses serial or parallel recompilation
DOC> based on the number of CPUs available (parameter cpu_count) multiplied
DOC> by the number of threads per CPU (parameter parallel_threads_per_cpu).
DOC> On RAC, this number is added across all RAC nodes.
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END 2011-09-07 20:55:09
该脚本耗时约 2 分钟
修改 cluster_database 参数为 true,并重启所有节点实例
SQL> alter system set cluster_database=true scope=spfile;
System altered.
可以看到以上在数据库仅安装了 CATALOG、CATPROC、OWM 和 RAC Cluster View 4 种组
件的情况下,catupgrd.sql 字典升级脚本仅耗时 10 分钟左右。 而实际的生产库可能安装了更
多的组件,如 JVM 等组件将耗时较多。
以下总结了各 Oracle 组件升级字典的平均耗时,是一张十分有用的升级时间参考表:
DB Sample Upgrade Time
较少组件情况下
HH:MM:S
Component
S
Oracle Server 00:16:17
JServer JAVA Virtual Machine 00:05:19
Oracle XDK 00:00:48
Oracle Text 00:00:58
Oracle XML Database 00:04:09
Oracle Database Java
00:00:33
Packages
Gathering Statistics 00:02:43
Total Upgrade Time: 00:30:47
较多组件情况下
Component HH:MM:S
19. [oracle@vrh1 ~]$ srvctl status database -d VPROD
Instance VPROD1 is running on node vrh1
Instance VPROD2 is running on node vrh2
6.修改 oracle 用户的 profile 配置文件指中的变量:
cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
ORACLE_HOME=/s01/orabase/product/11.2.0/dbhome_2
ORACLE_SID=VPROD1
ORACLE_BASE=/s01/orabase
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:$HOME/bin
export PATH ORACLE_HOME ORACLE_SID ORACLE_BASE
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
www.oracledatabase12g.com
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
20. 7. 数据库升级完成后进入一个 pending area,建议在至少 2 个礼拜内,不要升级 compatible
参数和删除 restore point。
在确认没有回退的必要后,修改 compatible 参数并删除 restore point:
alter system set compatible=’11.2.0.2.0′ scope=spfile;
drop restore point MACLEAN_ROLLBACK;
srvctl stop database -d VPROD
srvctl start database -d VPROD
以上成功地将 11.2.0.1 的 RAC 数据库升级到了 11.2.0.2。
五、回退升级操作(Database Downgrade)
我们可以选择 2 种回退办法:
1. 通过 restore point 还原到 11.2.0.1 的数据库
2. 执行 catdwgrd.sql 降级数据字典
针对第一种方法:
关闭所有节点实例
srvctl stop database -d VPROD
export ORACLE_HOME=$OLD_ORACLE_HOME
export PATH=$OLD_ORACLE_HOME/bin:$PATH
unset LD_LIBRARY_PATH
sqlplus / as sysdba
SQL> select * from v$restore_point;
SCN DATABASE_INCARNATION# GUA STORAGE_SIZE
---------- --------------------- --- ------------
TIME
---------------------------------------------------------------------------
RESTORE_POINT_TIME PRE
--------------------------------------------------------------------------- ---
NAME
--------------------------------------------------------------------------------
601958 1 YES 462307328
07-SEP-11 07.52.59.000000000 PM
YES
MACLEAN_ROLLBACK
21. SQL> flashback database to restore point MACLEAN_ROLLBACK;
Flashback complete.
flashback database 的速度 视乎 flashback log 多少而定,一般是很快的,在 1 分钟之内。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
以上通过 restore point 的方法是我所推荐的,这种方法简单、省时省力、高效且问题少少,
是一种绿色方案。同时不要忘记使用 srvctl upgrade 命令还原 ocr 中的 DBHOME 信息,以及
还原 profile 文件。
针对第二种方法:
catdwgrd.sql 的运行有诸多限制,其所消耗的时间可能要略长于 catupgrd.sql。而且该脚本在
运行过程中可能遇到各种错误,不推荐使用这种方法。
关于使用 catdwgrd.sql 脚本降级数据库 11.2.0.2 到 11.2.0.1,可以参考 MOS note <How To
Downgrade From Database 11.2 To Previous Release (includes 11.2.0.2-11.2.0.1) [ID 883335.1]>。