数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

关于OracleRac数据不同步


发布日期:2023年12月07日
 
关于OracleRac数据不同步

现在有这样的环境

一台web Server一个是纯JAVA APP 程序

数据库两台做成RAC的形式 web Server与APP 程序都通过oci(rac)的方式连接

数据库

出了这样的怪问题webServer更新或是插图入一条数据后面紧跟着的在APP中就查询不到等到用工具查询就没有问题

初步怀疑

RAC方式下面的数据库两个instance的同步没做好?

查询相关资料发现在与MAX_COMMIT_PROPAGATION_DELAY有关

最大提交传播时延(MAX_COMMIT_PROPAGATION_DELAY简称MCPD)在ORACLE RAC(或OPS)环境中才使用表示在RAC系统中一个instance系统提交产生的最新系统改变码(SCN)能够以多快的速度反应到另一个instance中

举例说明RAC系统有AB两个实例(instance)AB本地系统改变码为SCNA更新数据DATA提交 LGWR操作完成后A本地系统改变码为SCN经过不大于MAX_COMMIT_PROPAGATION_DELAY时间后B系统本地改变码才变为SCN

Global Cache Services 将刷新RAC中的SCN不管SCN是否及时刷新后续的数据查询都不会因此产生数据库错误在此时间内有可能查询结果不是最新数据产生读一致性(read consistency)问题

RAC环境中的所有实例此参数值必须相同

ORACLEi后建议常用的两个值是(默认)其他数值皆不建议其实这两个数值就代表了RAC环境中两种SCN 产生机制

Lamport Scheme和 Broadcast on Commit scheme

设置为默认值表示采用Lamport SchemeSCN改变不会完全同步同步将在 秒钟内完成而不是总等待秒钟后才完成如果系统比较空闲同步可能在秒(甚至更短时间)内完成不管系统多繁忙同步时间也不可能超过不难理解采用此模式整个RAC系统的运行效率较高

设置为表示采用Broadcast on Commit schemeSCN改变完全同步每当commit时(即LGWR 写redo log时)

- LGWR发送消息更新全局SCN(global SCN)

- LGWR 发送消息给每个活动的实例更新其本地SCN(local SCN)

有资料说只要MCPD < 系统将采用Broadcast on Commit scheme

Lamport Scheme能够适应绝大部分应用的要求只有个别实时性特别高的业务才需要Broadcast on Commit scheme通过分析不难理解Broadcast on Commit scheme将需要更多的系统资源

上一篇:解析:OracleText的体系结构及其使用

下一篇:Oraclespool用法小结