2013年(350)
分类: Oracle
2013-04-24 13:32:33
注:以下内容如未明确指定用户,默认均为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后提供的新功能,对象删除后并非真正被删,而是扔到回收站,这些对象就是回收站的对象,不用管它。