--原文:http://blog.itpub.net/28916011/viewspace-2683059/
一个环境是oracle 11.2.0.1,一个环境是oracle 11.2.0.4,同样的数据,同样的sql,在两个版本数据库表现不一样。于是,干脆都统一为11.2.0.4。
但由于环境限制,只能用静默的方法,把oracle 11.2.0.1 升级到 11.2.0.4。
不过,还好,根据网上的文档,升级过程还算顺利。
下面,我记录一下升级过程,供自己以后查看,也供有需要的人参考。
1、11.2.0.1环境(待升级数据库)
|
1
2
3
4
5
6
7
8
|
SQL> select * from v$version;
BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionPL/SQL Release 11.2.0.1.0 - Production
CORE11.2.0.4.0ProductionTNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production |
|
1
2
3
4
5
6
7
8
9
|
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ cat .bash_profile
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
alias sqlplus=\'rlwrap sqlplus\'
|
2、升级前的准备工作
2.1、 备份数据库
升级数据库是一个有风险的过程,需要仔细规划和慎重处理。首先要做数据库的完全备份,备份的内容包括数据文件,控制文件,归档文件,日志文件,参数文件,密码文件等。可以备份一下整个ORACLE_HOME目录,如果升级有问题,还可以还原回来。备份的方法可以使用dump数据泵,tar,rman等。
如:RMAN全备
|
1
2
3
|
[oracle@localhost ~]$ export ORACLE_SID=orcl
[oracle@localhost ~]$ rman target /RMAN>backup database format \'/home/oracle/rmanbak/df_%t_%s_%p.bak\';
|
备份老的ORACLE_HOME和oraInventory
|
1
2
|
[oracle@localhost ~]$tar –cvfp product.tar.gz /u01/app/oracle/
[oracle@localhost ~]$tar –cvfp oraInventory.tar.gz /u01/app/oraInventory/
|
2.2、干净的关闭数据库
|
1
|
SQL> shutdown immediate;
|
2.3、 关闭数据库的监听
在数据库的升级中,会对数据库的监听文件做重新的配置,建议正常的关闭监听,如下:
|
1
2
|
[oracle@localhost ~]$ lsnrctl stop[oracle@localhost ~]$ netstat -an |grep 1521
|
2.4、 关闭OEM
在升级中需要关闭EM,
|
1
2
|
[oracle@localhost ~]$emctl stop dbconsole[oracle@localhost ~]$netstat -an |grep 1158
|
2.5、不 对数据库的任何原有文件做操作
本人在升级中,编辑数据库的监听文件,导致配置监听和EM错误,故不对数据库的任何原有文件做操作。
3、安装oracle 11.2.0.4软件包
把oracle 11.2.0.4的安装包上传到/home/oracle目录下,解压后得到database目录。
|
1
2
3
4
5
6
|
[oracle@localhost ~]$ ls
p13390677_112040_Linux-x86-64_1of7.zip p13390677_112040_Linux-x86-64_2of7.zip[oracle@localhost ~]$ unzip p13390677_112040_Linux-x86-64_1of7.zip[oracle@localhost ~]$ unzip p13390677_112040_Linux-x86-64_2of7.zip[oracle@localhost ~]$ ls
database |
开始安装数据库软件11.2.0.4。
|
1
2
3
4
5
6
7
8
9
10
11
|
[oracle@localhost ~]$ cd database
[oracle@localhost ~]$./runInstaller -silent -debug -force -ignorePrereq \
DECLINE_SECURITY_UPDATES=true \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.DBA_GROUP=dba \
oracle.install.db.OPER_GROUP=oinstall
|
说明:INVENTORY_LOCATION可以和老版本共用一个目录。ORACLE_BASE和老版本保持一样,ORACLE_HOME指向了一个新的目录11.2.0.4/dbhome_1(以前是11.2.0/db_1)。
不过,这些目录都是可以随意指定,我上面做是只是为了版本管控方便。
安装过程大概需要15分钟左右(根据机型配置时间也不同),安装过程中有警告[WARNING] 时需要安装一些i386 的包。查看log安装即可。
出现以下字样表示升级成功。
|
1
2
3
|
As a root user, execute the following script(s): 1. /u01/oracle/app/product/11.2.0.4/dbhome_1/root.sh
Successfully Setup Software. |
切换到 root 用户执行脚本。
|
1
|
[root@localhost ~]# /u01/oracle/app/product/11.2.0.4/dbhome_1/root.sh
|
4、配置新环境变量,拷贝参数文件和监听文件
4.1、配置新环境变量
|
1
2
3
4
5
6
7
8
9
10
|
[oracle@localhost ~]$ whoami oracle[oracle@localhost ~]$ cat .bash_profile
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
alias sqlplus=\'rlwrap sqlplus\'
|
上面看到,新环境变量和老环境变量相比,我只修改了一个参数:
|
1
2
|
新参数:ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
老参数:ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
|
注意: 在10g以后,一般情况下环境变量中没有必要设置LD_LIBRARY_PATH,但是一旦将ORACLE_HOME迁移到其他目录,则环境变量中还需要添加这个变量。
source一下后,环境变量就指向新安装的11.2.0.4位置了。
|
1
2
3
4
5
|
[oracle@localhost ~]$ source .bash_profile
[oracle@localhost ~]$ env |grep ORA
ORACLE_SID=orclORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1
|
4.2、修改 /etc/oratab 内容为最新位置
|
1
2
|
[oracle@localhost ~]$ vim /etc/oratab
orcl:/u01/app/oracle/product/11.2.0.4/db_1:N
|
4.3、 将参数文件copy到新的目录下
|
1
2
|
[oracle@localhost ~]$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
[oracle@localhost dbs]$ cp -a * /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
|
4.4、 拷贝监听TNS配置文件到新的目录下
|
1
2
|
[oracle@localhost admin]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin/
[oracle@localhost dbs]$ cp -a * /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin
|
4.5、启动监听
先修改新位置下的listener.ora里面的路径,然后启动监听。
|
1
|
[oracle@localhost admin]$ lsnrctl start |
5、升级数据库
要注意退出oracle用户重新su - oracle下,然后sqlplus能看到11.2.0.4.0字样才行。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[oracle@19_mysql-slave ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 30 12:10:30 2020Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to an idle instance.SQL> startup upgradeORACLE instance started.Total System Global Area 1603411968 bytesFixed Size 2253664 bytesVariable Size 1006636192 bytesDatabase Buffers 587202560 bytesRedo Buffers 7319552 bytesDatabase mounted.Database opened.SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql ---该脚本会运行30分钟左右
|
以上catupgrd.sql脚本整整运行了30分钟,执行完之后会shutdown immediate数据库。这个时候我们重启数据库即可。
|
1
2
3
4
5
6
7
8
9
10
11
|
[oracle@localhost admin]$ sqlplus /nolog
SQL> conn / as sysdbaSQL> startupSQL> select * from v$version;
BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionPL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 ProductionTNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production |
6、 运行 utlrp.sql 编译失效对象
检查无效对象:
|
1
2
|
SQL> select * from dba_objects where status !=\'VALID\';
SQL> SELECT count(*) FROM dba_objects WHERE status=\'INVALID\';
|
运行utlrp.sql编译失效对象。
|
1
|
SQL> @?/rdbms/admin/utlrp
|
该脚本耗时约为3分钟左右。 至此数据库已经升级完成。
最后,重启数据库没有问题就是升级成功了。
7、更新数据库服务脚本
将/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/ 下的 dbstart 和 dbshut ,ORACLE_HOME_LISTNER=$1 改为 $ORACLE_HOME 。
|
1
2
|
#ORACLE_HOME_LISTNER=$1ORACLE_HOME_LISTNER=$ORACLE_HOME |
8、 升级后的检查确认
|
1
2
3
4
5
|
SQL> select status from v$instance;
STATUS ------------OPEN #注意,成功打开数据库后,这里将是OPEN,而非OPEN MIGRATE
|
|
1
2
3
4
5
6
7
8
|
SQL> select * from v$version;
BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - ProductionCORE 11.2.0.4.0 ProductionTNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production |
9、升级成功后需重建EM(没有EM可忽略该步)
手工创建EM资料库:
|
1
2
3
4
5
6
7
8
|
####emca -repos drop[oracle@localhost admin]$ emca -reposdrop####emca -repos create [oracle@localhost admin]$ emca -reposcreate ###emca -config dbcontrol db[oracle@localhost admin]$ emca-config dbcontrol db |
参考链接: