oracle 10.2.0.4升级为oracle 11.2.0.3 跨版本 位数转换

目的:

将oracle10.2.0.4(32bit)升级为11.2.0.3(64bit)

  os版本 oracle版本 bit
rhel5.7 10.2.0.4 32bit
rhel6.3 11.2.0.3 64bit

升级步骤主要分为2步,先升级为64bit的10g,再升级到11g,直接一步无法完成的。

新机器上面安装好和oracle10.2.0.4(64bit),先完成位数的升级,接着再安装11.2.0.3升级oracle大版本。

由于允许有一定的停机时间,旧数据是通过RMAN备份恢复到新机器的。

第一步过程,同版本升级,只转换位数

oracle 10g 10.2.0.4 32位升级到64位

https://blog.csdn.net/jolly10/article/details/80939104

第二步过程 ,10g升到11g

1.安装11.2.0.3

1.1 备份10g的oracle软件,准备新的$ORACLE_HOME

[oracle@qht115 u01]$ mv /u01/app /u01/app_64bit_10g

[oracle@qht115 ~]$ mkdir -p /u01/app/oracle/product/11203

1.2 修改.bash_profile中的$ORACLE_HOME,其它值不变

[oracle@qht115 ~]$ cat .bash_profile

ORACLE_HOME=/u01/app/oracle/product/11203

1.3 安装软件

安装过程:

https://blog.csdn.net/jolly10/article/details/81018415

2.升级之前的准备工作

2.1 升级前的检查,将utlu112i.sql从11g$ORACLE_HOME/rdbms/admin复制到/tmp

[oracle@qht115 ~]$ cp /u01/app/oracle/product/11203/rdbms/admin/utlu112i.sql /tmp

utlu112i.sql需要在10g环境中运行,不过由于测试环境由于升级前的数据库在同一台机器,这里需要先恢复10g的环境,打开10g数据库。

需要恢复10g的app目录:

[oracle@qht115 u01]$ mv /u01/app /u01/app_11g
[oracle@qht115 u01]$ mv app_64bit_10g/ /u01/app

恢复.bash_profile

[oracle@qht115 ~]$ cat .bash_profile

ORACLE_HOME=/u01/app/oracle/product/10201

恢复/etc/sysctl.conf以及 /etc/security/limits.conf

[root@qht115 ~]# cat /etc/sysctl.conf

。。。。

# Controls the maximum shared segment size, in bytes
#for oracle 10g
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
kernel.shmall = 268435456
kernel.shmmax=4000000000
kernel.shmmni=4096
kernel.sem=250 32000 100 128
fs.file-max=65536
net.ipv4.ip_local_port_range=1024 65000

#for oracle 11g  #......
#fs.file-max=6815744
#fs.aio-max-nr = 1048576
#kernel.shmmni = 4096
#kernel.sem = 250 32000 100 128
#net.ipv4.ip_local_port_range = 9000 65500
#net.core.rmem_default = 262144
#net.core.rmem_max = 4194304
#net.core.wmem_default = 262144
#net.core.wmem_max = 1048586
[root@qht115 ~]# sysctl -p
[root@qht115 ~]# cat  /etc/security/limits.conf
。。。

 for oracle 10g
oracle          soft    nofile           65536
oracle          hard    nofile           65536
*                soft    memlock          4194303
*                hard    memlock          4194303

#for oracle 11g  #......
#oracle              soft    nproc   2047
#oracle              hard    nproc   16384
#oracle              soft    nofile  1024
#oracle              hard    nofile  65536
#oracle              soft    stack   10240

# End of file

启动10g数据库,运行utlu112i.sql

SQL> startup
SQL> spool upgrade_info.log
SQL> @/tmp/utlu112i.sql

检查结果:

