关于Oracle DB SCN 生成率过高的

预警及处理建议

Oracle SCN简介:

Oracle SCN(SystemChange Number),又名系统更改号,是Oracle数据库内部的一个逻辑时间戳,SCN对数据库事件进行排序,由此对事务进行跟踪和查询。举例来说,当某个事务更新了一行数据,数据库将会对这个动作记录一个SCN,同一事务内的其他更改动作将会拥有同一个SCN标识,当这些事务进行提交的时候,Oracle就会相应的记录这些SCN。由于并发量大,如果在同一时刻,数据库内部有多个事务同时进行更新或者提交,那么多个事务将共享一个SCN。随着数据库的运行,SCN将会有序的增长,从理论上讲,SCN总会有用尽的一天。为了避免这一幕的发生,Oracle为SCN设置了一个足够的增长空间,最大值为281万亿,也就是281,474,976,710,656。Oracle将SCN的生成率与时钟频率进行关联,确保SCN不会达到最大值。正常情况下,该SCN最大值能保证数据库运行500年。

问题的影响:

从以上描述可知,Oracle SCN的合理生成频率大约为16K/秒,但Oracle发现,由于某些应用程序的bug,有可能导致数据库生成的SCN超过该合理值的范围。通常情况下,如果该SCN超过合理值范围的话,数据库将会cancel该事务并伴随报错信息。当下一秒,应用再连接的时候,由于SCN的值已经处于合理范围内,业务可以继续执行,对前端应用来看,就好像有个短暂停顿。但是在极端情况下,数据库可能需要需要不得已关闭来保证数据的完整性,所以会引起宕机的情况。

在Oracle数据库里,数据库之间可以通过dblink来进行数据访问,当通过dblink进行业务提交的时候,由于数据库之间存在不同的SCN,因此,为了让事务一致,Oracle将会以两者之间较大的SCN来进行同步,更新dblink两端的数据库SCN。但是,如果源数据库出现SCN生成率过高的问题,随着业务的不断运行,SCN的异常就会通过dblink传染到其他相关的数据库,而dblink使用的频率越大,这种传染的速度也就越快。如果企业内部存在网状的dblink结构,那么这将很容易将SCN的问题扩大到全网,引起大范围的宕机,严重影响整个联通业务的运行。

根据Oracle MOS文档[ID 1388639.1],该问题可能影响的数据库版本是Release: 10.1 to 11.2。

上述SCN问题已经在部分客户发生,对业务造成比较严重的影响。基于此问题的严重性,特发布产品预警及相应处理建议。

问题的检查和确认:

当数据库出现SCN生成率过高问题的时候,在告警日志文件(alert log)中会有类似以下的告警信息(一种或者多种):

1、Warning - High  Database SCN: Current SCN value is 0x0b7b.0008e40b, threshold SCN value is  0x0b75.055dc000If you have not previously reported this warning on this  database, please notify Oracle Support so that additional diagnosis can be  performed.

2、Warning: The  SCN headroom for this database is only NN days!

3、Warning: The  SCN headroom for this database is only N hours!

4、WARNING: This  patch can not take full effect until this RAC database has been completely  shutdown and restarted again.Oracle recommends that it is done at the earliest convenience.

5、Rejected the  attempt to advance SCN over limit by 9374 hours worth to 0x0c00.00000f66, by  distributed transaction remote logon, remote DB: REMDB.XX.ORACLE.COM.Client info : DB logon user ME, machine yy, program sqlplus@yy  (TNS V1-V3), and OS user uuu

6、Rejected the  attempt to advance SCN over limit by 9375 hours worth to 0x0c00.000003c6, by  distributed transaction logon, remote DB: REMDB.XX.ORACLE.COM.Client info : DB logon user TC, machine xx, program oracle@xx  (TNS V1-V3), and OS user xxx

7、Rejected the  attempt to advance SCN over limit by 9374 hours worth to 0x0c00.00000f66, by XXXXXClient info : DB logon user TC, machine mmm, program sqlplus@mmm  (TNS V1-V3), and OS user uuuWhere XXXXX is a string such as:? PL/SQL RPC (remote)? sql exec with curscn? sql exec with outscn

当发现以上告警信息之后,可以参考Oracle MOS文档[ID 1393363.1],下载并安装Patch:13498243,该patch的安装不需要停止数据库服务,可以在线安装。Patch中包含一个scnhealthcheck.sql脚本,可以直接运行该脚本来检查数据库,根据运行结果来确认是否遇到该问题。Oracle为不同数据库版本提供了不同的patch版本,以下是针对10.2.0.5版本的脚本文件,仅作参考:

运行scnhealthcheck脚本之后,结果可能是以下的一个:

