当前位置: 首页 > news >正文

关于Oracle SCN的最大阈值

SCN每秒增长的速度跟Oracle的版本有关,在Oracle 11.2.0.2之前是每秒允许最大增长16384,在Oracle 11.2.0.2之后是默认每秒允许增长32768,这个值跟新增的隐含参数_max_reasonable_scn_rate有关,如下所示:

NAME                           VALUE           PDESC

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

_max_reasonable_scn_rate       32768           Max reasonable SCN rate

Oracle的CURRENT SCN值会通过DBLINK进行传播。比如B库的CURRENT SCN值高于A库,当A库通过DBLINK查询B库的表时,A库就会递增本库的CURRENT SCN值,使其跟B库一样。也就是说,多个库之间使用DBLINK交互数据时,每个库各自的CURRENT SCN值会和这些库中最大的SCN值保持同步。如果存在Oracle Bug或者人为调整SCN值(比如有时需要手工递增SCN值才能强制打开数据库)可能导致某个库的CURRENT SCN值异常增长,而此时,要是再有其他数据库和这个库有DBLINK交互,那么就会非常危险。所幸的是Oracle对于最大的SCN有个阀值,不允许系统的CURRENT SCN超过这个阀值,这个阀值的算法如下所示(按照SCN每秒最多递增16384计算):

   select

   to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') DATE_TIME,

   ((((

    ((to_number(to_char(sysdate,'YYYY'))-1988)*12*31*24*60*60) +

    ((to_number(to_char(sysdate,'MM'))-1)*31*24*60*60) +

    (((to_number(to_char(sysdate,'DD'))-1))*24*60*60) +

    (to_number(to_char(sysdate,'HH24'))*60*60) +

    (to_number(to_char(sysdate,'MI'))*60) +

    (to_number(to_char(sysdate,'SS')))

    ) * (16*1024)) - dbms_flashback.get_system_change_number)

   / (16*1024*60*60*24)

   ) indicator

   from dual;

其中,Headroom指的是数据库CURRENT SCN和最大SCN阀值之间的差值。2012年1月之后发布的CPU或PSU补丁增加了新的隐含参数_external_scn_rejection_threshold_hours,用于表示这个差值,以小时为单位。external_scn_rejection_threshold_hours为静态参数,根据这个参数的字面意思再结合它的作用来看,可以理解它就是“拒绝外部SCN”的阈值,其对于数据库自身产生的SCN递增是没有影响的。安装完补丁之后,在Oracle 11.2.0.2及以上版本中,该参数默认值是24小时,其他版本默认值是744小时。这也就意味着如果系统的CURRENT SCN和阀值SCN相差小于24小时,数据库的CURRENT SCN值递增的时候则会容易出现ORA-19706错误。如下所示:

SQL> select 1 from dual@dltest;

select 1 from dual@dltest

                   *

ERROR at line 1:

ORA-19706: invalid SCN

同时,警告日志中也会出现如下警告:

Fri Apr 27 11:50:41 2012

Rejected the attempt to advance SCN over limit by 21 hours worth to 0x0ba5.ee95b2e6, by distributed transaction remote end, remote DB: ORAQY10.

 Client info : DB logon user ZJUPAR1O, machine BSS_P560Q_5, program sqlplus@BSS_P560Q_5 (TNS V1-V3), and OS user oracle

Fri Apr 27 11:51:09 2012

Rejected the attempt to advance SCN over limit by 21 hours worth to 0x0ba5.ee95b63e, by distributed transaction remote logon, remote DB: ORAQY10.

 Client info : DB logon user ZJUPAR1O, machine BSS_P560Q_5, program sqlplus@BSS_P560Q_5 (TNS V1-V3), and OS user oracle

引入了_external_scn_rejection_threshold_hours参数之后,由于Headroom变大(如果不安装补丁,Headroom默认为1小时),在使用DBLINK的数据库环境中,反而更容易出现ORA-19706错误。所以安装完补丁之后建议将其设置为1,从而尽可能地避免出现ORA-19706错误(但会使得系统的CURRENT SCN值更加接近SCN阀值)。

http://www.lryc.cn/news/67865.html

相关文章:

  • Linux多路转接之poll
  • Webpack打包流程
  • React事件委托
  • Notion——构建个人知识库
  • ModuleNotFoundError: No module named ‘Multiscaledeformableattention‘
  • 【数据结构】链表(C语言实现)
  • 【2023程序员必看】大数据行业分析
  • 通达信SCTR强势股选股公式,根据六个技术指标打分
  • SpringBoot+Token+Redis+Lua+自动续签极简分布式锁Token登录方案
  • 多模态:MiniGPT-4
  • 5年时间里,自动化测试于我带来的意义,希望你也能早点知道
  • 【MyBaits】SpringBoot整合MyBatis之动态SQL
  • 涅槃重生,BitKeep如何闯出千万用户新起点
  • 绝地求生 压枪python版
  • 麒麟操作V10SP1系统systemd目标单元
  • python基于LBP+SVM开发构建基于fer2013数据集的人脸表情识别模型是种什么体验,让结果告诉你...
  • antd——实现不分页的表格前端排序功能——基础积累
  • 案例11:Java超市管理系统设计与实现开题报告
  • @JsonAlias 和 @JsonProperty的使用
  • Grafana系列-统一展示-8-ElasticSearch日志快速搜索仪表板
  • 【K8s】openEuler23操作系统安装Docker和Kubernetes
  • 异常数据检测 | Python实现ADTK时间序列异常数据检测
  • 软件测试之jmeter性能测试让你打开一个全新的世界
  • Redis数据结构——动态字符串、Dict、ZipList
  • ipad可以用别的品牌的手写笔吗?便宜的ipad电容笔
  • 【数据库】关于SQL SERVER的排序规则的问题分析
  • 算法修炼之练气篇——练气十三层
  • ChatGPT:AI不取代程序员,只取代的不掌握AI的程序员
  • 数字革命下的产品:百数十年变迁的启示与思考。
  • 部门新来一00后,给我卷崩溃了...