Oracle 10.2.0.5升级至11.2.0.4
参照mos 官方文档
complete checklist for manual upgrade to oracle database 11gr2 (11.2) (doc id 837570.1)
一、升级前的准备
1、复制utlu112i.sql脚本
从11g数据库复制$oracle_home/rdbms/admin/utlu112i.sql 脚本至10g 数据库临时目录,准备执行
如果不在10g数据库运行utlu112i.sql脚本,则执行升级脚本catupgrd.sql 时会报以下错误:
sql> select to_number('must_be_same_timezone_file_version')
2 from registry$database
3 where tz_version != (select version from v$timezone_file);
select to_number('must_be_same_timezone_file_version')
*
error at line 1:
ora-01722: invalid number
2、在10g数据库执行utlu112i.sql脚本
使用 sysdba权限执行utlu112i.sql脚本
$ sqlplus '/ as sysdba'
sql> spool upgrade_info.log
sql> @utlu112i.sql
sql> spool off
sql>
输出样例见附件《utlu112i.log》
3、检查10g数据库完整性
执行检查脚本dbupgdiag.sql <===== 脚本在本文件夹
$ sqlplus / as sysdba
sql> alter session set nls_language='american';
sql> @dbupgdiag.sql
sql> exit
输出样例见附件《db_upg_diag_orcl_07_dec_2018_0954.log》
执行编译失效包脚本utlrp.sql <--脚本在10g数据库$oracle_home/rdbms/admin目录
$ cd $oracle_home/rdbms/admin
$ sqlplus "/ as sysdba"
sql> @utlrp.sql
执行健康检查脚本hcheck.sql <===== 脚本在本文件夹
sql> spool hcheck.log
sql> @hcheck.sql
sql> spool off
输出样例见附件《hcheck.log》
4、检查connect 角色权限 <===== xx银行为10.2.x数据库,此步骤可以略过
数据库9i和10.1.x以下的版本 connect角色权限较多有如下权限
select grantee,privilege
from dba_sys_privs
where grantee ='connect'
grantee privilege
------- ----------------------
connect create view
connect create table
connect alter session
connect create cluster
connect create session
connect create synonym
connect create sequence
connect create database link
数据库11g和10.2以上版本 connect角色权限较少有如下权限
sql> select grantee,privilege
2 from dba_sys_privs
3 where grantee ='connect';
grantee privilege
------------------------------ ----------------------------------------
connect create session
5、重建dblink <-- xx银行为10.2.x数据库,此步骤可以略过
数据库9i和10.1.x以下的版本,dblink需要删除重建,在更新后
select 'create '||decode(u.name,'public','public ')||'database link '||chr(10)
||decode(u.name,'public',null, 'sys','',u.name||'.')|| l.name||chr(10)
||'connect to ' || l.userid || ' identified by "'||l.password||'" using
'''||l.host||''''
||chr(10)||';' text
from sys.link$ l, sys.user$ u
where l.owner# = u.user#;
6、更新 timestamp with timezone <===== xx银行为10.2.x数据库,此步骤可以略过
更新 11.2.0.4. 不需要应用任何 dst 补丁包在 10.2.0.2 , 10.2.0.3 , 10.2.0.4 or 10.2.0.5 . 可以跳过dst相互更新说明.
the 11.2.0.4 rdbms dst version after the upgrade to 11.2.0.4 will be the same dst version as used in 10.2.0.2 , 10.2.0.3 , 10.2.0.4 or 10.2.0.5.
sql>select version from v$timezone_file;
version
----------
4
7、检查nls_nchar_characterset 为utf8 or al16utf16.
sql> select value from nls_database_parameters where parameter = 'nls_nchar_characterset';
value
----------------------------------------------------------------------------------------------------------------------------------------------------------------
al16utf16
如果是utf8 or al16utf16.,则不需要做任何事情
如果不是utf8 or al16utf16.,则按照文档note 225912.1操作
8、检查用户陈旧的统计信息
可以运行脚本检查陈旧统计信息check_stale_stats.sql <=====脚本在本文件夹
或者可以回顾脚本utlu112i.sql的输出内容
sql> sql> @check_stale_stats.sql
-- there are no stale statistics in exfsys schema.
-- there are no stale statistics in ordsys schema.
-------------------------------------------------------------------------------------------------------
-- sys schema contains stale statistics use the following to gather the statistics --
-----------------------------------------------------------------------------------------------------
exec dbms_stats.gather_dictionary_stats('sys',options=>'gather stale', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size auto', cascade => true);
-- there are no stale statistics in wmsys schema.
-- there are no stale statistics in xdb schema.
9、禁用oracle database vault
升级前先禁用,升级后再开启
sql> select * from v$option where parameter = 'oracle database vault';
parameter value
---------------------------------------------------------------- ----------------------------------------------------------------
oracle database vault
启动方法自行百度
10、备份enterprise manager database control data
11、配置network acl's
应用如果使用了oracle xmldb中 utl_tcp, utl_smtp, utl_mail, utl_http, or utl_inaddr 这些包
12、检查sys用户逻辑坏块
执行检查脚本@$oracle_home/rdbms/admin/utlvalid.sql <===== 脚本oracle home目录
执行检查脚本analyze.sql <===== 脚本在本文件夹
analyze.sq 应该输出没有任何错误.
13、检查是否有正在运行的物化视图
select distinct(trunc(last_refresh)) from dba_snapshot_refresh_times;
select s.obj#,o.obj#,s.containerobj#,lastrefreshdate,pflags,xpflags,o.name,o.owner#, bitand(s.mflags, 8) from obj$ o, sum$ s where o.obj# = s.obj# and o.type# = 42 and bitand(s.mflags, 8) = 8;
如果第二个查询有输出 参照note 1442457.1
14、确保没有需要recovery 的数据文件和没有backup 的数据文件
select * from v$recover_file;
select * from v$backup where status != 'not active';
15、检查有密码保护的角色
--检查是否有角色指定了密码
break on "password protected role"
select r.role "password protected role",
p.grantee "assigned by default to user"
from dba_roles r, dba_role_privs p
where r.password_required = 'yes' and p.granted_role = r.role
and p.default_role = 'yes'
and p.grantee <> 'sys' and r.role not in
(select role from dba_application_roles);
--one can easily turn these password enabled roles into standard roles by running the script resulting from:
select distinct 'alter role '||role||' not identified;' "-- statements"
from dba_roles r, dba_role_privs p
where r.password_required = 'yes' and p.granted_role = r.role
and p.default_role = 'yes'
and p.grantee <> 'sys' and r.role not in
(select role from dba_application_roles);
16、解决分布式事务
sql> select * from dba_2pc_pending;
如果上一行有输出,则执行如下
sql> select local_tran_id
from dba_2pc_pending;
sql> execute dbms_transaction.purge_lost_db_entry('');
sql> commit;
17、检查是否有备库存在
select substr(value,instr(value,'=',instr(upper(value),'service'))+1)
from v$parameter
where name like 'log_archive_dest%' and upper(value) like 'service%';
18、禁用所有批处理job和定时任务
dbms_job, dbms_scheduler
sql> execute dbms_scheduler.disable('auto_space_advisor_job');
sql> execute dbms_scheduler.disable('job1, job2, sys.jobclass1');
note 404238.1 : how to disable an entry from dbms_scheduler
note 1335741.1 : how to stop a running job using dbms_job
note 67695.1 : procedure dbms_job.broken specification
19、确保sys 和system 使用system表空间
sql> select username, default_tablespace
from dba_users
where username in ('sys','system');
sql> alter user sys default tablespace system;
sql> alter user system default tablespace system;
20、检查 aud$ 是否存在sys 和system 用户,并且在system表空间
sql> select owner,tablespace_name
from dba_tables
where table_name='aud$';
如果不在则迁移至sys用户
21、检查数据库是否有其他的ssl 外部用户
sql> select name from sys.user$
where ext_username is not null
and password = 'global';
如果ssl用户有,则在升级完成后,执行 步骤33
22、记录数据文件,日志文件,控制文件位置,并备份 listener.ora, tnsnames.ora文件
sql> select name from v$controlfile;
sql> select file_name from dba_data_files;
sql> select group#, member from v$logfile;.
23、listener配置
如果是集群则不需要此步骤,因为在集群配置是更新
停监听$ lsnrctl stop
24、备份数据库
对数据库做一个冷备份或者rman备份
25、参数文件配置
复制initialization.ora文件至<target 11gr2 home>/dbs目录
推荐去掉参数文件中的隐含参数
使用diagnostic_dest代替user_dump_dest, background_dump_dest
集群把cluster_database=false,升级完成后再改为true
26、win操作系统执行如下
。。。。。。。。。。。
27、linux 系统验证以下配置
--11g数据库环境变量
- oracle_base
- oracle_home
- path, ld_library_path , shlib_path and libpath ( for aix )
--修改oratab
sample /etc/oratab
#orcl:/opt/oracle/product/10.2/db_1:n
orcl:/opt/oracle/product/11.2/db_1:n
--如果是从10g升级至11g,验证一下信息
sql> select dbms_stats.get_param('method_opt') from dual;
dbms_stats.get_param('method_opt')
-------------------------------------------------------------
for columns id size 1
如果是for columns id size 1,在升级时会出现问题
sql>exec dbms_stats.set_param('method_opt','for all columns size auto');
二、升级数据库到11g r2
xx银行是异机升级,需要先进行数据库还原 <===============
28、在11g数据库执行如下升级脚本
--执行catupgrd.sql升级脚本
$ sqlplus "/ as sysdba"
sql> startup upgrade
sql> set echo on
sql> spool upgrade.log
sql> @?/rdbms/admin/catupgrd.sql
sql> spool off
--如果有陈旧的参数,可以在此时去掉,并将pfile转换为spfile
--执行catupgrd.sql
$ sqlplus "/as sysdba"
sql> startup
sql> @?/rdbms/admin/utlu112s.sql
--执行catuppst.sql
sql> @?/rdbms/admin/catuppst.sql
--执行utlrp.sql
sql> @?/rdbms/admin/utlrp.sql
--执行dbupgdiag.sql <===== 检查脚本,脚本在本文件夹
sql> @dbupgdiag.sql
三、升级之后的操作
29、验证 listener.ora文件
lsnrctl start
30、系统环境变量
--确保环境变量指向11g
- oracle_base
- oracle_home
- path, ld_library_path, shlib_path and libpath ( for aix )
--修改 /etc/oratab <====== xx银行集群应该不用操作
sid:oracle_home:y
for instance,
orcl:/opt/oracle/product/11.2/db_1:y
31、检查dst,与升级前步骤 6 应该一样
sql>select version from v$timezone_file;
version
----------
4
32、更新dbms_stats 包
如果使用dbms_stats.create_stat_table创建过表
则使用execute dbms_stats.upgrade_stat_table('sys','dictstattab');
33、更新 ssl 用户
if you are upgrading from 10.2.0.x (or higher), then you are not required to run this command.
34、启用database vault
35、使用utl 类似包,则执行此步骤
36、编辑init.ora
--如果修改cluster_database ,则改为true
sql> create spfile from pfile;
37、锁定oracle 自带用户
sql> select username, account_status from dba_users order by username;
alter user username password expire account lock;
38、更新 oracle text
this is only needed if oracle text is in use.
39、更新集群信息 <=========
40、配置em
如果没有可跳过
41、配置
tde (transparent data encryption)
如果没有可跳过
42、gather fixed object statistics
在升级后两周 执行下面命令修复
sql>execute dbms_stats.gather_fixed_objects_stats;
43、compatible参数修复
参照 note 1537496.1
--1.修改集群参数cluster_database=false
--2.修复compatible,确保在 11.0.0.0 之上
--3.更新模式打开数据库 sql> startup upgrade
--4.执行 sql> @?/rdbms/admin/c1102000.sql
--5.关闭数据库
--6.修改集群参数cluster_database=true
--7.正常模式 sql> startup
上一篇: 浅谈COOKIE和SESSION区别
下一篇: 完美的【去重留一】SQL
推荐阅读
-
Oracle 10.2.0.5升级至11.2.0.4
-
Oracle 10.2.0.5升级至11.2.0.4
-
ORACLE 11g从 11.2.0.1升级到11.2.0.4 详细实战教程
-
Oracle11.2.0.4升级到11.2.0.4.18详细步骤
-
Oracle 10g 的10.2.0.1.0版本升级至10.2.0.4.0报错处理
-
Oracle RAC 10.2.0.1升级至10.2.0.4操作笔记
-
Oracle升级到11.2.0.4之后在alert日志中出现 NUMA 警告信息
-
CentOS下Oracle 10g 升级至10.2.0.4
-
Oracle数据库的升级(10gR2至11gR2)
-
CentOS下Oracle 10g 升级至10.2.0.4