暂无图片
Oracle RAC SCN传播方式(Broadcast-On-Commit)
我来答
分享
郎啊狼
2019-08-21
Oracle RAC SCN传播方式(Broadcast-On-Commit)

环境:Oracle 12.2.0 RAC三节点,运行在VMware ESX虚拟平台,三个节点分别在三个物理机上

问题:开发有一个session循环插入差不多15万数据,每执行一条都提交,另外还有一个Daemon session不断检查插入的记录数,当检查完成时通知另外一个节点的session处理一个insert select语句,查询循环插入的那张表,会出现最后几条丢失的现象。

问题分析:研究RAC Commit的过程中发现下面这个BOC机制的介绍:

从Oracle 10gR2开始默认使用immediate commit propagation (BOC),即一个节点上的commit SCN 立刻同步/传播到所有节点(受隐含参数_immediate_commit_propagation控制,默认为true)。

immediate commit propagation (BOC)的原理如下:

1. user session 执行提交(commit),user session会通知LGWR进程将redo buffer中的信息写入到redo log file。

2. LGWR进程收到user session通知后,将redo buffer中的信息写入redo log file,同时LGWR进程 将COMMIT SCN 同步/传播给远程的数据库实例的LMS进程。

3. 远程数据库实例的LMS将commit SCN同步到本地SCN,然后通知commit实例的LMS进程,表示SCN 同步已经完成。

4. 当commit 实例的LMS进程接收到所有远程数据库实例的LMS进程的通知后,commit 实例的LMS进程再通知本地的LGWR 所有节点SCN同步已经完成。

5. LGWR进程在完成了IO 操作和LMS进程通知后,LGWR进程通知user session commit 成功。user session在没有收到LGWR进程通知前,一直处于等待log file sync。

首先想确认一下这个过程是否正确?假设正确的话,那么在第1步执行完毕后数据已经提交,如果第3步commit实例的LMS进程没有收到远程数据库实例的LMS进程通知,这中间是不是有一个时间差,导致在commit实例查询出来的数据和远程实例查出来的不一致呢?

谢谢解惑!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
郎啊狼

情况补充:RAC三节点的private interconnect、VIP、public IP走的都是物理机的同一个物理网线(两个万兆网卡Bind),不知道对私网通信有没有影响?

暂无图片 评论
暂无图片 有用 0
打赏 0
范计杰

有几个疑问
1、查询循环插入的那张表,会出现最后几条丢失的现象
这个丢失是怎么确定的呢?

2、另外还有一个Daemon session不断检查插入的记录数,当检查完成时通知另外一个节点的session处理一个insert select语句
这个是怎么通知的呢?

insert select 这个sql怎么写的?
为什么节点1上的session检查记录数,再通知另一个节点的session做insert select,这么做的原因是什么呢?

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
同一台服务器安装了两个oracle,ORACLE_HOME不同,两个实例的端口号可以用同一个吗?
回答 2
你说的端口号是监听吗?可以共用一个监听
Oracle ogg 报错: Failed to validate table FWSC.
回答 1
先等等看,不行的话把表的trandata这些先删了重新配一下
ORACLE BASICFILE LOB字段空间回收SHRINK SPACE的疑惑
回答 1
可以参考这篇文章:https://oraclebase.com/articles/misc/altertableshrinkspaceonline1、根据里面的实验的情况,对于lob字段在shrink
Oracle 数据库中如果插入是数据是10g,有2个数据文件,文件A剩余6g,文件B剩余6g,两个文件都可以自动扩展,但是物理磁盘不够了无法扩展。这种情况插入数据会报错吗?
回答 1
数据文件没写满就不会报错。只有数据文件被用完了需要扩展,而此时物理磁盘不够了无法扩展,才会报错嘛。
东方瑞通Oracle OCP培训咋样?
回答 2
机构是一方面,要自己主动学习,总结和思考。培训当前推荐线上的,恩墨很好,因为相关讲师是有工作和实战经验的。
标注V$RMAN_BACKUP_JOB_DETAILS里的command_id
回答 7
已采纳
!/bin/bashdt里面不能有下划线:“”,要不报错,应该需要转义dtdate%Y%m%d$ORACLEHOME/bin/rmanusing$dt<<EOFconnecttarget/
alterlog报错
回答 4
ifconfiglomtu16384我这个lo的值是65536了还需要修改吗
Oracle数据库TABLE ACCESS BY INDEX ROWID前面有“*”号怎么办?
回答 1
已采纳
TABLEACCESSBYINDEXROWID前面有“”号表示回表再过滤。回表再过滤说明数据没有在索引中过滤干净。当TABLEACCESSBYINDEXROWID前面有“”号时,可以将“”号下面的过滤
请问各位老大,在线重定义,有什么限制?那些场景不能使用? 查了查有的说物化视图不能使用。有没有一个官方的文档,说明在线重定义存在不能使用的情况。
回答 1
已采纳
之前有人问过这个问题,只可惜问答帖子不能收藏,不好找到那个帖子了,不过答案就在官方文档上,11g的官方文档为https://docs.oracle.com/cd/E1188201/server.112
请教个问题。 tns配置里的service_name,这玩意是跟哪里对应的。一直想不通
回答 3
一个数据库和相应的一些名字oracle相关名字dbnamedbuniquenameglobalnameinstancenameservicenameDBNAME:建立时候指定,记录在控制文件中,不容易