深圳市深讯信科发展有限公司第一事业部文档编号SXIT_DB_02密级项目名称Oraclepatchset项目来源文档版本Oracle数据库补丁安装说明文档作者:任成山日期:2003/10/08项目经理:日期://测试经理:日期://技术部:日期://开发部总监:日期://阅读者:各个项目负责人和各工程人员深圳市深讯信科发展有限公司版权所有不得复制Oraclepatchset仅供内部使用第2页1.问题的出现:在我们最开始安装的Oracle数据库软件中,都是其相应的最初的版本,Oracle8I为Oracle8.1.7.0.0,Oracle9I为Oracle9.2.0.0.0,这两个版本为Oracle8I和Oracle9I最初发行的版本,存在一些Bug,特别是Oracle8I,运行一段时间后就会发生ORA-04031unabletoallocatestringbytesofsharedmemory(string,string,string,string),共享内存分配就会出现问题,导致数据库无法连接,一般通过重新启动数据库就可以解决,严重者需要重新启动机器。ORA-04031的错误在以WEB应用的系统中经常出现,大概是1个多月一次,造成系统的停用,ORA-04031错误的出现,与应用程序的编写有一定的关系,比如SQL语句的where子句中没有使用绑定变量,而使用了常量,从而本来相同的SQL语句变成了成千上万条不同的语句。从而使共享池出现无法分配的错误,但最主要的还是由oracle8.1.7.0.0的最初版本中存在这样的BUG引起的,彻底解决的方法就是要打补丁进行Oracle的升级,将Oracle8I从8.1.7.0.0升级到8.1.7.4.0(Oracle8I的最后一个版本),将Oracle9I从9.2.0.0.0升级到9.2.0.4.0(Oracle9I的最后一个版本)。2.怎样查看Oracle数据库是否为最后一个版本在进行打补丁升级之前首先查看Oracle数据库是否为最后一个版本,如果不是,需要打补丁把数据库升级到最后一个版本,升级需要在原安装的基础上进行,一般是安装完最初版本之后马上进行升级。查看Oracle数据库的版本的方法为:用oracle用户登陆到UNIX系统bash-2.03$sqlplus/nologOracle8.1.7显示如下的信息:SQL*Plus:Release8.1.7.0.0-ProductiononWedOct814:12:272003(c)Copyright2000OracleCorporation.Allrightsreserved.Oraclepatchset仅供内部使用第3页SQLconnect/assysdbaConnected.SQLselect*fromv$version;BANNER----------------------------------------------------------------Oracle8iEnterpriseEditionRelease8.1.7.4.0-64bitProductionPL/SQLRelease8.1.7.4.0-ProductionCORE8.1.7.0.0ProductionTNSforSolaris:Version8.1.7.4.0-ProductionNLSRTLVersion3.4.1.0.0–Production如果是以上的显示就说明数据库已经是Oracle8.1.7.4.0(Oracle8I的最后一个版本),上面红色加粗的为版本号,如果不是就需要打补丁进行升级Oracle9.2.0.0.0显示如下SQL*Plus:Release9.2.0.4.0-Productionon星期三10月814:13:092003Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.SQLconnect/assysdba已连接。SQLselect*fromv$version;BANNER----------------------------------------------------------------Oracle9iEnterpriseEditionRelease9.2.0.4.0-ProductionPL/SQLRelease9.2.0.4.0-ProductionCORE9.2.0.3.0ProductionTNSfor32-bitWindows:Version9.2.0.4.0-ProductionNLSRTLVersion9.2.0.4.0-Production的信息:如果是以上的显示就说明数据库已经是Oracle9.2.0.4.0(Oracle9I的最后一个版本),上面红色加粗的为版本号,如果不是就需要打补丁进行升级Oraclepatchset仅供内部使用第4页3.升级补丁的介绍从Oracle8.1.7.0.0升级到8.1.7.4.0的补丁号为:2376472相应的文件为:p2376472_8174_SOLARIS.zip(32位),p2376472_8174_SOLARIS64.zip(64位),如果Oracle数据库软件是32位的就打32位的补丁,如果Oracle数据库软件是64位的就打64位的补丁从Oracle9.2.0.0.0升级到9.2.0.4.0的补丁号为:3095277相应的文件为:p3095277_9204_SOLARIS64.zip(32位),p3095277_9204_SOLARIS.zip(64位),如果Oracle数据库软件是32位的就打32位的补丁,如果Oracle数据库软件是64位的就打64位的补丁判断目前安装的Oracle软件位数的方法为:bash-2.03$cd$ORACLE_HOME/binbash-2.03$fileoracleoracle:ELF64-bitMSBexecutableSPARCV9Version1,dynamicallylinked,notstripped4.打补丁升级之前的准备工作:如果是刚安装的Oracle数据库软件,则不需要进行数据的备份,如果是生产用数据库,则在升级之前一定要做好备份,虽然说升级不会对生产系统的数据造成什么损坏,但是备份是很重要的,如果数据量比较大,不好备份,那么一定要对基础的很重要的不能丢失的数据进行EXP的备份(切记!!!)打补丁升级之前的准备工作如下:1)准备补丁,将压缩的补丁程序tarxvf到一个指定的目录比如:/export/home/oracle/oracle_patch(补丁压缩文件大概200多M,会刻成光盘,向DBA索要)2)停掉与数据库有关的所有模块程序3)Shutdownimmediate掉Oracle数据库Oraclepatchset仅供内部使用第5页bash-2.03$sqlplus/nolog…………………………………………………………….SQLconnect/assysdba;SQLshutdownimmediate;……………………………………………………………..4)Stop掉数据库监听:bash-2.03$lsnrctlstop……………………………………………………………….5)停止所有与Oracle数据库有关的服务:bash-2.03$ps–ef|greporaclekill掉所有的Oracle进程(在一般情况下执行了2,3,4,5后可能还会有一些Oracle进程),一定要把所有的Oracle有关的进程kill掉,否则无法进行升级5.打补丁的升级过程:在第4步所有的工作完成之后,就可以进行补丁的安装了,安装的具体步骤为:1).运行$ORACLE_HOME/bin/runInstaller,出现Oracle软件安装助手界面:(如下图)在[文件定位]中的[路径]中选择tarxvf之后的补丁程序的产品列表路径程序名称,如果你在4中的第1步中将补丁程序解压缩tarxvf到/export/home/oracle/oracle_patch目录下,那么路径就是:/export/home/oracle/oracle_patch/Disk1/stage/products.jar,[目标]中的[名称]和[路径]保持默认值不变,然后选择下一步进行补丁的安装,如果在安装的过程中出现”oracle运行程序在进行中,不能进行软件的覆盖”类似的错误,那么说明还存在其他的Oracle进程,那么需要执行第4步的第5来停止所有与Oracle数据库有关的服务。之后的安装步骤与安装Oracle软件一样,单击[下一步]直到安装完毕为止。Oraclepatchset仅供内部使用第6页2)成功将补丁程序安装之后,启动Oracle数据库(startup)和Oracle监听程序(lsnrctlstart),数据库启动成功后,启动相应的模块程序。6.升级之后又出现的问题打补丁升级数据库只是把Oracle软件的一些应用程序更新成新的版本,但是一些数据字典却没有升级更新,造成Oracle的一些实用程序如Exp和Imp不能正常使用,需要DBA来通过运行脚本来更新数据字典,如果升级后出现类似的错误情况,请与DBA联系