SCN最大值

 

在2012年第一季度的CPU补丁中,包含了一个关于SCN修正的重要变更,这个补丁提示,在异常情况下,Oracle的SCN可能出现

异常增长,使得数据库的一切事务停止,由于SCN不能后退,所以数据库必须重建,才能够重用。
这个BUG的影响在于,Oracle的SCN可能会被异常的增进,而至于极限,导致数据库无法正常工作,在这种情况下,只能重建

数据库。但是这个风险的发生概率低,因为Oracle会在数据库内部控制SCN的合理增长,每秒SCN最多增长16348,这会将SCN

控制在一个合理的增长范畴内。


Oracle使用6 Bytes记录SCN,也就是48位,其最大值是:
SQL> col scn for 999,999,999,999,999,999
SQL> select power(2,48) scn from dual;

                     SCN
------------------------
     281,474,976,710,656

 


Oracle在内部控制每秒增减的SCN不超过 16K,按照这样计算,这个数值可以使用大约544年:
SQL> select power(2,48) / 16 / 1024 / 3600 / 24 / 365 from dual;
POWER(2,48)/16/1024/3600/24/365
-------------------------------
                     544.770078

 

一个数据库当前最大的可能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
------------------------
      13,575,843,517,523
这个算法即SCN算法,以1988年1月1日 00点00时00分开始,每秒计算1个点数,最大SCN为16K

 

1.oracle 为了防止scn的异常增长所以限制每一秒钟允许最多产生 256*256/4 个scn
2.oracle 内部使用了一个4G范围的数据来表示01/01/1988 00:00:00 ~ 08/18/2121 06:28:15 这段时间.它的算法简单,说来

就是每个月都是用的31天来表示时间,每增加1秒,这个数值就增加1.  可以从redo file dump ,control file dump,datafile

head dump 观察到这个值.
当前系统可能的最大scn 就是上面两个值的乘集.  可用下面的脚本获得系统当前scn可能的最大值:

select
to_char(
(  
 (      
   (         
     (            
       (                   
          (                     
              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,'XXXXXXXXXXXXXXXX') scn_hex
from dual;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值