少年乘勇气,百战过乌孙。这篇文章主要讲述oracle拨云见日第8篇之Oracle11.2.0.1.0升级11.2.0.4.3相关的知识,希望能为你提供帮助。
引言在上一篇文章中,我们讲解的是:Oracle10.2.0.1升级10.2.0.5.19。本篇文章,我带来的是Oracle11g这个版本的升级实战。
为什么要升级1、新特性
oracle很少升级,除非你要用什么新的功能。因为升级要停库,好多和库相关的组件可能全要升级。也会影响公司的业务,所以升级前一定要开会研究很长时间。
2、提升安全
联通一些大公司定期委托第三方公司做《系统安全防护评测》,扫描出一些漏洞时,会要求升级并打补丁(我怎么知道?因为我在联通当过DBA啊!!)
环境描述1、操作系统
rhel-server-6.4-x86_64
2、现在已有Oracle版本
Oracle 11.2.0.1.0
3、升级之后Oracle版本
Oracle
11.2.0.4.3
升级大体步骤(1)、备份数据库
(2)、运行patchset,升级oracle 软件
(3)、准备新的ORACLE_HOME
(4)、运行dbua 或者脚本升级实例
(5)、检查升级后的版本信息和无效对象
备份数据库升级数据库是一个十分危险的事情,在生产库上,升级之前最好做一个全库的数据做备份,以便在升级失败时可以还原数据库。停掉所有与这个数据库相关的业务系统,如中间件。确定没有业务在运行。在数据库正常关闭后,还需要备份Oracle根目录,目的还是为了升级失败时,能够还原出数据库软件到升级前的版本。
1、备份数据库软件
[oracle@DB88 ~]$ tar -zcvPf `date +%F`_oracle.tar.gz
$ORACLE_BASE
2、热备份数据
在上一篇文章中,Oracle10.2.0.1升级10.2.0.5.19中,我们使用的是全库冷备份,此处我演示一下热备份。升级过后验证一下,我们在升级之前做的数据,有没有丢失?如果有丢失,使用热备份进行恢复即可。
2.1、创建表空间、用户、授权[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
create tablespace dafeige datafile /home/oracle/app/oracle/oradata/ecom/dafeige.dbf size 5M AUTOEXTEND OFF;
SQL>
create user dafeige identified by dafeige default tablespace dafeige;
SQL>
alter user dafeige account unlock;
SQL>
grant connect,resource to dafeige;
SQL>
grant select on scott.emp to dafeige;
2.2、登录用户初始化数据SQL>
conn dafeige/dafeige
SQL>
create table bigdata as select* from scott.emp;
SQL>
insert into bigdata select * from bigdata;
SQL>
commit;
2.3、创建数据目录并授权[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
!mkdir -p /home/oracle/expdp
SQL>
create directory expdp as /home/oracle/expdp;
SQL>
grant read,write on directory expdp to dafeige;
2.4、使用expdp导出用户所有数据[oracle@DB88 ~]$ expdp dafeige/dafeige directory=expdp dumpfile=dafeige_all_`date +%F`.dmp SCHEMAS=dafeige logfile=dafeige_all_`date +%F`.log
2.5、使用impdp恢复数据全部升级完事后,如果验证数据丢失了,可以操作此步,来恢复数据
[oracle@DB88 ~]$ impdp dafeige/dafeige directory=expdp dumpfile=dafeige_all_2022-06-01.dmp logfile=dafeige_all_.log
升级前数据库信息1、查看版本信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
select * from v$version where rownum<
2;
2、查看组件信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
set pages 2000 lines 500
SQL>
col COMP_NAME format a50
SQL>
col version format a10
SQL>
col STATUS format a10
SQL>
col MODIFIED format a50
SQL>
SELECT COMP_NAME, VERSION, STATUS,MODIFIED FROM SYS.DBA_REGISTRY;
关闭所有Oracle服务里程
1、关闭OEM
[oracle@DB88 ~]$ emctl stop dbconsole
2、关闭监听
[oracle@DB88 ~]$ lsnrctl stop
3、关闭实例
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
shutdown immediate;
4、退出sqlplus
5、查看进程确认
oracle11.2.0.1.0升级11.2.0.4.0
1、上传升级包
2、解压升级包
[oracle@DB88 ~]$ cd /tmp
[oracle@DB88 tmp]$ unzip p13390677_112040_Linux-x86-64_1of7.zip -d /tmp &
&
unzip p13390677_112040_Linux-x86-64_2of7.zip -d /tmp
3、oracle用户图形化安装
不接收官方的安全更新(大部分兄弟没有oracle帐号)
注意这里:我们选择第三个选项,skip software update,因为我们的patchset已经下载过了,如果选择第二个选项,会遇到如下错误,
INS-20704 Thelocation provided is not in the expected directory structure
注意这里:11gR2的Patchset 可以直接用来安装。在这个界面就可以选择操作类型,这个功能比较方便,从而也导致patchset 越来越大,我们这里选择upgrade an existing database。
选择语言
选择
企业版
注意这里:安装位置,我之前的安装目录是11.2.0,我新目录是11.2.0.4 ,即将oracle 安装到其他位置,这样可以减少宕机时间,也是oracle 推荐的方法。(但是新目录至少空闲4G的空间)
操作用户组
此处检查的依赖条件,没有影响,直接就忽略了
汇总信息
执行到76%的时候弹出如下窗口
换成root用户来执行脚本
换回oracle用户图形界面操作
接下来就是配置监听的过程
给监听起个名字
TCP协议
监听端口默认1521
不配置另一个监听
随后会自动调用DBUA工具,来升级数据库的实例
选择要升级的数据库实例,如果这步没有出现内容,/etc/oratab没有内容
升级后编辑失效的对象
升级数据库但不移动数据文件
不指定闪回区,后期可以单独配置
不配置OEM,后期可以单独配置
升级汇总信息
开始升级
升级结果
修改环境变量
1、编辑.bash_profile
[oracle@DB88 ~]$ vi /home/oracle/.bash_profile
修改ORACLE_HOME为新路径
2、重新加载环境变量
[oracle@DB88 ~]$ source /home/oracle/.bash_profile
3、查看环境变量
[oracle@DB88 ~]$ echo $ORACLE_HOME
查看/etc/oratab
这个文件是在创建数据库实例时建立的,它记录主机中有多少个数据库。如果需要自动启动数据库,则将AUTO设为Y,在调用dbstart命令才生效。
[oracle@DB88 ~]$ cat /etc/oratab
升级后验证
1、查看版本信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
select * from v$version where rownum<
2;
2、查看数据库补丁
[oracle@DB88 ~]$ $ORACLE_HOME/OPatch/opatch lsinventory
3、确认数据库升级信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
set pages 2000 lines 500
SQL>
col action format a17
SQL>
col namespace format a10
SQL>
col version format a10
SQL>
col comments format a30
SQL>
col action_time format a30
SQL>
col bundle_series format a15
SQL>
select * from DBA_REGISTRY_HISTORY;
4、确认数据库各组件信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
set pages 2000 lines 500
SQL>
col COMP_NAME format a50
SQL>
col version format a10
SQL>
col STATUS format a10
SQL>
col MODIFIED format a50
SQL>
SELECT COMP_NAME, VERSION, STATUS,MODIFIED FROM SYS.DBA_REGISTRY;
5、修改兼容性参数
SQL>
show parameter compatible
SQL>
alter system set compatible=11.2.0.4.0 scope=spfile;
SQL>
shutdown immediate;
SQL>
startup;
SQL>
show parameter compatible
关闭所有Oracle服务里程
1、关闭OEM
[oracle@DB88 ~]$ emctl stop dbconsole
2、关闭监听
[oracle@DB88 ~]$ lsnrctl stop
3、关闭实例
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
shutdown immediate;
4、退出sqlplus
5、查看进程确认
oracle11.2.0.4.0升级11.2.0.4.3
1、解压升级包
[oracle@DB88 ~]$ cd /tmp/
[oracle@DB88 tmp]$ unzip p18522509_112040_Linux-x86-64.zip
2、使用OPatch工具升级
[oracle@DB88 ]$ cd /tmp/18522509
[oracle@DB88 18522509]$ $ORACLE_HOME/OPatch/opatch apply
从报错指示中可以看出,当前OPatch工具的版本是11.2.0.3.4。现有的这个工具版本过低,要对它进行升级。
3、升级OPatch工具
备份现有的OPatch目录
[oracle@DB88 ~]$ mv $ORACLE_HOME/OPatch/ $ORACLE_HOME/OPatch.bak
解压高版本OPatch工具到ORACLE_HOME
[oracle@db8 ~]$ unzip /tmp/p6880880_102000_Linux-x86-64.zip -d $ORACLE_HOME/
检查OPatch工具版本
[oracle@db8 ~]$ $ORACLE_HOME/OPatch/opatch version
4、使用OPatch工具升级
[oracle@DB88 ]$ cd /tmp/18522509
[oracle@DB88 18522509]$ $ORACLE_HOME/OPatch/opatch apply
Do you want to proceed? [y|n]
输入y
提示输入邮件,直接回车,跳过即可
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: 输入Y
Is the local system ready for patching? [y|n] 输入y
随后就是刷屏的过程,只截取最后成功部分
5、升级数据库字典
[oracle@DB88 ~]$ cd $ORACLE_HOME/rdbms/admin
[oracle@DB88 admin]$ sqlplus / as sysdba
SQL>
startup
SQL>
@catbundle.sql psu apply
升级后验证
1、查看数据库补丁
[oracle@DB88 ~]$ $ORACLE_HOME/OPatch/opatch lsinventory
[oracle@DB88 ~]$ $ORACLE_HOME/OPatch/opatch lsinv -bugs_fixed|grep Bug
2、确认数据库升级信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
set pages 2000 lines 500
SQL>
col action format a17
SQL>
col namespace format a10
SQL>
col version format a10
SQL>
col comments format a30
SQL>
col action_time format a30
SQL>
col bundle_series format a15
SQL>
select * from DBA_REGISTRY_HISTORY;
3、确认数据库各组件信息
[oracle@DB88 ~]$ sqlplus / as sysdba
SQL>
set pages 2000 lines 500
SQL>
col COMP_NAME format a50
SQL>
col version format a10
SQL>
col STATUS format a10
SQL>
col MODIFIED format a50
SQL>
SELECT COMP_NAME, VERSION, STATUS,MODIFIED FROM SYS.DBA_REGISTRY;
4、验证数据是否丢失
[oracle@DB88 ~]$ sqlplus dafeige/dafeige
SQL>
select count(*) from bigdata;
升级之前,我们创建的bigdata表和数据,一切正常。
结束语到此本篇文章就结束了,送给那些:
1、准备学习Oracle的朋友们
2、已经学习了Oracle,但是没有在Linux环境下安装成功oracle的朋友们
3、对Oracle感兴趣、对Linux感兴趣的朋友们
4、Oracle刚入门的朋友们
【oracle拨云见日第8篇之Oracle11.2.0.1.0升级11.2.0.4.3】
有一段时间没有写关于Oracle的博文了,感谢一直关注我的新老朋友,有你们的支持我会一起写下去!
推荐阅读
- 数据结构与算法插入排序分析
- 2022 Adobe Certified Professional 世界大赛中国赛区总决赛完美收官
- 路由基础之思科实验ACL Telnet VLAN划分端口聚合的配置
- 如何快速开发一个古诗词小程序
- 磁盘管理命令
- 汇编语言入门-段指针
- #导入Word文档图片#FreeIPA笔记
- Redis 高可用集群原理和实践
- 服务器raid数据恢复光纤存储硬盘故障导致raid崩溃,卷无法挂载的数据恢复案例