Oracle Database 11.2 Pre-Upgrade Information Tool 09-03-2018 10:58:14
Script Version: 11.2.0.3.0 Build: 001
.
**********************************************************************
Database:
**********************************************************************
--> name:          ORCL
--> version:       10.2.0.4.0
--> compatible:    10.2.0.3.0
--> blocksize:     8192
--> platform:      Linux x86 64-bit
--> timezone file: V4
.
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
--> SYSTEM tablespace is adequate for the upgrade.
.... minimum required size: 827 MB
--> UNDOTBS1 tablespace is adequate for the upgrade.
.... minimum required size: 400 MB
--> SYSAUX tablespace is adequate for the upgrade.
.... minimum required size: 1628 MB
--> TEMP tablespace is adequate for the upgrade.
.... minimum required size: 60 MB
.
**********************************************************************
Flashback: OFF
**********************************************************************
**********************************************************************
Update Parameters: [Update Oracle Database 11.2 init.ora or spfile]
Note: Pre-upgrade tool was run on a lower version 64-bit database.
**********************************************************************
--> If Target Oracle is 32-Bit, refer here for Update Parameters:
WARNING: --> "db_cache_size" needs to be increased to at least 50331648 bytes
.

--> If Target Oracle is 64-Bit, refer here for Update Parameters:
WARNING: --> "java_pool_size" needs to be increased to at least 128 MB
WARNING: --> "db_cache_size" needs to be increased to at least 50331648 bytes
.
**********************************************************************
Renamed Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
WARNING: --> "db_block_buffers" new name is "db_cache_size" new value is "1610612736"
.
**********************************************************************
Obsolete/Deprecated Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
--> background_dump_dest         11.1       DEPRECATED   replaced by  "diagnostic_dest"
--> user_dump_dest               11.1       DEPRECATED   replaced by  "diagnostic_dest"
.

**********************************************************************
Components: [The following database components will be upgraded or installed]
**********************************************************************
--> Oracle Catalog Views         [upgrade]  VALID
--> Oracle Packages and Types    [upgrade]  VALID
--> JServer JAVA Virtual Machine [upgrade]  VALID
--> Oracle XDK for Java          [upgrade]  VALID
--> Oracle Workspace Manager     [upgrade]  VALID
--> OLAP Analytic Workspace      [upgrade]  VALID
--> OLAP Catalog                 [upgrade]  VALID
--> EM Repository                [upgrade]  VALID
--> Oracle Text                  [upgrade]  VALID
--> Oracle XML Database          [upgrade]  VALID
--> Oracle Java Packages         [upgrade]  VALID
--> Oracle interMedia            [upgrade]  VALID
--> Spatial                      [upgrade]  VALID
--> Data Mining                  [upgrade]  VALID
--> Expression Filter            [upgrade]  VALID
--> Rule Manager                 [upgrade]  VALID
--> Oracle OLAP API              [upgrade]  VALID
.
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> Database is using a timezone file older than version 14.
.... After the release migration, it is recommended that DBMS_DST package
.... be used to upgrade the 10.2.0.4.0 database timezone version
.... to the latest version which comes with the new release.
WARNING: --> Database contains INVALID objects prior to upgrade.
.... The list of invalid SYS/SYSTEM objects was written to
.... registry$sys_inv_objs.
.... The list of non-SYS/SYSTEM objects was written to
.... registry$nonsys_inv_objs.
.... Use utluiobj.sql after the upgrade to identify any new invalid
.... objects due to the upgrade.
.... USER BRD has 2 INVALID objects.
.... USER OPT has 1 INVALID objects.
.... USER PUBLIC has 4 INVALID objects.
.... USER SEND_MAIL has 1 INVALID objects.
.... USER NPM has 4 INVALID objects.
.... USER L5M has 5 INVALID objects.
.... USER CSB has 30 INVALID objects.
.... USER YELLOWFLAG has 1 INVALID objects.
.... USER CSA has 17 INVALID objects.
WARNING: --> EM Database Control Repository exists in the database.
.... Direct downgrade of EM Database Control is not supported. Refer to the
.... Upgrade Guide for instructions to save the EM data prior to upgrade.
WARNING: --> Your recycle bin contains 611 object(s).
.... It is REQUIRED that the recycle bin is empty prior to upgrading
.... your database.  The command:
        PURGE DBA_RECYCLEBIN
