Oracle数据库升级:从10.2.0.1到11.2.0.4

1方案介绍

目前Oracle数据库软件升级到11gR2方法主要有2种,一种是直接升级的方式,即在现有生产环境中将数据库版本从10gr2升到11gr2,一种是采用异机迁移升级的方式实施,根据目前资源情况,我们计划采用第一种方式进行数据库升级。

本次升级大体上分三次步骤升级

  1. 版本10.2.0.1升级到10.2.0.5。
  2. 版本10.2.0.5 升级到11.2.0.4。
  3. 补丁11.2.0.4.。

2操作时间评估

步骤 所需时间(分钟) 负责方 备注
环境检查 提前
软件介质备份 20分钟 IT公司
数据库备份 120分钟 依据数据库大小为准
软件升级到10.2.0.5 50分钟 IT公司
数据库升级10.2.0.5 40分钟 IT公司
安装11.2.0.4介质 20分钟 IT公司
数据库升级11.2.0.4 20分钟 IT公司
Timezone问题处理 20分钟 IT公司
数据库升级11.2.0.4 20分钟 IT公司
补丁最新psu 30分钟 IT公司
预计6小时

3风险点

应用驱动跨版本升级存在一定的风险,如下几点需要特别注意

?timezone issue

timezone在10gR2版本中是version 4,但是在11g中是version 14,一定要确保升级到version 14,要不会出现很多奇怪的问题,尤其在时间敏感的系统中,比如订购系统中,这个一定要保证正确。
解决方法:在1.10数据库检查中进行实施

?external table

如果10G中有外部表则升级11G时要注意,可能因为外部表的问题(如directory的变更)会导致ORACLE数据库内部job报错,无法正常进行。
解决方法:应用涉及外部表的,需要重构定义。

?wmsys.wm_concat

该函数的作用是将多行合并为一行。在10G中该方法返回值可直接转为String后使用,但是在11G中却是Clob类型,我们必须将clob转为String 或其他类型后才可以使用。
解决方法:应用需要排查,如有使用该函数,那么需要对数据类型进行调整。

4操作步骤

1.1冷备方法

关于数据量小的数据库如果可以允许停机,则可以待停监听、停库后,执行安装数据库软件的目录的打包压缩备份和数据库的RMAN全备

1、停止监听

lsnrctl stop

2、批量杀掉已连接进来的会话

ps -ef|grep ${ORACLE_SID}|grep LOCAL=NO|grep -v grep|awk ‘{print $2}’|xargs kill -9

3、关库

shutdown immediate

4、打包压缩数据库软件安装目录

tar -zcvf u01.tar.gz /u01

5、执行RMAN全库备份

su - oracle <<
rman target / msglog=/backup/rman/rman`date +"%Y%m%d_%H%M"`.log << EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database include current controlfile format '/backup/rman/full_%d_%U_%s.bak';
release channel c1;
release channel c2;
sql 'alter system archive log thread 2 current';
sql 'alter system archive log thread 1 current';

# backup all archive logs
allocate channel c1 type disk;
crosscheck archivelog all;
backup archivelog all format='/backup/rman/arc_%d_%s_%p.arc' delete all input;
delete noprompt obsolete;
release channel c1;
}
exit
EOF

1.2热备方案

?开启归档

alter system set log_archive_dest_2=‘location=/oracle/oracle10g/log2/archive_log’;
shutdown immediate
startup mount;
alter database archivelog;
alter database open;

?备份TNS和监听文件等文件

做安装前必须对原有oracle 10g数据以及环境作备份,备份的内容有/etc/oratab、用户环境变量、soft、数据库文件、TNS和监听文件等。

?备份关键文件以及目录:

mkdir –p $ORACLE_BASE/upgrade
cd $ORACLE_BASE
tar cvf $ORACLE_BASE/upgrade/oraInventory.tar oraInventory
tar cff $ORACLE_BASE/upgrade/oraclehome.tar $ORACLE_HOME/
cp /etc/oratab $ORACLE_BASE/upgrade/oratab
cp /oracle/.bash_profile $ORACLE_BASE/upgrade /profile

开归档

Rman备份
cat rman.sh
su - oracle << chy
rman target / msglog=/backup/rman/rman`date +"%Y%m%d_%H%M"`.log << EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database include current controlfile format '/backup/rman/full_%d_%U_%s.bak';
release channel c1;
release channel c2;
sql 'alter system archive log thread 2 current';
sql 'alter system archive log thread 1 current';

# backup all archive logs
allocate channel c1 type disk;
crosscheck archivelog all;
backup archivelog all format='/backup/rman/arc_%d_%s_%p.arc' delete all input;
delete noprompt obsolete;
release channel c1;
}
exit
EOF

3.1.1.3停应用

1.4停监听

lsnrctl stop

1.5停数据库

登录每个实例依次停止数据库,备份spfile,修改java_pool_size,shared_pool_size,
sqlplus / as sysdba
create pfile=’upgrad_tsm.ora’ from spfile
alter system set java_pool_size=200m scope=spfile
shutdown immediate
exit

1.6操作系统版本升级

建议升级到redhat 5

1.7操作系统补丁安装

该版本有以下补丁需要安装:
expat-1.95.7
numactl-0.6.4.x86_64
pdksh-5.2.14

