关于Oracle 10.2.0.5 版本应用SCN补丁14121009相关问题
环境:OEL 5.7 + Oracle 10.2.0.5
背景:Oracle发布的两篇关于2019年6月份将自动调整高版本数据库的SCN COMPATIBILITY的MOS文章引起了很多客户的恐慌,尤其是起初Oracle对10g版本未提供任何补丁。我这里结合业界多位Oracle ACE专家的系列文章,在自己的实验环境做了系列验证总结。
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]
<Patch 26493118> and <Patch 14121009> [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
先决条件补丁程序
16619894 DATABASE 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_objects
where
owner = 'SYS' and object_name ='DBMS_SCN' and object_type='PACKAGE BODY';
3.2 检查SCN的状态
应用补丁或者在高版本数据库中可以查询SCN的状态:
--check your scn status
set serverout on
declare
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;
begin
dbms_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) then
dbms_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 );
else
dbms_output.put_line('AUTO SCN compatibility rollover is DISABLED!!!');
end if;
end;
/
查询结果类似如下:
Current SCN compatibility:1
Current SCN RATE:16k
AUTO SCN compatibility rollover is ENABLED!!!
AUTO rollover time:2019/06/23
AUTO rollover target value:3
PL/SQL procedure successfully completed.
3.3 查询当前最大合理SCN
一个数据库当前最大的可能SCN被称为"最大合理SCN",该值可以通过如下方式计算:
col scn for 999,999,999,999,999,999
select
(
(
(
(
(
(
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 scn
from dual
/
这个算法即SCN算法,这里是以1988年1月1日 00点00时00分开始,每秒计算1个点数,最大SCN为16K。
4.总结
这段关于SCN的风波引起了不少客户的过度恐慌,实际上最本质的还是要理解Oracle的本质,明白了其中原理,才可以防患于未然,做到心中不慌。
我使用免费的bethune巡检发现(版本:2.2.6),可以对SCN有更细致的安全检查:
--测试环境第一次巡检发现:
当前数据库中已存在 SCN 升级逻辑,当前的 SCN 每秒增长上限为 32768 (来源于参数 _max_reasonable_scn_rate), 并未启动 SCN 版本自动升级,需要时时关注 SCN Headroom 的增长情况,必要时及时升级 SCN 版本。
2018-12-26 21:20:18 15184372089397 800.3
--非常规手段将测试环境的SCN 推进到16316960000000,再次巡检发现:
截至数据采集时,当前数据库的 SCN 增长速度过快,当前 Headroom 为 .2 天,不足 10 天,当前数据库并没有对应的 SCN 升级补丁,可能会在未来(2019 年 6 月之后)运行过程中出现 SCN 相关问题。
2018-12-26 21:29:08 16316960000074 0.2
不过测试发现,在10.2.0.5版本,即使我应用了PSU和对应的SCN补丁,再次巡检还是提示没有对应SCN升级补丁,这可能是工具还没有考虑到10.2.0.5这种应用补丁的方式:
--DATABASE PATCH SET UPDATE 10.2.0.5.12 + 14121009补丁
截至数据采集时,当前数据库的 SCN 增长速度过快,当前 Headroom 为 .3 天,不足 10 天,当前数据库并没有对应的 SCN 升级补丁,可能会在未来(2019 年 6 月之后)运行过程中出现 SCN 相关问题。
2018-12-26 23:24:22 16316960012451 0.3
引起这一波用户恐慌的MOS文章:
- Recommended patches and actions for Oracle databases versions 12.1.0.1, 11.2.0.3 and earlier – before June 2019 (文档 ID 2361478.1)
- Recommended patching and actions for Oracle database versions 12.1.0.1, 11.2.0.3 and earlier - before June 2019 (文档 ID 2335265.1)
关于Oracle 10.2.0.5 版本应用SCN补丁14121009相关问题的更多相关文章
- 在 ubuntu 【6.06、6.10】 上安装 oracle 10.2.0.1,并打补丁 10.2.0.5
特点: ubuntu 6.06.6.10 算是很古老的ubuntu了,其应该是基于 debian 4 的 tesing/unstable 分支.所以,毛病较多. 如何安装oracle10g? 几个技术 ...
- Linux下Oracle 10.2.0.1升级到10.2.0.4总结
最近部署测试环境时,将测试环境ORACLE数据库从10.2.0.1升级到了10.2.0.4,顺便整理记录一下升级过程. 实验环境: 操作系统:Oracle Linux Server release 5 ...
- 单实例dg软件从10.2.0.4版本安装至10.2.0.5.12
DG环境搭建需求,因此安装与主库相同的软件版本 1.主库软件版本10.2.0.5.12 2dg环境提供的是全新的10.2.0.4.0 3.安装步骤,安装10.2.0.5 静默安装 psu安装10.2. ...
- RAC分解步骤之一,在oracle linux 4u4上安装oracle 10.2.0.1.0操作日志
练习oracle的rac组建过程,第一步,先练习4u4上安装oracle 10.2.0.1.0.直接安装rac,有些难度.从简单的做起.总RAC步骤,参照小布老师的RAC组建. 1. 启动vc,登陆v ...
- Deploy Oracle 10.2.0.5 DataGuard on Red Hat Enterprise Linux 6.4
系统:Red Hat Enterprise Linux 6.4 数据库:Oracle 10.2.0.5.0 Patch Set 4 主机:10dg1 192.168.1.91 10dg2192.168 ...
- 示例Oracle 10.2.0.1.0升级到10.2.0.4.0一例
1.查看当前系统版本 [oracle@std Disk1]$ sqlplus '/as sysdba' SQL*Plus: Release - Production on Thu Jan :: Cop ...
- 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)一.升 ...
- Oracle 10.2.0.1 精简客户端配置
装完Ooracle 11g之后客户端sqlplus复制粘贴的时候不太简单,就 用了实验室的老版本10g客户端. 前提服务端装好了,想换一个客户端.11g sql plus也能用. 文件链接: 链接:h ...
- Deploy Oracle 10.2.0.5 on Red Hat Enterprise Linux 6.4
一.Linux系统安装和配置 1.安装系统时选Desktop 2.设置eth0网卡为静态IP,加入子网掩码,网关,DNS.并配置自己主动启动 3.改动/etc/hosts.加入主机名和相应IP 4.禁 ...
随机推荐
- C++实现景区信息管理系统
景区信息管理系统 实现了: 1.1 建立主程序应用菜单选项 主程序应用菜单选项包含所实现的所有功能,并且对选项采用数字标识进行选择,对其他错误输入可以进行判别,提示输入错误. 1.2 导游线路图的创建 ...
- 【规范】前端编码规范——css 规范
编码 在 css 首行设置文件编码为 UTF-8. @charset "UTF-8"; class 命名 class 名称应当尽可能短,并且意义明确.使用有意义的名称,使用有组织的 ...
- Dubbo,Zookeeper入门
Zookeeper 功能:分布式应用程序协调服务,集群管理者,监视集群各个节点状态-->提交反馈-->进行下一步合理操作: 机制:目录方式,当目录节点发生变化(数据改变,被删除,子节点增加 ...
- C_C++变量命名规则
变量命名规则是为了增强代码的可读性和容易维护性.以下为C++必须遵守的变量命名规则: 变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成. 第一个字母必须是字母或者下划线开头. 不 ...
- Spring data Jpa,Mybatis,读写锁,@Lock 使用
Spring data jpa 支持注解式的读写锁(悲观锁),实际上这个东西硬编码也简单,但是基于Jpa 命名方式定义的Sql,只能用注解添加支持读写锁了, 不了解读写锁的可以点这里 mysql读写锁 ...
- springboot 启动的时候报错 Error creating bean with name 'solrClient'
springboot 启动的时候报错: org.springframework.beans.factory.BeanCreationException: Error creating bean wit ...
- H5常用技巧
工作每天都是接触移动的,特将平时工作中常用的技巧整理总结. 一.@support断定浏览器支持情况定义不同样式 @1像素边框 @supports (-webkit-backdrop-filter:bl ...
- GetLastError获取到错误代码的含义
在写win32的时候我们会用到GetLastError()函数来获取程序错误信息,那我们如何从返回的数字得到错误信息. 这里推荐一个博客,总结了所以返回数字的错误信息: http://blog.csd ...
- 22.1 、react生命周期(一)
在每个react组件中都有以下几个生命周期方法~我们需要在不同阶段进行讨论 组件生命周期概述 1.初始化 在组件初始化阶段会执行 constructor static getDerivedStateF ...
- React 学习之路 (一)
先说一说对React的体验,总结 首先react相对angular来说入手简单暴力,在学习的这段时间里发现: 我们每天做的事就是在虚拟DOM上创建元素然后在渲染到真实的DOM中 渲染到真实DOM上的R ...