lResult: A - SCNHeadroom is good,数据库处于正常状态;

lResult: B - SCNHeadroom is low,数据库SCN生成率过高,需要进一步处理;

l  Result: C- SCN Headroom is low,数据库SCN生成率过高,需要进一步处理;

问题的处理

由于该SCN事件的触发将极大的危害到整个网络上其它数据库系统的稳定性和持续性,因此,我们强烈建议中国联通对该事件引起重点关注,对内部所有相关版本的数据库系统进行彻底的检查并根据检查结果做出适当的处理措施。操作指引如下:

1.  登陆MOS网站,查询文档[ID1393363.1],根据不同版本的数据库,下载对应的Patch:13498243

2.  安装patch,该patch将会在$ORACLE_HOME/rdbms/admin中生成scnheathcheck.sql脚本;

3.  对所有版本在10.1到11.2的数据库,分别运行以上sql脚本进行检查;sqlplusSYSTEM/xxxxx

spool /tmp/scncheck_out

@scnhealthcheck

spool off

exit

4.  运行脚本后,output类似以下内容:------------------------------------------------------------

ScnHealthCheck

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

CurrentDate: 2012/01/17 01:01:09

CurrentSCN:  384089

Version:      11.1.0.7.0

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

Result:A - SCN Headroom is good

Applythe latest recommended patches

basedon your maintenance schedule

ANDset _external_scn_rejection_threshold_hours=24 after apply.

内容的输出可能是以下3种之一:

lResult: A - SCN Headroomis good,数据库处于正常状态;但仍建议安装最新psu并设置set_external_scn_rejection_threshold_hours=24;

lResult: B - SCNHeadroom is low,数据库SCN生成率过高,建议尽快安装最新psu和patch 13527482,并设置set_external_scn_rejection_threshold_hours=24;

l  Result: C- SCN Headroom is low,数据库SCN生成率过高,且SCN最大值即将耗尽,必须立即安装最新psu和patch 13527482,并设置set_external_scn_rejection_threshold_hours=24;注:_external_scn_rejection_threshold_hours参数不能设置在11.2.0.x版本中。

patch 13527482包含了2个oracle SCN相关bug的修复,分别是bug 12748240和12780098,在安装最新PSU的基础上,需要再安装该patch来修复。

5.关于最新PSU的信息,可以参考MOS文档[ID 756671.1]和[ID 1406574.1],以下简要列出各版本PSU的基本信息,仅供参考:

版本号数据库PSU号集群PSU号

11.2.0.3Patch  13696216Patch  13696251

11.2.0.2Patch  13696224Patch  13696242

11.2.0.1Patch:12419378Patch:9655006

11.1.0.7Patch  13621679Patch  11724953

10.2.0.5Patch  13632743Patch:9952245

10.2.0.4Patch 12879933Patch:9294403

10.2.0.3Patch 13343479Patch:7117233

6.  若scnheathcheck的结果显示为Result B或者Result C,下载并安装PSU以及patch 13527482,具体安装步骤可参考解压包里的readme文件;7.设置参数:

Ininit.ora:

# Set threshold on dd/mon/yyyy - See MOS Document1393363.1

_external_scn_rejection_threshold_hours = 24

Inthe spfile:

alter system set"_external_scn_rejection_threshold_hours" = 24

comment='Set threshold on dd/mon/yyyy - SeeMOS Document 1393363.1'

scope=spfile ;

设置参数后,重新启动数据库

以上参数是oracle的隐含参数,一般情况下不建议客户自行修改或调整,根据SCN的情况,oracle建议将该参数值设为24是合适的,若需要对该参数做其他处理,请咨询oracle工程师。

8.在安装补丁和设置参数后,SCN的生成情况需要再持续观察,scnheathcheck的结果从Result B\C到Result A可能需要几天或者几周的时间。

预警及建议总结:

在某些环境下,程序bug会引起Oracle数据库SCN的异常增长,超出Oracle设定的合理范围,该事件很可能导致宕机,并且由于企业内部存在众多的分布式事务,引起SCN的剧烈增长很容易出现扩散现象,导致更多的数据库宕机。强烈建议相关数据库安装2012年1月以后的PSU以及one-off补丁,设置参数来缓解。同时建议查找应用端分布式事务的并发源头,合理利用并发性等,减少SCN剧烈增长的原因。

