升级方式:原地升级,服务器和操作系统保持不变
升级原理:
服务器上新安装一套Oracle单机11.2.0.4数据库软件(不建库)
将源11.2.0.1版本的Oracle数据库,使用新安装的11.2.0.4版本以升级模式方式打开
更新和升级数据库内的数据字典,完成整个数据库升级
本文环境:linux7
Oracle 11.2.0.1版本ORACLE_HOME目录/u01/app/oracle/product/11.2.0/db_1
Oracle 11.2.0.4版本ORACLE_HOME目录/u01/app/oracle/product/11.2.0.4/db_1
一、步骤简述
(1)升级前准备
1、可选项,全量备份数据库(条件容许的情况,尽量完成一次全量备份,包含数据库全量、归档日志、控制文件、参数文件)
2、考虑主机上是否有定时任务(例如备份任务这些,建议期间停止这些定时任务)
3、oracle数据库中的无效对象,尽量提前处理,因为数据库中的数据字典升级以后,需要重新编译所有无效的对象,如果库中存在大量无效对象,会影响整个补丁安装过程
4、提前快照一份无效对象清单,版本升级前后进行比对,确保整个版本升级过程,没有产生新的无效对象
5、数据库组件和其它信息检查,用于安装前后对比
6、可选项,回收站清空、数据字典统计信息、spfile文件中隐含参数和event事件升级前移除(升级完毕后根据实际清空添加与否),升级前检查脚本会提示,根据实际环境和情况,可以考虑提前完成这一部分工作
7、临时关闭数据库中的job
8、关闭监听程序
9、关闭数据库(最好immediate干净方式)
10、可选项,如果是非常重要的核心数据库,建议重新打开数据库,开启数据库闪回功能(注意调整闪回大小的参数设置,建议100G以上),建立闪回还原点,然后再次immediate方式关闭数据库。该步骤主要是预防,如果数据库字典升级出现异常,可以快速闪回至还原点,快速将数据库还原至升级前的状态。
11、安装11.2.0.4数据库软件(不要建库),ORACLE_HOME目录不要和源目录冲突
12、将原有环境一些配置文件,复制至11.2.0.4数据库软件目录(例如原dbs目录中spfile和密码文件等复制到新安装的ORACLE_HOME目录下,tnsnames.ora、listener.ora监听文件也一样复制到新安装的ORACLE_HOME目录下)
(2)正式升级
1、环境变量设置
2、使用11.2.0.4版本的软件,以升级方式打开原数据库
3、对数据库进行升级前的校验,根据输出提示进行矫正,只有在没有错误出现的情况下,才可以进行下一步工作!
4、对数据库数据字典等进行版本升级
5、数据库启动到可读写状态
6、 编译失效对象
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
7、检查,例如数据库组件和其它信,安装前后对比
8、变更compatible参数
9、启动监听程序(确认升级无误后)
10、重启数据库(开启定时任务和job作业、关闭闪回功能,将本次升级前铺垫的工作都恢复原样)
11、设置新的环境变量文件(将新版本的ORACLE_HOME环境变量等,设置为默认的)
二、详细步骤
(1)升级前准备
1、可选项,全量备份数据库(条件容许的情况,尽量完成一次全量备份,包含数据库全量、归档日志、控制文件、参数文件)
2、考虑主机上是否有定时任务(例如备份任务这些,建议期间停止这些定时任务)
检查root用户和oracle用户下有没有数据库相关的定时任务,安装psu之前提前注释掉
su - root
crontab -l
su - oracle
crontab -l
3、oracle数据库中的无效对象,尽量提前处理,因为数据库中的数据字典升级以后,需要重新编译所有无效的对象,如果库中存在大量无效对象,会影响整个版本升级的过程
su - oracle
sqlplus "/as sysdba"
set linesize 200 pagesize 999
select owner,object_name,object_id,data_object_id,object_type,status
from dba_objects where status<> 'VALID';
4、提前快照一份无效对象清单,版本升级前后进行比对,确保整个版本升级过程,没有产生新的无效对象
su - oracle
sqlplus "/as sysdba"
create table sys.t_invilid_objects
as
select owner,object_name,object_id,data_object_id,object_type,status
from dba_objects where status<> 'VALID';
5、数据库组件和其它信息检查,用于安装前后对比
检查组件版本,检查spfile文件位置,检查数据文件、日志文件、控制文件信息,检查归档,如下
su - oracle
sqlplus "/as sysdba"
spool /home/oracle/ago_update.log
set linesize 200 pagesize 999
col comp_name for a40
col version for a15
col file_name for a70
col value format a70
col name format a15
select name ,value from v$parameter where name in ('spfile','compatible');
select comp_name,version,status from dba_registry;
select instance_name,version from v$instance;
col member format a70
col name format a70
select name from v$controlfile;
select member from v$logfile;
select file_name, tablespace_name from dba_data_files;
archive log list;
spool off
备注:检查的结果保持至/home/oracle/ago_update.log文件中
6、可选项,回收站清空、数据字典统计信息、spfile文件中隐含参数和event事件升级前移除(升级完毕后根据实际清空添加与否),升级前检查脚本会提示,根据实际环境和情况,可以考虑提前完成这一部分工作
7、临时关闭数据库中的job
alter system set job_queue_processes =0;
备注:该参数修改为0,表示oracle后台关闭job任务执行进程,因此所有job都会暂停执行
8、关闭监听程序
su - oracle
lsnrctl stop
9、关闭数据库(最好immediate干净方式)
关闭数据库的方式,可以参考我的文章《Oracle单库环境下计划内启停数据库的步骤》
10、可选项,对于核心关键的数据库,建议开启数据库闪回功能,后续单独编写Oracle数据库闪回管理知识文章
11、安装11.2.0.4数据库软件(不要建库),ORACLE_HOME目录不要和源目录冲突
解压后直接静默安装,规划ORACLE_HOME目录/u01/app/oracle/product/11.2.0.4/db_1
su - oracle
上传和解压安装包,本文中解压在/u01/soft/11.2.0.4/database目录下(如果已经有这个目录,可以mv将原目录重命名即可)
1)新建应答文件
cat > /home/oracle/db_install_11204.rsp <<EOF
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=host01
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.EEOptionsSelection=false
#oracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.4.0,oracle.oraolap:11.2.0.4.0,oracle.rdbms.dm:11.2.0.4.0,oracle.rdbms.dv:11.2.0.4.0,oracle.rdbms.lbac:11.2.0.4.0,oracle.rdbms.rat:11.2.0.4.0
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=
oracle.install.db.racOneServiceName=
oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=oracle
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
PROXY_REALM=
COLLECTOR_SUPPORTHUB_URL=
oracle.installer.autoupdates.option=
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=
EOF
验证
cat /home/oracle/db_install_11204.rsp
2)执行静默安装(注意下面命令为一行,没有换行)
/u01/soft/11.2.0.4/database/runInstaller -silent -ignoreSysPrereqs -force -ignorePrereq -responseFile /home/oracle/db_install_11204.rsp
验证安装版本为11.2.0.4
sqlplus -v
SQL*Plus: Release 11.2.0.4.0 Production
12、将原有环境一些配置文件,复制至11.2.0.4数据库软件目录(例如原dbs目录中spfile和密码文件等复制到新安装的ORACLE_HOME目录下,tnsnames.ora、listener.ora监听文件也一样复制到新安装的ORACLE_HOME目录下)
su - oracle
cd $ORACLE_HOME/dbs
cp spfileorcl.ora orapworcl /u01/app/oracle/product/11.2.0.4/db_1/dbs
cd $ORACLE_HOME/network/admin
cp tnsnames.ora sqlnet.ora listener.ora /u01/app/oracle/product/11.2.0.4/db_1/network/admin
检查:
ll /u01/app/oracle/product/11.2.0.4/db_1/dbs
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r----- 1 oracle oinstall 1536 Mar 13 00:06 orapworcl
-rw-r----- 1 oracle oinstall 2560 Mar 13 00:06 spfileorcl.ora
ll /u01/app/oracle/product/11.2.0.4/db_1/network/admin
-rw-r--r-- 1 oracle oinstall 367 Mar 13 00:06 listener.ora
drwxr-xr-x 2 oracle oinstall 64 Mar 13 00:01 samples
-rw-r--r-- 1 oracle oinstall 381 Dec 17 2012 shrept.lst
-rw-r--r-- 1 oracle oinstall 219 Mar 13 00:06 sqlnet.ora
-rw-r----- 1 oracle oinstall 321 Mar 13 00:06 tnsnames.ora
(2)正式升级
1、环境变量设置
创建新的环境变量文件
vi /home/oracle/.bash_profile_11204
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
export EDITOR=vim
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
stty erase ^H
备注:最重要的就是修改ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1,其余基本保持不变
如果需要使用11.2.0.4的环境变量,方式如下
su - oracle
source /home/oracle/.bash_profile_11204
如果需要使用11.2.0.1的环境变量,方式如下
su - oracle
source /home/oracle/.bash_profile
这样就可以实现两个版本之间环境的灵活切换
2、使用11.2.0.4版本的软件,以升级方式打开原数据库(需要使用11.2.0.4版本的环境变量)
su - oracle
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba" //注意数据库版本为11.2.0.4才对
startup upgrade
3、对数据库进行升级前的校验,根据输出提示进行矫正,只有在没有错误出现的情况下,才可以进行下一步工作!
执行utlu112i.sql脚本,对ERROR和WARNING进行修复。这里我们对WARNING进行忽略,继续进行升级。
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba" //注意数据库版本为11.2.0.4才对
spool /home/oracle/upgrade.log
@$ORACLE_HOME/rdbms/admin/utlu112i.sql
输出类似如下
Recommendations
**********************************************************************
Oracle recommends gathering dictionary statistics prior to
upgrading the database.
To gather dictionary statistics execute the following command
while connected as SYSDBA:
EXECUTE dbms_stats.gather_dictionary_stats;
......
备注:
警告忽略,还有一些建议,例如建议收集数据字典统计信息,建议升级前将隐含参数和event时间从spfile参数文件移除,建议将回收站里面的东西清空。
4、对数据库数据字典等进行版本升级
执行catupgrd.sql脚本(升级较长时间,可以在关注alert日志文件中是否有异常)
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba" //注意数据库版本为11.2.0.4才对
@$ORACLE_HOME/rdbms/admin/catupgrd.sql
最后输出:
Oracle Database 11.2 Post-Upgrade Status Tool 03-13-2026 00:33:22
.
Component Current Version Elapsed Time
Name Status Number HH:MM:SS
Oracle Server
. VALID 11.2.0.4.0 00:02:13
JServer JAVA Virtual Machine
. VALID 11.2.0.4.0 00:00:49
Oracle Workspace Manager
. VALID 11.2.0.4.0 00:00:07
OLAP Analytic Workspace
. VALID 11.2.0.4.0 00:00:08
OLAP Catalog
. VALID 11.2.0.4.0 00:00:11
Oracle OLAP API
. VALID 11.2.0.4.0 00:00:04
Oracle Enterprise Manager
. VALID 11.2.0.4.0 00:00:30
Oracle XDK
. VALID 11.2.0.4.0 00:00:06
Oracle Text
. VALID 11.2.0.4.0 00:00:05
Oracle XML Database
. VALID 11.2.0.4.0 00:00:31
Oracle Database Java Packages
. VALID 11.2.0.4.0 00:00:04
Oracle Multimedia
. VALID 11.2.0.4.0 00:00:31
Spatial
. VALID 11.2.0.4.0 00:00:29
Oracle Expression Filter
. VALID 11.2.0.4.0 00:00:01
Oracle Rules Manager
. VALID 11.2.0.4.0 00:00:01
Oracle Application Express
. VALID 3.2.1.00.10
Final Actions
. 00:00:00
Total Upgrade Time: 00:05:57
PL/SQL procedure successfully completed.
SQL>
SQL> SET SERVEROUTPUT OFF
SQL> SET VERIFY ON
SQL> commit;
Commit complete.
SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> DOC
DOC>#######################################################################
DOC>#######################################################################
DOC>
DOC> The above sql script is the final step of the upgrade. Please
DOC> review any errors in the spool log file. If there are any errors in
DOC> the spool file, consult the Oracle Database Upgrade Guide for
DOC> troubleshooting recommendations.
......
SQL> REM to connect to the upgraded db.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
5、数据库启动到可读写状态
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba"
startup;
备注:升级无问题,使用11.2.0.4版本启动
6、 编译失效对象
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba"
@$ORACLE_HOME/rdbms/admin/utlrp.sql
7、检查,例如数据库组件和其它信息,安装前后对比
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba"
spool /home/oracle/after_update.log
set linesize 200 pagesize 999
col comp_name for a40
col version for a15
col file_name for a70
col value format a70
col name format a15
select name ,value from v$parameter where name in ('spfile','compatible');
select comp_name,version,status from dba_registry;
select instance_name,version from v$instance;
col member format a70
col name format a70
select name from v$controlfile;
select member from v$logfile;
select file_name, tablespace_name from dba_data_files;
archive log list;
spool off
备注:检查的结果保持至/home/oracle/after_update.log文件中
查看组件信息:
@$ORACLE_HOME/rdbms/admin/utlu112s.sql
8、变更compatible参数
确认升级无误后,进行变更
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba"
alter system set compatible='11.2.0.4.0' scope=spfile;
9、启动监听程序(确认升级无误后)
su - oracle
source /home/oracle/.bash_profile_11204
lsnrctl start
10、重启数据库,将本次升级前铺垫的工作都恢复原样
su - oracle
source /home/oracle/.bash_profile_11204
sqlplus "/as sysdba"
startup;
例如:
关闭数据库闪回功能
ALTER DATABASE FLASHBACK OFF;
移除的隐含参数和event事件参数,根据实际情况,评估是否要加回spfile参数文件中
数据库中的job任务:
alter system set job_queue_processes =1000;
开启root用户和oracle用户下数据库相关的定时任务:
su - root
crontab -l
su - oracle
crontab -l
11、设置新的环境变量文件
将11.2.0.4版本的环境变量,设置为默认的,方法如下:
cp .bash_profile_11204 .bash_profile
source .bash_profile
验证
env|grep ORACLE