Oracle 10g 升级(10.2.0.1.0升级到10.2.0.4.0)之--CPU Update


Oracle 版本升级线路图

wKiom1Nxh3CBdH4bAAKqqZWQIy0062.jpg

Oracle 的版本号很多,先看11g的一个版本号说明:

注意: 

     在oracle 9.2 版本之后, oracle 的maintenance release number 是在第二数字位更改。 而在之前,是在第三个数字位。

1. Major Database Release Number

     第一个数字位,它代表的是一个新版本软件,也标志着一些新的功能。如11g,10g。

2. Database Maintenance Release Number

     第二个数字位,代表一个maintenance release 级别,也可能包含一些新的特性。

3. Fusion Middleware Release Number

     第三个数字位,反应Oracle 中间件(Oracle Fusion Middleware)的版本号。

4. Component-Specific Release Number

     第四个数字位,主要是针对组件的发布级别。不同的组件具有不同的号码。 比如Oracle 的patch包。

5. Platform-Specific Release Number

     第五个数字位,这个数字位标识一个平台的版本。 通常表示patch 号。


Oracle 补丁介绍:

1. 什么是PSU/CPU?

CPU: Critical Patch Update   (SPU: Security Patch Update)

Oracle对于其产品每个季度发行一次的安全补丁包,通常是为了修复产品中的安全隐患。

PSU: Patch Set Updates

Oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多的,并且被验证过具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复而且还包含了最新的CPU。

2. 如何查找最新的PSU?

每个数据库版本都有自己的PSU,PSU版本号体现在数据库版本的最后一位,比如最新的10.2.0.5的PSU是10.2.0.5.3,而11.2.0.2的最新PSU则是11.2.0.2.2。

MOS站点中OracleRecommended Patches — Oracle Database [ID 756671.1] 文档中查到各个产品版本最新的PSU。

如果你记不住这个文档号,那么在MOS中以“PSU”为关键字搜索,通常这个文档会显示在搜索结果的最前面。

注意:必须购买了Oracle基本服务获取了CSI号以后才有权限登陆MOS站点


Upgrade与Update

  首先,我们针对所使用的数据库可能会进行如下措施,版本升级或补丁包升级,那何为版本升级、何为补丁包升级呢?

   比如我的当前数据库是10GR2版本,但公司最近有个升级计划,把这套数据库升级到当下最新的11GR2,这种大版本间升级动作即为Upgrade。根据公司计划在原厂工程师和DBA共同努力下,数据库已升级到11GR2,当下版本为11.2.0.3.0。这时候原厂工程师推荐把最新的PSU给打上,获得老板的批准之后,我们又把数据库进行补丁包的升级,应用了PSU Patch14727310之后,数据库版本现在成为11.2.0.3.5,这个过程即是Update。

不得不再次提醒,Upgrade和Update都希望在获得原厂的支持下进行,尤其是Upgrade,这对于企业来说是个非常大的动作!

