Oracle 11.2.0.1版本升级至11.2.0.4_单机环境

升级方式:原地升级,服务器和操作系统保持不变

升级原理:
服务器上新安装一套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
相关推荐
l1t2 小时前
用docker安装测试crate数据库
数据库·docker·容器·cratedb
anzhxu2 小时前
QT数据库(三):QSqlQuery使用
数据库·qt·oracle
身如柳絮随风扬2 小时前
MySQL核心知识
数据库·mysql
德彪稳坐倒骑驴2 小时前
Oracle 11g安装
数据库·oracle
韩立学长2 小时前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
阿贵---2 小时前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
想七想八不如114082 小时前
数据库--样题复习
数据库·sql·oracle
551只玄猫2 小时前
【数据库原理 实验报告1】创建和管理数据库
数据库·sql·学习·mysql·课程设计·实验报告·数据库原理
q5431470872 小时前
MySQL SQL100道基础练习题
数据库·mysql