oracle transaction scn,关于Oracle DB SCN 生成率过高的 预警及处理建议相关推荐

  1. 突出重围:Oracle 10.2.0.5应用SCN补丁解决DB Link预警实践

    点击▲关注 "数据和云"   给公众号标星置顶 更多精彩 第一时间直达 作者:赵靖宇,云和恩墨北区交付工程师,长期服务于运营商.保险.医院.政府等行业,擅长Oracle数据库故障处 ...

  2. oracle11g数据库版本号,Oracle数据库之关于oracle db 11gR2版本号上的參数和scn headroom补丁问题...

    本文主要向大家介绍了Oracle数据库之关于oracle db 11gR2版本号上的參数和scn headroom补丁问题,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 关于o ...

  3. oracle恢复关系,SCN与Oracle数据库恢复的关系–补充

    一.为什么需要System checkpoint SCN号与Datafile Checkpoint SCN号 1.对只读表空间,其数据文件的Datafile Checkpoint SCN.Start ...

  4. oracle查询当前归档scn_Oracle的SCN剖析

    1.oracle 为了防止scn的异常增长所以限制每一秒钟允许最多产生 256*256/4 个scn 2.oracle 内部使用了一个4G范围的数据来表示01/01/1988 00:00:00 ~ 0 ...

  5. oracle的scn技术,Oracle SCN 深入研究

    一. SCN 说明 之前也整理过几遍Oracle SCN的文章,如下: 这里在稍微小总结一下. 我们可以使用如下SQL 查看Oracle 的SCN: SQL> select CURRENT_SC ...

  6. oracle scn 重置,学习笔记:Oracle SCN详解 SCN与Oracle数据库恢复的关系

    天萃荷净 分享一篇关于Oracle SCN的详解,介绍SCN与Oracle数据库恢复的关系和SCN在数据库中的作用 一.为什么需要System checkpoint SCN号与Datafile Che ...

  7. oracle scn漏洞,Oracle安全:SCN可能最大值与耗尽问题Oracle安全:SCN可能最大值与耗尽问题...

    SCN的问题一旦出现,使得数据库的一切事务停止,由于SCN不能后退,所以数据库必须重建,才能够重用. 在2012年第一季度的CPU补丁中,包含了一个关于SCN修正的重要变更,这个补丁提示,在异常情况下 ...

  8. 讨论oracle的反腐,关于oracle SCN 的讨论

    1.SCN存在redo log文件,control文件.数据文件; 2.oracle正常运行时,control文件的SCN是个很大的数,与redo log文件.数据文件的SCN不同,正常关闭时,做完c ...

  9. oracle数据库修改写入状态,【学习笔记】Oracle oradebug 使用oradebug修改数据库SCN方法案例...

    天萃荷净 使用oradebug修改数据库scn,使用oradebug修改数据库scn的案例. 这里也做了两个测试,发现该功能确实很巧妙,通过修改内存中的scn值,然后写入控制文件和数据文件,实现修改s ...

最新文章

  1. mysql的字段空格是null_MySQL中NULL与空字符串 空格问题
  2. 转载——C语言中float,double类型,在内存中的结构(存储方式)
  3. Python开发Day03
  4. Test2 unit2
  5. 动态创建ActiveRecord条件的查询 MyQuery
  6. PCA算法原理及实现
  7. Mac下Eclipse SVN 更换账号
  8. java中定义存放汉字的数组_Java中如何存储汉字
  9. Planetside.Software.Terragen.v0.9.43.WinALL 1CD(景观产生器)
  10. 计算机里的程序文件删除不了怎么办,文件删除不了怎么办 顽固文件删除方法大全...
  11. 智能随访系统:提升患者综合服务能力和就医体验,提高医院品牌价值与服务质量
  12. python买卖股票_Python实现买卖股票的最佳时机的一种方法
  13. 【Netty-进阶】学习笔记
  14. 【CSP-S 2019模拟】题解
  15. 如何在Windows命令行(DOS界面)中调用 编译器 来编译C/C++源程序
  16. 你不得不了解的linux常用命令,你还不收藏?(日常工作及面试必备)
  17. Unity光照效果_自发光动态改变并影响环境
  18. C++ 、、 |、|| 、|=、?: 逻辑运算符用法
  19. 利用MQL进行MQL解析
  20. JDK源码中,都有哪些设计模式

热门文章

  1. MLDEV[18] | 入职一周年:夯实基础,持续深入
  2. 工业后深度学习时代之自监督学习与自主学习
  3. 基于java+SSM+jsp的汽车维修系统的设计和实现(附源码)
  4. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-8.使用mavoneditor(vue的markdown编辑器),并批量上传图片
  5. Oracle如何创建表空间
  6. 菲洛嘉Vitalorga正式落地中国并推进本土化医疗战略
  7. Mac技巧|如何高效使用苹果便笺?利用便笺快捷键快速完成操作!
  8. 微商怎么通过美柚引流?粉丝必定是精准的宝妈粉
  9. 美柚广告推广的模式有几种?美柚广告投放的效果怎么样?
  10. oracle中nvarchar,SQL中的Nvarchar在oracle中用作varchar2