Oracle从10g升级到11g详细步骤
- 格式:doc
- 大小:64.50 KB
- 文档页数:28
Oracle从10g升级到11g详细步骤
数据库旧版本:10.2.0.4
数据库新版本:11.2.0.2
OS 版本: Solaris 10
参考文档:Complete Checklist for Manual Upgrades to 11gR2 [ID 837570.1]
第一部分 - 安装11gR2软件
这里对
软件的
安装就不详细说明了,可以参考相应的文档。
这里需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在软件级别上打上PSU或CPU,这样就不用跑两次catbundle.sql,减少停机时间。
第二部分 - 初步检查
1. 在升级之前,确保所有的组件和对象都是valid:
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from
dba_registry order by comp_name; --针对组件
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from
dba_objects where status='INVALID' order by owner,object_type; --针对对象
如果有invalid的对象,运行utlrp.sql重新编译对象。
2. 确保sys和system下没有重复的对象:
select object_name, object_type from dba_objects where object_name||object_type in (select
object_name||object_type from dba_objects where wner = 'SYS') and wner = 'SYSTEM';
上面这条语句只能返回以下4条记录:
OBJECT_NAME OBJECT_TYPE
---------------------------------------- ---------------
DBMS_REPCAT_AUTH PACKAGE BODY
DBMS_REPCAT_AUTH PACKAGE
AQ$_SCHEDULES_PRIMARY INDEX
AQ$_SCHEDULESTABLE
如果有其它记录返回,则必须根据下面这篇文档把重复记录删除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID 1030426.6]
第三部分 - 升级前工作
Step 1.
从11gR2的OracleHome下拷贝以下文件至一个临时文件夹:
$ORACLE_HOME/rdbms/admin/utlu112i.sql
Step 2.
登陆数据库,运行:
$ sqlplus '/ as sysdba'
SQL> spool upgrade_info.log
SQL> @utlu112i.sql
SQL> spool off
SQL>
生成的upgrade_info.log里的内容很重要,后续步骤要根据该文件的内容做相应的修改,因此一定要保留下来。
Step 3.
从下面这篇文档里可以下载到脚本
dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)
[ID 556610.1]
运行这个脚本:
cd
$ sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @dbupgdiag.sql
sql> exit
如果该脚本报告有invalid对象,运行以下命令重编译无效对象:
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL> @utlrp.sql
Step 4.
从10.2开始,CONNECT角色的权限变少了,所以如果你是从10.2之前升级到
11g
的话,升级之后,需要重新授予缺少的权限,但是如果是从10.2及之后升级到11g的话,就不需要重新赋权限了,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
Step 5.
生成重建dblink的脚本,以防万一数据库需要降级。和Step 4一样,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
Step 6.
检查Timezone版本,主要参考:
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2
Patchset [ID 1201253.1]
注意:11g的软件里已经自带了版本1-14的Timezone。
先检查一下当前timezone版本:
SQL> conn / as sysdba
Connected.
SQL>SELECT version FROM v$timezone_file;
根据当前timezone的版本,又分三种情况:
1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。
2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。
3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤
Step 7.
检查国家字符集是否是UTF8或AL16UTF16:
select value from NLS_DATABASE_PARAMETERS where parameter =
'NLS_NCHAR_CHARACTERSET';
如果是,则什么都不用做;如果不是,那你就惨了,跟着下面长长的这篇文档一步一步做吧:
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle
9i,10g and 11g [ID 276914.1]
Step 8.
收集统计信息,以减少停机时间:
$ sqlplus "/as sysdba"
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
Step 9.
如果你有开启Vault,那么你需要先在11gR2软件下禁用Vault,等升级结束后,再启用Vault,否则会在升级过程中报错。
Step 10.
备份Enterprise Manager Database Control
Data
,因为本例并没有使用EM,所以不需要该步骤。
Step 11.
配置网络ACL's,在本例中不需要配置。
Step 12.
使用以下语句生产分析数据字典的脚本 (as sysdba):
Set verify off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql
SELECT 'Analyze cluster "'||cluster_name||'" validate structure cascade;'
FROM dba_clusters
WHERE wner='SYS'
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade;'
FROM dba_tables
WHERE wner='SYS'
AND partitioned='NO'
AND (iot_type='IOT' OR iot_type is NULL)
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
FROM dba_tables
WHERE wner='SYS'
AND partitioned='YES';
spool off
生成的脚本名称是:analyze.sql
现在运行该脚本:
$ sqlplus "/ as sysdba"
SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL> @analyze.sql
Step 13.