PSR(Patch Set Release)和 PSU(Patch Set Update)

  8i、9i、10g、11g这是其主要版本号,每一版本会陆续有两至三个发行版,如10.1,10.2,和11.1,11.2分别是10g和11g的两个发行版。对于每一个发行版软件中发现的BUG,给出相应的修复补丁。每隔一定时期,会将所有补丁集成到软件中,经过集成测试后,进行发布,也称为PSR(Patch Set Release)。以10.2为例,10.2.0.1.0是基础发行版,至今已有三个PSR发布,每个PSR修改5位版本号的第4位,最新10.2的PSR为10.2.0.4.0。(11.1.0.6.0是11.1的基础发行版,11.1.0.7.0是第一次PSR)。

  在某个PSR之后编写的补丁,在还没有加入到下一个PSR之前,以个别补丁(InterimPatch)的形式提供给客户。某个个别补丁是针对Oracle公司发现的或客户报告的某一个BUG编写的补丁,多个个别补丁之间一同安装时可能会有冲突,即同一个目标模块分别进行了不同的修改。另外,即便在安装时没有发现冲突,由于没有进行严格的集成测试,运行过程中由于相互作用是否会发生意外也不能完全排除。

  除去修改功能和性能BUG的补丁,还有应对安全漏洞的安全补丁。Oracle公司定期(一年四期)发布安全补丁集,称之为CPU(Critical Patch Updates)

   由于数据库在信息系统的核心地位,对其性能和安全性的要求非常高。理应及时安装所有重要补丁。另外一个方面,基于同样的理由,要求数据库系统必须非常稳定,安装补丁而导致的系统故障和性能下降同样不可接受。DBA经常面临一个非常困难的选择:对于多个修复重要BUG的个别补丁是否安装。不安装,失去预防故障发生的机会,以后故障发生时,自己是无作为;安装,如果这些补丁中存在着倒退BUG,或者相互影响,以后发生由于安装补丁而造成的故障时,自己则是无事生非!而等待下一个PSR,一般又需要一年时间。因此,出了PSU(Patch Set Update)

Oracle 补丁下载:


wKioL1NxiLuD_j1fAAH_CKYndl0867.jpg

CPU UPDATE步骤:

1、检查当前版本

05:39:08 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

2、检查磁盘空间(system 必须要最少10m)

05:46:49 SQL> select a.tablespace_name,round(a.total_size) "total_size(mb)",round(a.total_size) - round(b.free_size,3) "unsed_size(mb)",round(b.free_size,3) "free_size(mb)",round(b.free_size/total_size *100,2) ||'%' free_rate
     from (select tablespace_name,sum(bytes) /1024/1024 total_size             from dba_data_files
     group by tablespace_name) a,(select tablespace_name,sum(bytes)/1024/1024 free_size
     from dba_free_space
     group by tablespace_name) b
     where a.tablespace_name=b.tablespace_name(+);
TABLESPACE_NAME      total_size(mb) unsed_size(mb) free_size(mb) FREE_RATE-------------------- -------------- -------------- ------------- ---------
UNDOTBS1                         85         14.437        70.563 83.01%
SYSAUX                          260        248.312        11.688 4.5%
LXTBS1                           50           .125        49.875 99.75%
USERS                            10           5.75          4.25 42.5%
SYSTEM                          490        482.062         7.938 1.62%
EXAMPLE                         100          68.25         31.75 31.75%
6 rows selected.

添加磁盘空间:

05:51:23 SQL> alter database datafile 1 resize 800m;
Database altered.
05:52:27 SQL> alter database datafile 4 resize 100m;
Database altered.
05:52:49 SQL> alter database datafile 2 resize 400m;
Database altered.

查看表空间信息:

05:46:49 SQL> select a.tablespace_name,round(a.total_size) "total_size(mb)",round(a.total_size) - round(b.free_size,3) "unsed_size(mb)",round(b.free_size,3) "free_size(mb)",round(b.free_size/total_size *100,2) ||'%' free_rate
     from (select tablespace_name,sum(bytes) /1024/1024 total_size             from dba_data_files
     group by tablespace_name) a,(select tablespace_name,sum(bytes)/1024/1024 free_size
     from dba_free_space
     group by tablespace_name) b
     where a.tablespace_name=b.tablespace_name(+);
TABLESPACE_NAME      total_size(mb) unsed_size(mb) free_size(mb) FREE_RATE-------------------- -------------- -------------- ------------- ---------
UNDOTBS1                        400         14.437       385.563 96.39%
SYSAUX                          260        248.312        11.688 4.5%
LXTBS1                           50           .125        49.875 99.75%
USERS                           100           5.75         94.25 94.25%
SYSTEM                          800        482.062       317.938 39.74%
EXAMPLE                         100          68.25         31.75 31.75%
6 rows selected.

05:54:04 SQL> col name for a50
05:54:35 SQL> select file#,name from v$datafile;
    FILE# NAME
