测试一下准备将以前安装的所有32位的oracle服务器都升级到64位。
1.当前环境:
[root@qht115 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
[oracle@qht115 Disk1]$ uname -a
Linux qht115 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
[oracle@qht115 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 6 12:22:20 2018
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
操作是redhat 5.6 64位的,数据库是10.2.0.4 32位的,目标是只升级数据库到64位,oracle版本号暂不改变。
2. 获取数据库完整的文件,方法可以是冷备份的一致性copy,或者rman完整恢复。
我是通过rman恢复的一个全备份。
[oracle@qht115 orcl]$ pwd
/u01/oradata/orcl
[oracle@qht115 orcl]$ ls
clt_stats01.dbf CSPSPACE_003.dbf redo01.log sysaux01.dbf
control01.ctl l5mspace01.dbf redo02.log system01.dbf
control02.ctl magspace01.dbf redo03.log temp01.dbf
control03.ctl mtrxspace01.dbf redo04.log undotbs01.dbf
CSPSPACE_001.dbf mtrxspace02.dbf redo05.log users01.dbf
CSPSPACE_002.dbf qhtdata01.dbf redo06.log
先备份一下,防止升级出现 问题:
[oracle@qht115 orcl]$ cp /u01/oradata/orcl/* /u01/oradata/orcl_bak
将32位的oracle软件改名,接着安装64位的oracle:
[oracle@qht115 u01]$ mv /u01/app /u01/app_32bit
[oracle@qht115 u01]$ echo $ORACLE_HOME
/u01/app/oracle/product/10201
[oracle@qht115 u01]$ mkdir -p /u01/app/oracle/product/10201
3.下载64位的oracle 软件,包括 10.2.0.1的基本包以及10.2.0.4的升级包。
https://pan.baidu.com/disk/home?#/all?vmode=list&path=%2F%E6%B5%B7%E9%87%8FIT%E8%B5%84%E6%96%99%20%2B%20%E5%90%84%E7%A7%8D%E5%B9%B3%E5%8F%B0%E4%B8%8B%E7%9A%84Oracle%E5%AE%89%E8%A3%85%E6%96%87%E4%BB%B6%20%2B%20%E5%85%AC%E5%BC%80%E8%AF%BE%E5%BD%95%E5%83%8F%20%2B%20%E5%90%84%E7%A7%8D%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E8%B5%84%E6%96%99%2FLinux%20Oracle%20%E5%AE%89%E8%A3%85%E5%8C%85%2Foracle%2010.2.0.1%20-%2010.2.0.5%20for%20linux%20x86-64
4.安装及打10.2.0.4的patch,这里过程就忽略了。ORACLE_HOME不改变,继续是/u01/app/oracle/product/10201,安装好后:
[oracle@qht115 u01]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 6 05:15:02 2018
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.
5.准备spfile,先建立spfile中需要的目录
[oracle@qht115 oracle]$ mkdir -p /u01/app/oracle/admin/orcl/adump
[oracle@qht115 oracle]$ mkdir -p /u01/app/oracle/admin/orcl/bdump
[oracle@qht115 oracle]$ mkdir -p /u01/app/oracle/admin/orcl/cdump
[oracle@qht115 oracle]$ mkdir -p /u01/app/oracle/admin/orcl/udump
[oracle@qht115 oracle]$ mkdir -p /u01/app/oracle/admin/orcl/dpdump
[oracle@qht115 oracle]$ mkdir -p /u01/app/oracle/admin/orcl/archive
[oracle@qht115 dbs]$ mkdir -p /u01/app/oracle/admin/orcl/flash_recovery_area
从其它库中找一个pfile复制到新库
SQL> create pfile='$ORACLE_HOME/dbs/initorcl.ora' from spfile;
File created.
[oracle@qht106 dbs]$ scp initorcl.ora 172.17.61.115:/u01/app/oracle/product/10201/dbs
注销掉pfile.ora的#*.use_indirect_data_buffers=TRUE,这个参数是32位能需要用到的,扩展SGA到超过1.7G的。
并新增加参数 _SYSTEM_TRIG_ENABLED = false,关闭DDL审核触发器。
SQL> startup nomount pfile='/u01/app/oracle/product/10201/dbs/initorcl.ora';
ORACLE instance started.
6.建立spfile,通过spfile启动来升级数据库。
SQL> create spfile from pfile;
SQL> shutdown immediate;
SQL> startup upgrade;
7.编译对象
SQL> @?/rdbms/admin/utlirp.sql
@$ORACLE_HOME/rdbms/admin/catupgrd.sql --这个脚本跨版本必须使用,由于我没有跨版本就可以不执行。
@?/rdbms/admin/utlrp.sql --这个脚本用来编译失败的对象,需要执行一下
执行这个脚本的时候出错了,网上查了一下居然 是bug,日志文件如下:
ORA-07445: exception encountered: core dump [_intel_fast_memcpy.A()+10] [SIGSEGV] [Address not mapped to object] [0x2AC8B2A4F34F] [] []
还好暂时不影响使用,最好的办法是升级到10.2.0.5以上的版本。
8.验证升级结果:
SQL> select comp_name,version,status from sys.dba_registry; --检查升级组件,看一是否都是valid的
SQL> select * from utl_recomp_errors; --由于在执行utlrp.sql的时间出现异常,有几个对象编译不成功,所以这里会查出一些错误的对象
OBJ#
----------
ERROR_AT
---------------------------------------------------------------------------
COMPILE_ERR
--------------------------------------------------------------------------------
53499
06-JUL-18 06.19.49.802055 AM
ORA-04045: errors during recompilation/revalidation of PUBLIC.TRAVEL_EXPENSE_AME
ND
ORA-00980: synonym translation is no longer valid
53496
OBJ#
----------
ERROR_AT
---------------------------------------------------------------------------
COMPILE_ERR
--------------------------------------------------------------------------------
06-JUL-18 06.19.49.803397 AM
ORA-04045: errors during recompilation/revalidation of PUBLIC.OFFICE_EXPENSE
ORA-00980: synonym translation is no longer valid
53498
06-JUL-18 06.19.49.804550 AM
ORA-04045: errors during recompilation/revalidation of PUBLIC.TRAVEL_EXPENSE
OBJ#
----------
ERROR_AT
---------------------------------------------------------------------------
COMPILE_ERR
--------------------------------------------------------------------------------
ORA-00980: synonym translation is no longer valid
53497
06-JUL-18 06.19.49.805777 AM
ORA-04045: errors during recompilation/revalidation of PUBLIC.EQUIPMENT
ORA-00980: synonym translation is no longer valid
准备将数据库继续升级到10.2.0.5以后的版本来解决这个问题。
[oracle@qht115 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 6 06:25:52 2018
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select count(*) from l5m.TM_HEADER
2 ;
COUNT(*)
----------
444
最后不要忘记生成密码文件,取消_SYSTEM_TRIG_ENABLED = false后重启一下数据库,因为这时还在upgrade模式中。
此至,数据库及软件都升级到了64bit。