.... must be executed immediately prior to executing your upgrade.
.
**********************************************************************
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;

**********************************************************************
Oracle recommends reviewing any defined events prior to upgrading.

To view existing non-default events execute the following commands
while connected AS SYSDBA:
  Events:
    SELECT (translate(value,chr(13)||chr(10),' ')) FROM sys.v$parameter2
      WHERE  UPPER(name) ='EVENT' AND  isdefault='FALSE'

  Trace Events:
    SELECT (translate(value,chr(13)||chr(10),' ')) from sys.v$parameter2
      WHERE UPPER(name) = '_TRACE_EVENTS' AND isdefault='FALSE'

Changes will need to be made in the init.ora or spfile.

**********************************************************************

根据上面的提示在升级需要做如下工作:

1)recyclebin有不少表,最好先清空掉,其它invalid的对象都是用户对象,暂先忽略,也可以执行utlrp.sql重新编译invalid对象

SQL> PURGE DBA_RECYCLEBIN;

DBA Recyclebin purged.

2)收集数据字典统计信息

SQL>   EXECUTE dbms_stats.gather_dictionary_stats;

3)timezone在升级完数据后需要单独升级,先检查一下当前timezone版本:

SQL> SELECT version FROM v$timezone_file;

   VERSION
----------
         4

根据当前timezone的版本,又分三种情况:

   --1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。

   --2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。

  --3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤

4)pfile参数文件需要做的修改:

  java_pool_size需要增大到128M

 db_block_buffers参数已废弃,需改成db_cache_size

 background_dump_dest ,user_dump_dest 需改成diagnostic_dest

3.正式开始升级

1)关闭数据库以及监听

[oracle@qht115 dbs]$ lsnrctl stop

SQL> shutdown immediate;

2)恢复11g的运行环境 

[oracle@qht115 u01]$ mv /u01/app/ /u01/app_64bit_10g
[oracle@qht115 u01]$ mv /u01/app_11g/ /u01/app

以及恢复.bash_profile,恢复/etc/sysctl.conf以及 /etc/security/limits.conf

[oracle@qht115 ~]$ cat .bash_profile

ORACLE_HOME=/u01/app/oracle/product/11203

3) 建立pfile文件

[oracle@qht115 dbs]$ cat initorcl.ora
*.aq_tm_processes=0
#*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
#*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.3.0'
*.control_files='/u01/oradata/orcl/control01.ctl','/u01/oradata/orcl/control02.ctl','/u01/oradata/orcl/control03.ctl'#Restore Controlfile
#*.core_dump_dest='/u01/admin/orcl/cdump'
#*.db_block_buffers=196608
*.db_cache_size=1610612736
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest_size=21474836480
*.db_recovery_file_dest='/u01/app/oracle/admin/orcl/flash_recovery_area'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
#*.java_pool_size=67108864
*.java_pool_size=134217728
*.job_queue_processes=10
*.large_pool_size=218103808
*.open_cursors=300
*.pga_aggregate_target=524288000
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_manager_plan=''
*.sessions=335
*.shared_pool_size=536870912
*.streams_pool_size=67108864
*.undo_management='AUTO'
*.undo_retention=900
*.undo_tablespace='UNDOTBS1'
#*.use_indirect_data_buffers=TRUE
#*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'
*.diagnostic_dest='/u01/app/oracle'

注销掉audit_file_dest,background_dump_dest,core_dump_dest,user_dump_dest,用diagnostic_dest代替,一般diagnostic_dest的值和$ORACLE_BASE一致。

修改java_pool_size为128M,db_block_buffers改为db_cache_size

4)建立flash_recovery_area目录

[oracle@qht115 dbs]$ mkdir -p /u01/app/oracle/admin/orcl/flash_recovery_area

5)用此pfile启动到nomount状态

SQL> startup nomount pfile='/u01/app/oracle/product/11203/dbs/initorcl.ora';
ORACLE instance started.