1.8升级单机数据库系统10.2.0.5

升级具体步骤如下:
在这里插入图片描述

安装10.2.0.5介质。
在这里插入图片描述

注:覆盖原来目录。

两个都不选择。
在这里插入图片描述

继续安装。
在这里插入图片描述

继续安装
在这里插入图片描述

运行root.sh,安装成功。
在这里插入图片描述

使用dbua升级数据库。
在这里插入图片描述在这里插入图片描述

选择要升级的数据库(5个数据库都要操作)。

在这里插入图片描述
选择该项,编译失败对象。

登录数据库正常,数据库升级成功。

1.9升级单机数据库系统11.2.0.4

在这里插入图片描述

两个都不选择。
在这里插入图片描述

继续。
在这里插入图片描述

Skip software update。
在这里插入图片描述

升级数据库。
在这里插入图片描述

新的数据库目录。
在这里插入图片描述在这里插入图片描述

执行root.sh。

在这里插入图片描述在这里插入图片描述

自动调用netca,dbua新的环境 监听配置。
在这里插入图片描述

数据库(完成后要重新运行dbua升级剩余数据库)升级。
在这里插入图片描述

要引起注意.。
在这里插入图片描述

数据库文件位置不变。
在这里插入图片描述

不需要企业管理器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成。
在这里插入图片描述

修改环境变量。

1.10数据库检查

升级timezone版本
alter session set "_with_subquery"=materialize;
exec DBMS_DST.BEGIN_PREPARE(14);
接着检查准备状态:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
PROPERTY_NAME ?????????????????VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION ????????4
DST_SECONDARY_TT_VERSION ??????14
DST_UPGRADE_STATE ?????????????PREPARE
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
set serveroutput on
BEGIN
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables => 'sys.dst$affected_tables',
log_errors => TRUE,
log_errors_table => 'sys.dst$error_table');
END;
/

下面的语句都不能有返回结果:
SELECT * FROM sys.dst$affected_tables;
SELECT * FROM sys.dst$error_table;
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');

conn / as sysdba
shutdown immediate;
startup upgrade;
set serveroutput on
purge dba_recyclebin;
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
alter session set "_with_subquery"=materialize;
EXEC DBMS_DST.BEGIN_UPGRADE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;

shutdown immediate
startup
升级相关的tablealter session set "_with_subquery"=materialize;
set serveroutput on
VAR numfail number
BEGIN
DBMS_DST.UPGRADE_DATABASE(:numfail,
parallel => TRUE,
log_errors => TRUE,
log_errors_table => 'SYS.DST$ERROR_TABLE',
log_triggers_table => 'SYS.DST$TRIGGER_TABLE',
error_on_overlap_time => FALSE,
error_on_nonexisting_time => FALSE);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
END;
/如果没有错误,则结束升级:
VAR fail number
BEGIN
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
END;
/
最后一次检查:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
典型输出是:
PROPERTY_NAME ?????????????????VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION ????????14
DST_SECONDARY_TT_VERSION ??????0
DST_UPGRADE_STATE ?????????????NONE
SELECT * FROM v$timezone_file;
FILENAME ???????????????VERSION
-------------------- ----------
timezlrg_14.dat ?????????????14

1.11打上最新补丁PSC28204707

在这里插入图片描述

查看当前环境信息。
在这里插入图片描述

根据需求 需要现在最新opatch。
在这里插入图片描述

停止数据库监听.关闭数据库。
在这里插入图片描述

解压opatch。
在这里插入图片描述

补丁安装。
在这里插入图片描述

安装成功。
在这里插入图片描述

升级5个数据库的数据字典。

经过检查没错误。

1.12重启动数据库

export ORACLE_SID=tsm
sqlplus / as sysdba
shutdown immediate
startup
exit

1.13启动监听

lsnrctl start

1.14检查相关的配置文件是否正常

检查环境变量是否正确,数据库实例是否正常。

1.15启应用

1.16应用检查

1.17失败回滚

当升级过程失败,都需要进行回退,回退就使用备份直接回退。

tar xvf $ORACLE_BASE/upgrade /oraInventory.ta
tar xvf $ORACLE_BASE/upgrade /oraclehome.tar 
cp $ORACLE_BASE/upgrade/oratab /etc/oratab
cp $ORACLE_BASE/upgrade /profile  /oracle/.bash_profile

还原数据库。
启动数据库。

附录一:迁移的方式升级

针对容量小的数据库升级,可采用数据泵导出,并在安装完毕11.2.0.4版本导入的方式
1、安装新版本11.2.0.4数据库,详见安装文档。
2、数据泵全库导入导出
具体操作,详见迁移步骤表格
安装文档如下:

导出导入和收集统计信息的方式如下:

expdp \"/ as sysdba \"  DIRECTORY=EXPDP_DUMP  LOGFILE=expdp_20190412.log DUMPFILE=expdp_(数据库名)_%u.dmp  full=y parallel=4

impdp \"/ as sysdba \"  DIRECTORY=EXPDP_DUMP  LOGFILE=impdp_20190412.log DUMPFILE=expdp_(数据库名)_%u.dmp  full=y parallel=4

exec DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'BACKUP',ESTIMATE_PERCENT=>10,method_opt=>'for all columns size 1',cascade=>true,force=>true,degree=>12);			    

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值