1、环境介绍
我们已经在
RedHat
6.5上成功安装Oracle 10gR2,版本号为10.2.0.1。
[oracle@SimpleLinux ~]$ uname -r
2.6.32-431.el6.i686
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
当前操作系统用户oracle关键环境变量如下:
[oracle@SimpleLinux ~]$ env | grep ORA
ORACLE_SID=ora11g
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
操作系统存储和内存资源相对充足。
[oracle@SimpleLinux ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_simplelinux-LogVol00 29G 8.7G 19G 32% /
tmpfs 448M 0 448M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
[oracle@SimpleLinux ~]$ free -m
total used free shared buffers cached
Mem: 894 332 561 0 20 241
-/+ buffers/cache: 70 824
Swap: 1999 0 1999
2、备份环境和补丁包准备
首先,我们需要将数据库、监听程序等相关对象进行关闭。根据不同的情况,ASM、DB Control也需要关闭。
[oracle@SimpleLinux ~]$ lsnrctl stop
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 13-MAY-2014 11:19:04
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
The command completed successfully
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
下面需要备份环境。注意:升级过程是有风险的,特别是在生产环境下。两个步骤是降低升级风险的重要策略:多次测试和数据备份。多次测试(在系统测试环境)可以帮助我们事先发现升级方案问题,准备应对策略,验证方案。数据备份可以最大程度减少我们数据损失风险。
具体备份方法针对各自情况不同,可以选择RMAN、冷备份、exp/expdp等。此处笔者选择直接将目录拷贝的完全方法。
[root@SimpleLinux upload]# mkdir /u02
[root@SimpleLinux upload]# cd /u01
[root@SimpleLinux u01]# cp -r * /u02
[root@SimpleLinux u01]#
正式进行动作前,要重新规划确定升级步骤。本次升级要实现两个补丁包,一个是10.2.0.5升级包,另一个是在10.2.0.5上运行的补丁包。在MOS上针对特定版本下载升级安装包,并且上传到服务器上。
[root@SimpleLinux ~]# cd /upload/
[root@SimpleLinux upload]# ls -l
total 1082304
-rw-r--r-- 1 root root 4278863 May 13 11:27 p11724962_10205_LINUX.zip
-rw-r--r-- 1 root root 1103992900 May 13 11:29 p8202632_10205_LINUX.zip –升级10.2.0.5包
注意:我们升级数据库是有两个大的步骤,Oracle软件升级和Oracle数据库升级。可以回想一下我们在安装数据库的时候,是先安装数据库软件(包括Grid、Clusterware),之后创建dbca数据库。升级也是一样,我们需要先把数据库软件更新为最新版本,之后清理已经存在的数据库对象,使之升级为最新版本。
3、Oracle软件升级
我们首先进行软件升级动作,解压安装包。
[root@SimpleLinux upload]# ls -l
total 1082472
drwxr-xr-x 5 root root 4096 Jul 23 2010 Disk1
-rw-r--r-- 1 root root 4278863 May 13 11:27 p11724962_10205_LINUX.zip
-rw-r--r-- 1 root root 1103992900 May 13 11:29 p8202632_10205_LINUX.zip
-rwxrwxrwx 1 root root 165290 Jul 20 2010 README.html
root中给oracle用户授权。
[root@SimpleLinux upload]# cd /
[root@SimpleLinux /]# chown -p oracle:oinstall upload/
chown: invalid option -- 'p'
Try `chown --help' for more information.
[root@SimpleLinux /]# chown -R oracle:oinstall upload/
[root@SimpleLinux /]#
升级软件是在图形化界面中进行,所需要配置XWindows或者vnc界面工具。执行目录中的.runInstall脚本,就可以启动界面。如果环境变量配置正常,自动Path都会带入到界面中。
错误:
[oracle@orcl Disk1]$ ./runInstaller
Starting Oracle Universal Installer...
Checking installer requirements...
Checking operating system version: must be redhat-3, SuSE-9, SuSE-10, redhat-4, redhat-5, redhat-6, UnitedLinux-1.0, asianux-1, asianux-2, asianux-3, enterprise-4, enterprise-5 or SuSE-11
Failed <<<<
需要:
[root@localhost ~]# vi /etc/redhat-release
将其内容修改为:
Red Hat Enterprise Linux Server release 4.4 (Tikanga)
大部分操作,都是点击Next确认过程。
下面是验证操作系统环境信息,是否满足安装条件。
安装过程,界面和工作内容和一般安装
Oracle
没有过多差异。
最后需要以root用户手工执行脚本。
执行root.sh中,有一些覆盖的确认,建议覆盖。
[root@SimpleLinux ~]# cd /u01/app/oracle/product/10.2.0/db_1/
[root@SimpleLinux db_1]# ./root.sh
Running Oracle 10g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/10.2.0/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]: y
(篇幅原因,有省略……)
Now product-specific root actions will be performed.
如果没有明确的报错信息,就说明Oracle软件部分的安装成功。
SQL> alter database open;
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
第一步,通过startup upgrade启动实例
SQL> startup upgrade;
ORACLE instance started.
Total System Global Area
322961408 bytes
Fixed Size
2095992 bytes
Variable Size
100664456 bytes
Database Buffers
213909504 bytes
Redo Buffers
6291456 bytes
Database mounted.
Database opened.
第二步,升级数据字典和实例等
。
SQL>@?/rdbms/admin/catupgrd.sql
整个过程需要15分钟至30分钟左右
升级完毕显示如下:
Oracle Database 10.2 Upgrade Status Utility
09-11-2014 21:48:21
Component
Status Version HH:MM:SS
Oracle Database Server
VALID 10.2.0.5.0 00:15:41
JServer JAVA Virtual Machine
VALID 10.2.0.5.0 00:06:46
Oracle XDK
VALID 10.2.0.5.0 00:00:51
Oracle Database Java Packages
VALID 10.2.0.5.0 00:00:45
Oracle Text
VALID 10.2.0.5.0 00:01:07
Oracle XML Database
VALID 10.2.0.5.0 00:03:26
Oracle Workspace Manager
VALID 10.2.0.5.0 00:01:21
Oracle Data Mining
VALID 10.2.0.5.0 00:00:39
OLAP Analytic Workspace
VALID 10.2.0.5.0 00:00:48
OLAP Catalog
VALID 10.2.0.5.0 00:02:01
Oracle OLAP API
VALID 10.2.0.5.0 00:02:01
Oracle interMedia
VALID 10.2.0.5.0 00:06:35
Spatial
VALID 10.2.0.5.0 00:04:50
Oracle Expression Filter
VALID 10.2.0.5.0 00:00:30
Oracle Enterprise Manager
VALID 10.2.0.5.0 00:02:59
Oracle Rule Manager
VALID 10.2.0.5.0 00:00:18
.
Total Upgrade Time: 00:53:47
DOC>#######################################################################
DOC>#######################################################################
DOC>
DOC>
The above PL/SQL lists the SERVER components in the upgraded
DOC>
database, along with their current version and status.
DOC>
DOC>
Please review the status and version columns and look for
DOC>
any errors in the spool log file. If there are errors in the spool
DOC>
file, or any components are not VALID or not the current version,
DOC>
consult the Oracle Database Upgrade Guide for troubleshooting
DOC>
recommendations.
DOC>
DOC>
Next shutdown immediate, restart for normal operation, and then
DOC>
run utlrp.sql to recompile any invalid application objects.
DOC>
DOC>#######################################################################
DOC>#######################################################################
DOC>#
第三步,shutdown 实例。Startup实例
第四步,再次编译无效的应用对象
SQL> @?/rdbms/admin/utlrp.sql
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN
2014-09-11 21:52:02
DOC>
The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC>
objects in the database. Recompilation time is proportional to the
DOC>
number of invalid objects in the database, so this command may take
DOC>
a long time to execute on a database with a large number of invalid
DOC>
objects.
DOC>
DOC>
Use the following queries to track recompilation progress:
DOC>
DOC>
1. Query returning the number of invalid objects remaining. This
DOC>
number should decrease with time.
DOC>
SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC>
DOC>
2. Query returning the number of objects compiled so far. This number
DOC>
should increase with time.
DOC>
SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC>
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.
DOC>
DOC>
UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC>
recompilation. Jobs are created without instance affinity so that they
DOC>
can migrate across RAC nodes. Use the following queries to verify
DOC>
whether UTL_RECOMP jobs are being created and run correctly:
DOC>
DOC>
1. Query showing jobs created by UTL_RECOMP
DOC>
SELECT job_name FROM dba_scheduler_jobs
DOC>
WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>
DOC>
2. Query showing UTL_RECOMP jobs that are running
DOC>
SELECT job_name FROM dba_scheduler_running_jobs
DOC>
WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END
2014-09-11 21:53:40
DOC> The following query reports the number of objects that have compiled
DOC> with errors (objects that compile with errors have status set to 3 in
DOC> obj$). If the number is higher than expected, please examine the error
DOC> messages reported with each object (using SHOW ERRORS) to see if they
DOC> point to system misconfiguration or resource constraints that must be
DOC> fixed before attempting to recompile these objects.
DOC>#
OBJECTS WITH ERRORS
-------------------
0
DOC> The following query reports the number of errors caught during
DOC> recompilation. If this number is non-zero, please query the error
DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC> are due to misconfiguration or resource constraints that must be
DOC> fixed before objects can compile successfully.
DOC>#
ERRORS DURING RECOMPILATION
---------------------------
0
SQL>