您现在的位置是:首页 >技术杂谈 >数据库单实例升级网站首页技术杂谈
数据库单实例升级
一、单实例环境,全时长二个半钟多。详细图文说明到这下载
1、停止所有oracle相关进程。
Emctlstop dbconsole
Isqlplusctl stop
Lsnrctl stop
sqlplus /nolog
sql>conn /as sysdba
Connectedtoanidleinstance.
sql>shutdown
然后,冷备份下数据库cp
2、metalink搜索下载安装p6810189_10204_Linux-x86
[oracle@linux~]cdDisk1
[oracle@linuxDisk1~]$./runInstaller–jreLoc/opt/oracle/jdk1.6.0_18/jre/
备注:因为环境关系,我指定使用了最新的jdk1.6.0.18,如您的环境与我不同。直接执行./runInstaller即可。
按照图形化界面安装,指定之前的软件安装位置
打开一个终端窗口:
[oracle@linux~]su -
口令:
执行提示的脚本,本例中:[root@linux~]#/opt/oracle/product/10.2/db_1/root.sh完成后关闭终端,返回安装界面,确定。如图
Ok,先不要启动数据库,补丁软件安装完成,还需要升级数据库才行。
重要:升级数据库,按说明文档,安装完成后,PostinstallationTasks
1.使用DBUA升级(图型化界面,操作简单,据传出错机率高)
2.手工升级(字符界面,操作稍复制,据传出错机率低)
DBUA方式:
以oracle用户登陆
打开终端,设置好环境变量$ORACLE_HOME,$ORACLE_SID,$PATH
执行dbua
[oracle@linux~]$dbua
看到欢迎界面,如图见文档
下一步,按照提示选择数据库(如果你要操作的数据库不在列表中,手工修改/etc/oratab添加SID),注意"升级完成后编译无效对象"的选项,建议选中,接着下一步。如果在操作之前没有备份数据库,可以在此选择备份。dbua执行的是冷备,需要估计好磁盘剩余空间。点击下一步,oracle开始升级操作,如图
如果运气好即没碰上bug,也没遭遇错误,那就可以finish了,如图
升级完成,Oracle自动打开数据库,赶紧连接进去看看数据是否还在:)
手工升级:
1、以oracle用户登陆
打开终端,设置好环境变量$ORACLE_HOME,$ORACLE_SID,$PATH
[oracle@jsslinuxdbs]$export ORACLE_SID=stu
[oracle@jsslinuxdbs]$oracle@linux-oracle10g:/>sqlplus /no log
SQL*Plus:Release10.2.0.4.0-ProductiononTueMar915:14:182010
Copyright(c)1982,2007,Oracle.AllRightsReserved.
SQL>conn /as sysdba;
Connected.
2、以升级模式启动数据库
SQL>startup upgrade
ORACLE例程已经启动。
数据库装载完毕。
数据库已经打开。
3、重建数据字典,另:如果有归档的话,强烈建议首先关闭归档(升级会产生大量的归档文件)
SQL>SPOOL path.log(路径默认在oracle主目录下/opt/oracle/,这个日志会有点大30多M,可以查看.)
SQL>@$ORACLE_HOME/rdbms/admin/catupgrd.sql
...安装过程图省略(重建数据字典)
SQL>SPOOLOFF
如果这一步顺利执行,升级已经完成了大半。(这里要等待比较长一段时间)
如图
(如果上面的组件状态不是VALID,请检查path.log 日志,处理错误在重新执行catupgrd.sql)
grep error path.log
4、执行完重建数据字典,重启数据库
SQL>SHUTDOWNIMMEDIATE
SQL>STARTUP
5、编译无效对象
由于catupgrd.sql重建过程中可能造成一些对象失效,我们需要运行utlrp.sql重新编译PL/SQLpackages(知道utlrp.sql功能了吧,黑黑,有事没事都可以执行一下)。
@?/rdbms/admin/utlrp.sql
耐心等待,直至完毕,出现sql>
6、然后运行下面的命令来检查升级之后,所有组件的状态:
SQL>select comp_name,version,status from sys.dba_registry;
显示值为VALID,则成功完成升级。如图
另:最好查看下。
SQL>selecttablespace_name,statusfromdba_tablespaces;
--表空间都在
SQL>selectusernamefromdba_users;
--用户都在
SQL>selectobject_namefromdba_objectswhereowner='SCOTT';
--用户对象都在
注:dba_objects视图中也许会有一些类似BIN$4lzljWIt9gfgMFeM2hVSoA==$0的对象存在,这是10g后提供的新功能,对象删除后并非真正被删,而是扔到回收站,这些对象就是回收站的对象,不用管它。