SCN异常增长导致数据库异常关闭风险的防范

 oracle数据库SCN的异常增长,可导致数据库异常关闭。本文对其的机制及检测方法进行描述。

一、SCN相关知识介绍
   
    1SCN概述:
          SCN是一个单向增长的“时钟”,广泛应用于数据库恢复、事务ACID特性(指事务的原子性-Atomicity、一致性-Consistency、隔离性-Isolation、持久性-Durability,这是可靠数据库所应具备的特性)和还有分布式事务中。   
    2SCN内部存储方式:在Oracle内部,SCN分为scn wrapscn base两部分存储。SCN长度为48位,因为在早期通常只能处理32位甚至是16位的数据,所以人为地分成了低32位(scn base)和高16位(scn wrap)。
         248次方,数值为281万亿,281474976710656   
    3Maximum Reasonable SCN:在当前时间点,SCN最大允许达到(或者说最大可能达到)的SCN值。也称为Reasonable SCN Limit,简称RSL。这个值是一个限制,避免数据库的SCN无限制地增大,甚至达到了SCN的最大值。
         Maximum Reasonable SCN=(当前时间至198811日之间的天数)x24x3600xSCN每秒最大可能增长速率。
         SCN每秒最大可能增长速率的数值与Oracle版本有关,11.2.0.2之前是1638411.2.0.2及之后版本是32768。在11.2.0.2的版本中有一个隐含参数,_max_reasonable_scn_rate,其默认值就是32768,不建议调整该值。   
    4SCN Headroom:指Maximum Reasonable SCN与当前数据库SCN的差值。alert中为了容易让人读通常以“天”为单位。
         天数=(Maximum Reasonable SCN-Current SCN)/16384/3600/24。含义为,如果按SCN的每天增长速率,多少天会到达Maximum Reasonable SCN

二、SCN异常增长导致数据库关闭的机制
   
       通常情况下,SCN每秒最大允许的16K32K增长率已经足够,但不排除由于BUG,或者人为调整导致SCN异常增长过大,比如数据库通过特殊手段强制打开,手工把SCN递增得很大。除此以外,OracleSCN会通过db link进行传播,涉及到db link操作的多个库,会将SCN同步到这些库中的最大的SCN
       在两个库通过db link进行分布式事务时,假设B库的SCN值要高于A库的SCN,因此要将B库的SCN增同步到A库,但是如果B库的SCN过高,这样同步到A库之后,使得A库面临Headroom过小的风险,那么A库会拒绝同步SCN,这个时候就会报ORA-19706: Invalid SCN错误。
       递增SCN使得Headroom过小到什么值时会拒绝递增(同步)SCN呢?如果打了20121CPUPSU补丁,11.2.0.2及以后的版本,是1天即24小时,其他版本是31天即744小时,打了补丁之后可以由隐含参数_external_scn_rejection_threshold_hours调整。
       如果是数据库本身操作而不是通过db link同步使得SCN增长的,其增长速率可通过系统的统计量“calls to kcmgas”和”DEBUG calls to kcmgas”得到。kcmgas的意思是get and advance SCN,即获取并递增SCN

三、检测方法
      
       运行检测脚本scnhealthcheck.sql,该脚本分为9i10.110.211.111.25个版本。脚本见Oracle MOS文档[ID 1393363.1]

四、检测结果
     
     运行scnhealthcheck.sql脚本后,检测结果分为如下三种:     
     Result: A - SCN Headroom is good,数据库处于正常状态,建议短期内处理;
     Result: B - SCN Headroom is low,数据库SCN生成率过高,需要尽快处理;
     Result: C - SCN Headroom is low,数据库SCN生成率过高,需要紧急处理;
     正常的检测结果如下所示:
      --------------------------------------------------------------
      ScnHealthCheck
      --------------------------------------------------------------
      Current Date: 2012/11/30 10:46:58
      Current SCN:  49749614621
      SCN Headroom: 9232.3
      Version:      10.2.0.4.0
      --------------------------------------------------------------
      Result: A - SCN Headroom is good
      Apply the latest recommended patches
      based on your maintenance schedule
      AND set _external_scn_rejection_threshold_hours=24 after apply.
      For further information review MOS document id 1393363.1

五、参考文档   
    1NOTE:1376995.1 - Information on the System Change Number (SCN) and how it is used in the Oracle Database   
    2NOTE:1393363.1 - Installing, Executing and Interpreting output from the "SCNhealthcheck.sql" script   
    3NOTE:1388639.1 - Evidence to collect when reporting "high SCN rate" issues to Oracle Support   
    4NOTE:1393360.1 - ORA-19706 and Related Alert Log Messages

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9529380/viewspace-750417/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9529380/viewspace-750417/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值