接上篇"RHEL AS4下安装32位oracle10g",呵呵这篇介绍如何从10.2.0.1升级到10.2.0.3。

注:以下内容如未明确指定用户,默认均为oracle用户操作。

准备工作--安装补丁包:

1. 下载补丁包p5337014_10203_LINUX.zip并解压unzip p5337014_10203_LINUX.zip

2. 停止所有数据库服务,监听等

3. 备份数据库,冷备热备均可,但必须是完全备份。推荐冷备,一旦有问题恢复也快。

4. 安装补丁包:

    [oracle@jsslinux oraupdate]$ cd Disk1

    [oracle@jsslinux Disk1]$ ./runInstaller

按照提示一直下一步,直到:

打开一个终端窗口:

    [oracle@jsslinux ~]$ su - root

执行提示的脚本,本例中:

    [root@jsslinux ~]# /opt/ora10g/product/10.2.0/db_1/root.sh

完成后关闭终端,返回安装界面,确定。

这个时候别忙着启动数据库,补丁打完了,还需要升级数据库才行。

下面进入重头戏--升级数据库

选择题如下:

A.  使用DBUA升级(图型化界面,操作简单,据说出错机率高)

B.  手工升级(字符界面,操作稍复制,据说出错机率低)

选A,好,我不得不说,这不是一个不明智的选择。

以oracle用户登陆

打开终端,设置好环境变量$ORACLE_HOME,$ORACLE_SID,$PATH

执行dbua  

    [oracle@jsslinux ~]$ dbua

看到欢迎界面

下一步,按照提示选择数据库(如果你要操作的数据库不在列表中,手工修改/etc/oratab添加SID),注意"升级完成后编译无效对象"的选项,建议选中,接着下一步。如果在操作之前没有备份数据库,可以在此选择备份。dbua执行的是冷备,需要估计好磁盘剩余空间。点击下一步,oracle开始升级操作

如果运气好即没碰上bug,也没遭遇错误,那就可以finish了。

升级完成,Oracle自动打开数据库,赶紧连接进去看看数据是否还在:)

选B,好,我不得不又说,这不是一个不明智的选择。

1、 以oracle用户登陆

打开终端,设置好环境变量$ORACLE_HOME,$ORACLE_SID,$PATH

    [oracle@jsslinux dbs]$ export ORACLE_SID=jsscon

    [oracle@jsslinux dbs]$ sqlplus "/ as sysdba"

    SQL*Plus: Release 10.2.0.3.0 - Production on  星期三 11月 21 12:48:16 2007

    Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

    已连接到空闲例程。

2、 以升级模式启动数据库

    SQL> startup upgrade

    ORACLE  例程已经启动。

    Total System Global Area  109051904 bytes

    Fixed Size                  1260360 bytes

    Variable Size              92275896 bytes

    Database Buffers           12582912 bytes

    Redo Buffers                2932736 bytes

    数据库装载完毕。

    数据库已经打开。

3、 重建数据字典,另:如果有归档的话,强烈建议首先关闭归档

    SQL> spool /home/oracle/oraupgrade.log

    SQL> @?/rdbms/admin/catupgrd.sql

    ...

    ...

    SQL> 

    SQL> Rem *********************************************************************

    SQL> Rem END catupgrd.sql

    SQL> Rem *********************************************************************

    SQL> SPOOL OFF

如果这一步顺利执行,升级已经完成了大半。

4、 重启数据库

    SQL> shutdown              

    数据库已经关闭。

    已经卸载数据库。

    ORACLE  例程已经关闭。

    SQL> startup

    ORACLE  例程已经启动。

    Total System Global Area  109051904 bytes

    Fixed Size                  1260360 bytes

    Variable Size              92275896 bytes

    Database Buffers           12582912 bytes

    Redo Buffers                2932736 bytes

    数据库装载完毕。

    数据库已经打开。

5、 编译无效对象

由于catupgrd.sql重建过程中可能造成一些对象失效,我们需要运行utlrp.sql重新编译那些无效对象(知道utlrp.sql功能了吧,黑黑,有事没事都可以执行一下)。

    SQL> select count(1) from dba_objects where status=¨INVALID¨;

      COUNT(1)

    ----------

           108

    已选择 1 行。

    SQL> @?/rdbms/admin/utlrp.sql

    ...

    ...

    SQL> DECLARE

      2     threads pls_integer := &&1;

      3  BEGIN

      4     utl_recomp.recomp_parallel(threads);

      5  END;

      6  /

    耐心等候吧。

    SQL> Rem ================================================================

    SQL> Rem END utlrp.sql

    SQL> Rem ================================================================

    SQL> select tablespace_name,status from dba_tablespaces;

    -- 表空间都在

    SQL> select username from dba_users;

    -- 用户都在

    SQL> select object_name from dba_objects where owner=¨JSS¨;

    -- 用户对象都在

ok, 恭喜,升级成功。。

注:dba_objects视图中也许会有一些类似BIN$BD34RX+6TICOMtVfhZZ6Zw==$0的对象存在,这是10g后提供的新功能,对象删除后并非真正被删,而是扔到回收站,这些对象就是回收站的对象,不用管它。