如何解决Oracle Rac数据不同步问题
答案:2 悬赏:80 手机版
解决时间 2021-04-10 10:25
- 提问者网友:贪了杯
- 2021-04-09 21:50
如何解决Oracle Rac数据不同步问题
最佳答案
- 五星知识达人网友:举杯邀酒敬孤独
- 2021-04-09 22:30
现在有这样的环境:
一台web Server,一个是纯JAVA APP 程序
数据库两台做成RAC的形式. web Server与APP 程序都通过oci(rac)的方式连接数据库.
出了这样的怪问题,webServer更新或是插图入一条数据,后面紧跟着的在APP中就查询不到,等到用工具查询就没有问题.
初步怀疑
1. RAC方式下面的数据库两个instance的同步没做好?
查询相关资料发现在与MAX_COMMIT_PROPAGATION_DELAY有关.
最大提交传播时延(MAX_COMMIT_PROPAGATION_DELAY,简称MCPD),在ORACLE RAC(或OPS)环境中才使用,表示在RAC系统中,一个instance系统提交产生的最新系统改变码(SCN),能够以多快的速度反应到另一个instance中.
举例说明,RAC系统,有A,B两个实例(instance),A、B本地系统改变码为SCN1,A更新数据DATA1提交, LGWR操作完成后,A本地系统改变码为SCN2,经过不大于MAX_COMMIT_PROPAGATION_DELAY时间后,B系统本地改变码才变为SCN2.
Global Cache ServICes 将刷新RAC中的SCN.不管SCN是否及时刷新,后续的数据查询都不会因此产生数据库错误.但,在此时间内,有可能查询结果不是最新数据,产生读一致性(read consistency)问题.
RAC环境中的所有实例,此参数值必须相同.
ORACLE8i后,建议常用的两个值是0和700(默认),其他数值皆不建议.其实,这两个数值就代表了RAC环境中,两种SCN 产生机制:
Lamport Scheme和 Broadcast on Commit scheme.
设置为默认值700,表示采用Lamport Scheme,SCN改变不会完全同步,同步将在 7秒钟内完成,而不是总等待7秒钟后才完成.如果系统比较空闲,同步可能在0.5秒(甚至更短时间)内完成;不管系统多繁忙,同步时间也不可能超过7秒.不难理解,采用此模式,整个RAC系统的运行效率较高.
设置为0,表示采用Broadcast on Commit scheme,SCN改变完全同步.每当commit时(即LGWR 写redo log时):
- LGWR发送消息更新全局SCN(global SCN),
- LGWR 发送消息给每个活动的实例更新其本地SCN(LOCal SCN).
有资料说,只要MCPD < 700,系统将采用Broadcast on Commit scheme.
Lamport Scheme能够适应绝大部分应用的要求,只有个别实时性特别高的业务,才需要Broadcast on Commit scheme.通过分析,不难理解,Broadcast on Commit scheme将需要更多的系统资源.
一台web Server,一个是纯JAVA APP 程序
数据库两台做成RAC的形式. web Server与APP 程序都通过oci(rac)的方式连接数据库.
出了这样的怪问题,webServer更新或是插图入一条数据,后面紧跟着的在APP中就查询不到,等到用工具查询就没有问题.
初步怀疑
1. RAC方式下面的数据库两个instance的同步没做好?
查询相关资料发现在与MAX_COMMIT_PROPAGATION_DELAY有关.
最大提交传播时延(MAX_COMMIT_PROPAGATION_DELAY,简称MCPD),在ORACLE RAC(或OPS)环境中才使用,表示在RAC系统中,一个instance系统提交产生的最新系统改变码(SCN),能够以多快的速度反应到另一个instance中.
举例说明,RAC系统,有A,B两个实例(instance),A、B本地系统改变码为SCN1,A更新数据DATA1提交, LGWR操作完成后,A本地系统改变码为SCN2,经过不大于MAX_COMMIT_PROPAGATION_DELAY时间后,B系统本地改变码才变为SCN2.
Global Cache ServICes 将刷新RAC中的SCN.不管SCN是否及时刷新,后续的数据查询都不会因此产生数据库错误.但,在此时间内,有可能查询结果不是最新数据,产生读一致性(read consistency)问题.
RAC环境中的所有实例,此参数值必须相同.
ORACLE8i后,建议常用的两个值是0和700(默认),其他数值皆不建议.其实,这两个数值就代表了RAC环境中,两种SCN 产生机制:
Lamport Scheme和 Broadcast on Commit scheme.
设置为默认值700,表示采用Lamport Scheme,SCN改变不会完全同步,同步将在 7秒钟内完成,而不是总等待7秒钟后才完成.如果系统比较空闲,同步可能在0.5秒(甚至更短时间)内完成;不管系统多繁忙,同步时间也不可能超过7秒.不难理解,采用此模式,整个RAC系统的运行效率较高.
设置为0,表示采用Broadcast on Commit scheme,SCN改变完全同步.每当commit时(即LGWR 写redo log时):
- LGWR发送消息更新全局SCN(global SCN),
- LGWR 发送消息给每个活动的实例更新其本地SCN(LOCal SCN).
有资料说,只要MCPD < 700,系统将采用Broadcast on Commit scheme.
Lamport Scheme能够适应绝大部分应用的要求,只有个别实时性特别高的业务,才需要Broadcast on Commit scheme.通过分析,不难理解,Broadcast on Commit scheme将需要更多的系统资源.
全部回答
- 1楼网友:刀戟声无边
- 2021-04-09 23:21
more than one instance to access one(only one) database,as your question,database synchronizatio itself??
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