---------- --------------------------------------------------         
1 /u01/app/oracle/oradata/prod/system01.dbf         
2 /u01/app/oracle/oradata/prod/undotbs01.dbf         
3 /u01/app/oracle/oradata/prod/sysaux01.dbf         
4 /u01/app/oracle/oradata/prod/users01.dbf         
5 /u01/app/oracle/oradata/prod/example01.dbf         
6 /u01/app/oracle/oradata/prod/lxtbs1.dbf
6 rows selected.

05:54:50 SQL> alter database datafile 3 resize 400m;
Database altered.
05:46:49 SQL> select a.tablespace_name,round(a.total_size) "total_size(mb)",round(a.total_size) - round(b.free_size,3) "unsed_size(mb)",round(b.free_size,3) "free_size(mb)",round(b.free_size/total_size *100,2) ||'%' free_rate
     from (select tablespace_name,sum(bytes) /1024/1024 total_size             from dba_data_files
     group by tablespace_name) a,(select tablespace_name,sum(bytes)/1024/1024 free_size
     from dba_free_space
     group by tablespace_name) b
     where a.tablespace_name=b.tablespace_name(+);
TABLESPACE_NAME      total_size(mb) unsed_size(mb) free_size(mb) FREE_RATE-------------------- -------------- -------------- ------------- ---------
UNDOTBS1                        400         14.437       385.563 96.39%
SYSAUX                          400        248.312       151.688 37.92%
LXTBS1                           50           .125        49.875 99.75%
USERS                           100           5.75         94.25 94.25%
SYSTEM                          800        482.062       317.938 39.74%
EXAMPLE                         100          68.25         31.75 31.75%
6 rows selected.

3、调整内存参数(share pool和java pool 加快升级速度)

05:44:55 SQL> show parameter sga;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 492M
sga_target                           big integer 492M

05:45:00 SQL> select name,bytes/1024/1024 from v$sgainfo;

NAME                             BYTES/1024/1024
-------------------------------- ---------------
Fixed SGA Size                         1.1638031
Redo Buffers                           2.8359375
Buffer Cache Size                            328
Shared Pool Size                             124
Large Pool Size                               12
Java Pool Size                                24
Streams Pool Size                              0
Granule Size                                   4
Maximum SGA Size                             492
Startup overhead in Shared Pool               36
Free SGA Memory Available                      0
11 rows selected.

05:45:24 SQL> alter system set java_pool_size =100m;

System altered.

05:45:53 SQL> select name,bytes/1024/1024 from v$sgainfo;

NAME                             BYTES/1024/1024
-------------------------------- ---------------
Fixed SGA Size                         1.1638031
Redo Buffers                           2.8359375
Buffer Cache Size                            252
Shared Pool Size                             124
Large Pool Size                               12
Java Pool Size                               100
Streams Pool Size                              0
Granule Size                                   4
Maximum SGA Size                             492
Startup overhead in Shared Pool               36
Free SGA Memory Available                      0
11 rows selected.

4、为数据库做冷备份

