一、 基础概念
1、SCN(System Change Number)值是Oracle数据库运行每次变化的一个逻辑点,相当于数据库内部的一个时钟,是个只增不减的数字,广泛应用于数据库的恢复、事务ACID、一致性读以及分布式事务中。
2、SCN的内部存储方式:在Oracle内部,SCN分为两部分存储,分别称之为scn wrap和scn base。实际上SCN长度为48位,即它其实就是一个48位的整数。由于在早些年通常只能处理32位甚至是16位的数据,所以分成了低32位(scn base)和高16位(scn wrap)。那么SCN这个48位长的整数,最大就是2^48(281万亿,281474976710656)
3、Maximum Reasonable SCN:在当前时间点,SCN最大允许达到的SCN值。也称为Reasonable SCN Limit,简称RSL。SCN Headroom即当前时间点SCN以每秒最大的增长速度达到RSL值所需时间,其计算公式为:
(当前时间-1988年1月1日00:00:00)×24×3600×SCN每秒最大的可能增长速度
注:
- (当前时间-1988年1月1日)得到天数,为方便计算,每月按照31天计算。
- SCN每秒最大的可能增长速率跟Oracle版本有一定的关系,在11.2.0.2之前是16384(即16K),在11.2.0.2及之后版本是32768(即32K)。在11.2.0.2及以上的版本中有一个隐含参数_max_reasonable_scn_rate,其默认值就是32768(不建议调整这个值)。根据对各个数据库版本的补丁13498243中自带的scnhealthcheck.sql研究,SCN Headroom计算公式中的最大速率均为定义为16k。
- Alert日志中的SCN Headroom剩余天数为此刻达到RSL所需天数,并非真正耗尽数据库SCN的时间,SCN Headroom每一秒都在增长。
二、 研究过程
1、 SCN Headroom过低问题发现
(1) alert日志可能出现以下告警:
1、Warning - High Database SCN: Current SCN value is 0x0b7b.0008e40b, threshold SCN value is 0x0b75.055dc000
If 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 sqlplu