Total System Global Area 2522189824 bytes
Fixed Size                  2227056 bytes
Variable Size             889193616 bytes
Database Buffers         1610612736 bytes
Redo Buffers               20156416 bytes

6)生成spfile,启动到upgrade模式:

SQL> create spfile from pfile;

File created.


SQL> shutdown immediate;
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup upgrade;

7)运行升级脚本

SQL> set echo on
SQL> SPOOL upgrade.log
SQL> @?/rdbms/admin/catupgrd.sql
SQL> set echo off

这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态:

SQL> startup

SQL> @?/rdbms/admin/utlu112s.sql
.
Oracle Database 11.2 Post-Upgrade Status Tool           09-03-2018 13:11:09
.
Component                               Current      Version     Elapsed Time
Name                                    Status       Number      HH:MM:SS
.
Oracle Server
.                                         VALID      11.2.0.3.0  00:37:45
JServer JAVA Virtual Machine
.                                         VALID      11.2.0.3.0  00:07:33
Oracle Workspace Manager
.                                         VALID      11.2.0.3.0  00:00:37
OLAP Analytic Workspace
.                                         VALID      11.2.0.3.0  00:00:17
OLAP Catalog
.                                         VALID      11.2.0.3.0  00:01:07
Oracle OLAP API
.                                         VALID      11.2.0.3.0  00:00:33
Oracle Enterprise Manager
.                                         VALID      11.2.0.3.0  00:09:39
Oracle XDK
.                                         VALID      11.2.0.3.0  00:01:58
Oracle Text
.                                         VALID      11.2.0.3.0  00:00:53
Oracle XML Database
.                                         VALID      11.2.0.3.0  00:05:13
Oracle Database Java Packages
.                                         VALID      11.2.0.3.0  00:00:14
Oracle Multimedia
.                                         VALID      11.2.0.3.0  00:03:22
Spatial
.                                         VALID      11.2.0.3.0  00:04:33
Oracle Expression Filter
.                                         VALID      11.2.0.3.0  00:00:18
Oracle Rule Manager
.                                         VALID      11.2.0.3.0  00:00:12
Gathering Statistics
.                                                                00:02:34
Total Upgrade Time: 01:17:00

PL/SQL procedure successfully completed.

所有组件都是valid的后,再执行catuppst.sql完成升级的后续操作:

SQL> @?/rdbms/admin/catuppst.sql

接着重新编译一下无效对象:

 @?/rdbms/admin/utlrp.sql

4. 升级后的工作

  1)修改listener.ora,使listener执行新的11g Home,然后重新启动listener:

 2)升级timezone

主要参考:

Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID 977512.1]
1)Timezone升级前的准备工作:
先检查一下当前的timezone版本:
conn / as sysdba
SELECT version FROM v$timezone_file;
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 0

DST_UPGRADE_STATE NONE

然后开始准备工作:

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 logging tables if they exist.

TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;

-- log affected data

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 not in ('1878','1883');

-- end prepare window, the rows above will stay in those tables.

EXEC DBMS_DST.END_PREPARE;

-- check if this is ended

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 0

DST_UPGRADE_STATE NONE


2)真正开始升级Timezone

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;

一个典型的输出是:

PROPERTY_NAME VALUE

------------------------------ ------------------------------

DST_PRIMARY_TT_VERSION 14

DST_SECONDARY_TT_VERSION 4

DST_UPGRADE_STATE UPGRADE

下面这条语句应该没有返回结果,(我运行的是有结果的,15条记录的状态都是upgrade_in_progress)


SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';

重启数据库:


shutdown immediate
startup

升级相关的table:


alter 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

 3) 最后,记得修改compatible参数:

SQL> ALTER SYSTEM SET COMPATIBLE = '11.2.0' SCOPE=SPFILE;

System altered.

至此升级完成!

[oracle@qht115 admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon Sep 3 14:05:04 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

参考:http://bbs.51cto.com/thread-926597-1.html

猜你喜欢

转载自blog.csdn.net/jolly10/article/details/82217056
今日推荐