RMAN> run {
2> shutdown immediate;
3> startup mount;
4> allocate channel c1 type disk;
5> allocate channel c2 type disk;
6> backup full tag='db_full_bak' database format '/disk1/rman/prod/cold_bak/%d_%s.bak';
7> alter database open;
8> }
RMAN> list backup;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
10      Full    378.33M    DISK        00:01:29     27-APR-12             BP Key: 10   Status: AVAILABLE  Compressed: NO  Tag: DB_FULL_BAK        
Piece Name: /disk1/rman/prod/cold_bak/PROD_10.bak  
List of Datafiles in backup set 10  
File LV Type Ckp SCN    Ckp Time  Name  
---- -- ---- ---------- --------- ----  
1       Full 1481218    27-APR-12 /u01/app/oracle/oradata/prod/system01.dbf  
4       Full 1481218    27-APR-12 /u01/app/oracle/oradata/prod/users01.dbf6       Full 1481218    27-APR-12 /u01/app/oracle/oradata/prod/lxtbs1.dbf
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
11      Full    309.84M    DISK        00:01:28     27-APR-12             BP Key: 11   Status: AVAILABLE  Compressed: NO  Tag: DB_FULL_BAK        
Piece Name: /disk1/rman/prod/cold_bak/PROD_11.bak  
List of Datafiles in backup set 11  
File LV Type Ckp SCN    Ckp Time  Name  
---- -- ---- ---------- --------- ----  
2       Full 1481218    27-APR-12 /u01/app/oracle/oradata/prod/undotbs01.dbf  
3       Full 1481218    27-APR-12 /u01/app/oracle/oradata/prod/sysaux01.dbf  
5       Full 1481218    27-APR-12 /u01/app/oracle/oradata/prod/example01.dbf
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
12      Full    7.11M      DISK        00:00:01     27-APR-12              BP Key: 12   Status: AVAILABLE  Compressed: NO  Tag: TAG20120427T060513   Piece Name: /u01/app/oracle/flash_recovery_area/PROD/autobackup/2012_04_27/o1_mf_s_781682594_7smkntpy_.bkp  
Control File Included: Ckp SCN: 1481218      
Ckp time: 27-APR-12  
SPFILE Included: Modification time: 27-APR-12

5、关闭数据库实例及相关进程

RMAN> shutdown immediate

database closed
database dismounted
Oracle instance shut down

RMAN>

[oracle@RH4 ~]$ ps -ef |grep ora_|grep -v grep
[oracle@RH4 ~]$ netstat -an |grep 1521
[oracle@RH4 ~]$ netstat -an |grep 55
[oracle@RH4 ~]$ netstat -an |grep 1158
[oracle@RH4 ~]$


6、将补丁包上传到oracle server ,解压、安装

[oracle@RH4 ~]$ unzip p6810189_10204_Linux-x86.zip   //解压后生成Disk1 目录

7、 以图形界面进入Oracle server

[oracle@RH4 ~]$cd  Disk1
[oracle@RH4 Disk1]$ ./runInstaller

---按照提示升级

181831511.png


181957111.png


182037753.png


182120869.png

[root@RH4 ~]# /u01/app/oracle/product/10.2.0/db_1/root.sh

Running Oracle10 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   
Copying dbhome to /usr/local/bin ...
The file "oraenv" already exists in /usr/local/bin.  
Overwrite it? (y/n) [n]: y   
Copying oraenv to /usr/local/bin ...
The file "coraenv" already exists in /usr/local/bin.  
Overwrite it? (y/n) [n]: y   
Copying coraenv to /usr/local/bin ...
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.sh script.
Now product-specific root actions will be performed.

8、升级完成后以startup upgrade 方式打开库

[oracle@RH4 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 27 06:19:46 2012
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  515899392 bytes
Fixed Size                  1268412 bytes
Variable Size             247465284 bytes
Database Buffers          264241152 bytes
Redo Buffers                2924544 bytes
Database mounted.ORA-01092: ORACLE instance terminated. Disconnection forced

查看告警日志

[oracle@RH4 ~]$ tail -f /u01/app/oracle/admin/prod/bdump/alert_prod.log

SMON: enabling cache recovery
Fri Apr 27 06:19:58 2012
Errors in file /u01/app/oracle/admin/prod/udump/prod_ora_10440.trc:
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
Fri Apr 27 06:19:58 2012
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 10440
ORA-1092 signalled during: ALTER DATABASE OPEN
...
SQL> startup upgrade;
ORACLE instance started.
Total System Global Area  515899392 bytes
Fixed Size                1268412 bytes
Variable Size             247465284 bytes
Database Buffers          264241152 bytes
Redo Buffers                2924544 bytes
Database mounted.Database opened.

9、升级数据字典
SQL>spool  /home/oracle/patch.log

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

SQL>spool off;

10、 重编译失效对象:

 sql