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

 

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