暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE SCN问题排查

海天起点 2016-06-02
498

什么是SCN

有system change number和system commit number两种说法,表达的都是同一个意思,即SCN是数据库系统中顺序增长的一个数字,用来精确区别操作的先后顺序。SCN可以理解为Oracle数据库内部时间钟。

SCN问题产生原因

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

SCN问题产生的后果

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

SCN问题解决方法

方法1:打ORACLE官方推存的补丁

说明:该方法有两个难点,如果该库和其它库有dblink连接,那么其它库也要同时做补丁升级,牵涉多少套系统未知,再说其它库是否采取升级你也是无法控制的,如果你只升级本库,那么如果异常同步scn至本库本库会拒绝dblink连接,导致业务失败,也是一种风险,退一万步讲,就算所有数据库补丁升级,升级后会不会出现新的bug也无法预料,因此风险和不可控因素太多

方法2:通过调整隐含参数值最大限度保障业务运行

说明:该方法前提是数据库打了2012年1月份的补丁后,会引入一个新的参数,该参数是控制headroom剩余天数,_EXTERNAL_SCN_REJECTION_THRESHOLD_HOURS该参数默认值是24,建议故障发生后重启再次宕机将该参数设置成1,最大限度紧急恢复业务,然后进行补丁升级,注意,该方法有前提并且仅供应急时使用,ORACLE官方不建议修改此参数值。

方法3:找查SCN污染源,解决SCN异常增长

说明:该方法简单而且处理起来难度最低,找到scn异常问题传染源以后进行补丁升级或将dblink用其它方式代替,可避免此类隐患导致故障。

方法4:白名单隔离处理

说明:该方法是一种管理手段,采用以下的一些管理手段减小风险,对应措施有以下几点

  • 将部分、数量可控、业务相关的系统纳入一个白名单范围内

  • 白名单内的数据库之间可以DBLINK数据访问,白名单与外界的数据访问用DBLINK以外的技术手段

  • 通过类似登录trigger等技术手段,拒绝白名单以外的DBLINK对白名单内的数据访问

  • 回收create database linke 权限,严格控制DBLINK的新建

  • 监控与分析白名单SCN的增长

方法5:使用OGG进行数据同步

说明:在目前已知很多数据库都是使用物化视图同步数据,这样就不可避免使用DBLINK,造成SCN污染。而采用OGG的方式则是通过分析Oracle数据库的redolog,进行数据同步,能在不污染SCN的情况下进行数据同步。

海天起点工程师强烈建议如果需要同步数据的话尽可能避免使用DBLINK的物化视图而采用OGG的方式进行同步。

以上不管采用哪种方法都存在风险,建议客户由海天起点的工程师完成。

海天起点曾处理了大量相关案例,协助中国电信下属多个省分公司处理了大量通过DBLINK导致的SCN问题。

欢迎咨询海天起点技术专家

免费热线:800-810-3650   400-810-3650


喜欢本文请长按下方的二维码订阅海天起点

文章转载自海天起点,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论