oracle数据库6月之后的数据,Oracle将会在2019年6月23日后自动调整高版本的数据库SCNCOMPATIBILITY为3(转载)...

背景:Oracle发布的两篇关于2019年6月份将自动调整高版本数据库的SCN COMPATIBILITY的MOS文章引起了很多客户的恐慌,尤其是起初Oracle对10g版本未提供任何补丁。我这里结合业界多位Oracle ACE专家的系列文章,在自己的实验环境做了系列验证总结。

·

1.什么都不做会怎样?

·

2.最简单的做法是啥?

·

3.常用查询验证方法

·

4.总结

1.什么都不做会怎样?

结合多位专家的结论:

Oracle 将会在 2019 年 6

月 23 日后自动调整高版本的数据库

SCN COMPATIBILITY 为

3,调整之后,这些数据库内部的

SCN 上限增速会变成 96k, 从而可能出现超出低版本的 SCN 的情况,如果发生这种情况,将会导致低版本数据库无法与高版本通过

DB Link 进行连接。

具体解释下,这里所说的高版本,可以理解为是:11.2.0.4及以上版本,同时也包含其他低于此版本但有补丁可以应用修正的版本;而低版本就是剩下的版本。

也就是说:如果确认环境内没有所谓的高版本,理论是可以什么都不做的。但是如果你不能保证未来生产环境内不会创建新的高版本且有dblink连接交互,就不能一直坐视不管。

2.最简单的做法是啥?

这个要看你的实际情况。2.1 无需关注如果你的环境全是高版本,或全是低版本,且未来不会有变化,那自然无需关注。

2.2 禁用高版本的自动调整如果你的环境绝大部分都是低版本,只有个别的高版本,可以考虑将高版本的SCN自动调整禁用掉:

begin

DBMS_SCN.DISABLEAUTOROLLOVER;end;

/

如果是在2019年6月以后安装的新的高版本,默认就是SCN COMPATIBILITY 为 3,这就需要在mount状态调低兼容性:

ALTER DATABASE

SET SCN

COMPATIBILITY 1;

或者最一劳永逸的做法是,将所有低版本都应用补丁或是升级,弊端就是这个工作量很可能是巨大的。

2.3 低版本应用补丁或升级如果你的环境绝大部分是高版本,只有个别的低版本,可以考虑将低版本进行补丁应用或升级(没有补丁的版本只能升级版本)

另外需要特殊说明的是,针对生产上占比比较高的10g稳定版本:10.2.0.5,也就是本文标题的这个版本。最开始Oracle是没有提供补丁的,但后来Oracle迫于广大10.2.0.5用户的压力,已经为这个版本提供了对应的补丁。但官方给出的列表是:应用PSU171017的基础上再应用这个SCN补丁14121009。

DATABASE PATCH SET UPDATE 10.2.0.5.171017 and Patch

14121009 [**requires extended support]

and [WIP] ** requires extended support

但是PSU171017是需要扩展支持服务才可以有权下载,普通权限的MOS无法下载,这对于国内大部分客户都是相当于没有的。好在我们通过搜索测试发现,这个14121009的scn补丁对于10.2.0.5.12版本也有提供,经测试可以解决问题,而10.2.0.5.12的PSU普通MOS用户就可以下载的到。

补丁程序14121009: PLACEHOLDER ENHANCEMENT REQUEST

FOR PROJECT

ID 40828

先决条件补丁程序

16619894DATABASE

PATCH SET

UPDATE 10.2.0.5.12

(INCLUDES CPUJUL2013)

所以对于10.2.0.5版本,可以应用10.2.0.5.12的PSU,再应用14121009的SCN补丁即可解决问题,无需升级大版本。细节补充:10.2.0.5的库,如果没有打任何PSU补丁,是没有"_external_scn_rejection_threshold_hours"这个隐藏参数的。应用10.2.0.5.12 PSU:p16619894_10205_Linux-x86-64.zip后,就引入了"_external_scn_rejection_threshold_hours"这个隐藏参数,且默认值为24:

NAME  DESCRIPTION

VALUE-------------------------------------------------------

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

------------------------------_external_scn_rejection_threshold_hours  Lag in

hours between max

allowed SCN and

an external SCN  24

但此时还不能调整SCN COMPATIBILITY,需要继续应用p14121009_1020512_Linux-x86-64.zip这个SCN补丁后,才可进行调整:

--开库状态只能调高,调低需要在mount状态下:ALTER

DATABASE SET

SCN COMPATIBILITY 1;ALTER

DATABASE SET

SCN COMPATIBILITY 2;ALTER

DATABASE SET

SCN COMPATIBILITY 3;

而对于比10.2.0.5更低的版本,截止目前依然是没有补丁提供,就只能通过升级来解决。

3.常用查询验证方法

Oracle

ACE 盖国强和罗海雄老师在很多相关文章中提供了一些常用的查询验证方法,实际测试很好用,具体查询语句如下:

3.1 确认数据库版本高低一个检查当前数据库究竟是高版本还是低版本的简单方法,就是去看数据库是否包含dbms_scn这个包,包含就是高版本,反之就是低版本(这样低版本通过补丁应用或升级后,也可以通过这个查询去判断是否修补成功):

select count(*)

from dba_objectswhereowner =

'SYS' and

object_name ='DBMS_SCN' and

object_type='PACKAGE

BODY';

3.2 检查SCN的状态应用补丁或者在高版本数据库中可以查询SCN的状态:

--check your scn statusset

serverout ondeclare

v_autorollover_date date;

v_target_compat number;

v_RSL number;

v_hr_in_scn number;

v_hr_in_sec number;

v_t4 number;

v_max_cmpat number;

v_isenabled boolean;

v_current_compat number;begindbms_scn.GETCURRENTSCNPARAMS(

v_RSL,v_hr_in_scn,v_hr_in_sec,v_current_compat,v_max_cmpat);

dbms_scn.GETSCNAUTOROLLOVERPARAMS(

v_autorollover_date,v_target_compat,v_isenabled);

dbms_output.put_line('Current SCN

compatibility:'||v_current_compat);

dbms_output.put_line('Current SCN

RATE:'||round((v_hr_in_scn/v_hr_in_sec)/1024)||'k');if(v_isenabled) thendbms_output.put_line('AUTO

SCN compatibility rollover is ENABLED!!!');

dbms_output.put_line('AUTO rollover

time:'||to_char(v_autorollover_date,'YYYY/MM/DD'));

dbms_output.put_line('AUTO rollover target

value:'||v_target_compat );elsedbms_output.put_line('AUTO

SCN compatibility rollover is DISABLED!!!');end

if;end;

/

查询结果类似如下:

Current SCN compatibility:1Current SCN

RATE:16k

AUTO SCN compatibility rollover is ENABLED!!!

AUTO rollover time:2019/06/23AUTO rollover target

value:3PL/SQL procedure

successfully completed.

3.3 查询当前最大合理SCN一个数据库当前最大的可能SCN被称为"最大合理SCN",该值可以通过如下方式计算:

col scn for

999,999,999,999,999,999select

(

(

(

(

(

(

to_char(sysdate,'YYYY')-1988

)*12+

to_char(sysdate,'mm')-1

)*31+to_char(sysdate,'dd')-1

)*24+to_char(sysdate,'hh24')

)*60+to_char(sysdate,'mi')

)*60+to_char(sysdate,'ss')

) * to_number('ffff','XXXXXXXX')/4

scnfrom dual

/

这个算法即SCN算法,这里是以1988年1月1日

00点00时00分开始,每秒计算1个点数,最大SCN为16K。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值