暂无图片
请问,ORACLE ADG 的 redo apply 如何理解?
我来答
分享
梦灵
2021-03-22
请问,ORACLE ADG 的 redo apply 如何理解?

ORACLE ADG 的 redo apply 如何理解?

我来答
添加附件
收藏
分享
问题补充
8条回答
默认
最新
JiekeXu
暂无图片

理解一下 DG 的原理就差不多了。

f.png

暂无图片 评论
暂无图片 有用 0
打赏 0
梦灵

谢谢,不过不行,得希望知道具体的实现逻辑。

暂无图片 评论
暂无图片 有用 0
打赏 0
你好我是李白

下面这个不知道符合不符合你想了解的:

(1)主库事务
HR@honor1 > insert into test_roll values(2,‘test1’);
HR@honor1 > commit;

(2)主库redo record

下面redo record格式会受Oracle版本,以及是否使用IMU有所不同。

下面可通过alter system dump logfile ‘redo log’;获取

REDO RECORD - Thread:1 RBA: 0x000716.0000003e.0078 LEN: 0x01c4 VLD: 0x01
SCN: 0x0000.01aac748 SUBSCN:  2 03/23/2021 09:22:35
CHANGE #1 TYP:0 CLS:33 AFN:3 DBA:0x00c00100 OBJ:4294967295 SCN:0x0000.01aac58f SEQ:1 OP:5.2 ENC:0 RBL:0
ktudh redo: slt: 0x000f sqn: 0x00003d42 flg: 0x0012 siz: 136 fbi: 0
            uba: 0x00c0034b.0ce5.13    pxid:  0x0000.000.00000000
CHANGE #2 TYP:0 CLS:34 AFN:3 DBA:0x00c0034b OBJ:4294967295 SCN:0x0000.01aac58e SEQ:5 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 136 spc: 4086 flg: 0x0012 seq: 0x0ce5 rec: 0x13
            xid:  0x0009.00f.00003d42  
ktubl redo: slt: 15 rci: 0 opc: 11.1 [objn: 101468 objd: 101468 tsn: 4]
Undo type:  Regular undo        Begin trans    Last buffer split:  No 
Temp Object:  No 
Tablespace Undo:  No 
             0x00000000  prev ctl uba: 0x00c0034b.0ce5.0e 
prev ctl max cmt scn:  0x0000.01aabcb6  prev tx cmt scn:  0x0000.01aabd60 
txn start scn:  0xffff.ffffffff  logon user: 84  prev brb: 12583754  prev bcl: 0 BuExt idx: 0 flg2: 0
KDO undo record:
KTB Redo 
op: 0x03  ver: 0x01  
compat bit: 4 (post-11) padding: 1
op: Z
KDO Op code: DRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x0100141e  hdba: 0x0100141a
itli: 2  ispac: 0  maxfr: 4858
tabn: 0 slot: 1(0x1)
CHANGE #3 TYP:2 CLS:1 AFN:4 DBA:0x0100141e OBJ:101468 SCN:0x0000.01aac744 SEQ:1 OP:11.2 ENC:0 RBL:0
KTB Redo 
op: 0x01  ver: 0x01  
compat bit: 4 (post-11) padding: 1
op: F  xid:  0x0009.00f.00003d42    uba: 0x00c0034b.0ce5.13
KDO Op code: IRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x0100141e  hdba: 0x0100141a
itli: 2  ispac: 0  maxfr: 4858
tabn: 0 slot: 1(0x1) size/delt: 12
fb: --H-FL-- lb: 0x2  cc: 2
null: --
col  0: [ 2]  c1 04
col  1: [ 5]  74 65 73 74 31
CHANGE #4 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ:0 OP:5.20 ENC:0
session number   = 24
serial  number   = 113
transaction name = 
version 186647552
audit sessionid 14780946
Client Id = 
login   username = HR

REDO RECORD - Thread:1 RBA: 0x000716.0000003a.0010 LEN: 0x00d0 VLD: 0x05
SCN: 0x0000.01aac744 SUBSCN:  1 03/23/2021 09:22:31
(LWN RBA: 0x000716.0000003a.0010 LEN: 0001 NST: 0001 SCN: 0x0000.01aac743)
CHANGE #1 TYP:0 CLS:27 AFN:3 DBA:0x00c000d0 OBJ:4294967295 SCN:0x0000.01aac742 SEQ:1 OP:5.4 ENC:0 RBL:0
ktucm redo: slt: 0x0018 sqn: 0x00004046 srt: 0 sta: 9 flg: 0x2 ktucf redo: uba: 0x00c01ac1.0c91.07 ext: 3 spc: 6536 fbi: 0 
CHANGE #2 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ:0 OP:24.4 ENC:0
复制

(3)redo内容解析对应事务操作步骤

第一个redo record:
CHANGE # 1   OP:5.2    --Update rollback segment header - KTURDH 事务开始
CHANGE # 2   OP:5.1    --Undo block or undo segment header - KTURDB。
CHANGE # 3   OP:11.2   --Insert Row Piece
CHANGE # 4   OP:5.20   --Transaction continue audit log record

第二个redo record:
CHANGE #1   OP:5.4     -- commit transaction

复制

上图OP代码可以参考:

(4) 备库应用大致过程
–不同模式,不同设置会有所不同

  1. 主库写redo record的同时,如果备库有standby log,则RFS会写standby redo log。
  2. 如果备库开启了实时应用,则MRP进程会同时读redo log进行一条一条redo record应用。
  3. 只需要按照redo record更新相应数据块即可(可能Oracle内部会对这个过程有自己优化吧)。

(5)传输跟应用过程上图JiekeXu大佬已经给出图,可参照图

再详细的内部原理就不知道啦。

暂无图片 评论
暂无图片 有用 0
打赏 0
梦灵

谢谢。其实里面一直理解不到的就是mrp通过redo record怎么去直接修改块,因为sql语句执行容易理解,但是用redo record去直接修改块就理解不到

谢谢

暂无图片 评论
暂无图片 有用 0
打赏 0
你好我是李白

里面有dba定位数据块,有改变向量改变数据,物理备库嘛,dba源端是这个块,目标端还是,按照信息改就可以啦,当然,oracle肯定对这个过程会有自己优化,大致应该是这样。

暂无图片 评论
暂无图片 有用 0
打赏 0
梦灵

谢谢,具体是如何去修改块的呢

暂无图片 评论
暂无图片 有用 0
打赏 0
你好我是李白

定位到块,定位到row piece,根据redo record里记录的更新后的值,往里写呗,插入就写进去,删除就标记,update就用新值替代旧值,再深入就回答不了了,希望有大佬来回答你。

你要问我计算机如何翻译每条指令,我估计得问源码跟编译器了,哈哈

暂无图片 评论
暂无图片 有用 0
打赏 0
梦灵

谢谢,感谢感谢,又多明白了一层。虽然明白的不彻底

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


请输入正文
提交
相关推荐
Oracle数据库更新或者删除表时必须指定where子句吗?
回答 2
已采纳
如果省略where子句,则update或delete将被应用到表中所有的行。因此,除非确实打算更新或者删除所有记录,否则要注意使用不带where子句的update或delete语句。建议在对表进行更新
参数绑定无效: system.DateTime 参数绑定无效: system.Int64
回答 4
已采纳
解决方法:cast(字段aschar)可以转换的类型是有限制的。这个类型可以是以下值其中的一个:二进制,同带binary前缀的效果:BINARY字符型,可带参数:CHAR()日期:DATE时间:TIM
跪求oracle12c 12.1补丁包
回答 2
墨天轮资源里面有,可以下载:OracleDatabase12.1.0.2forLinuxX8664p21419221。https://www.modb.pro/download/24004
oracle重建监听后不能动态注册
回答 1
已采纳
好像是Oracle实例动态注册动作是在1521端口的监听程序上进行的,其他端口不会自动进行动态注册,需要通过修改LOCALLISTENER参数来实现非默认端口的动态注册。LOCALLISTENER默认
各位大师,11.2.0.4 rac shutdown 数据库一直卡在这,有解决方法吗? SMON: disabling tx recovery
回答 1
如果alter日志中的报错不详细,可以通过trace看下详细信息:altersessionsetevents‘10046tracenamecontextforever,level12’;shutdow
集群磁盘组掉线
回答 4
这个磁盘组掉线了然后手都挂载就挂载上了,而且观察几天都没在复发,那这样的情况还会再次出现吗?目前还是没有搞清楚存储哪里出了问题,检查存储没有任何告警信息,而且磁盘组掉线还是集群的一个节点,另一个节点没
AWR分析报告问题求助:帮忙看下这个需要修改哪些
回答 1
如果这是故障时段的awr,那需要比较一下正常时段的AWR,找到故障点;  如果这个awr就是正常的awr, 那么这个系统的性能问题很严重, 需要做一次大的优化了
ORA-1466
回答 10
看下数据库种有没有TIMESTAMPWITHLOCALTIMEZONE类型的字段,如果有需要删除。然后停应用和job,修改dbtimezone后重启。对数据和系统没什么影响,可以在测试环境测试下。
执行oradim shutdown 出现ora-01017 用户名密码不正确的问题
回答 2
已采纳
oradim关闭服务和例程:SHUTDOWNSIDsid[USRPWD口令][SHUTTYPEsrvc|inst|srvc,inst][SHUTMODEa|i|n]你这个报错就是密码不正确嘛,需要跟上
oracle 中 普通用户的最大连接数是固定的吗?
回答 2
已采纳
不是固定的,会有2个地方有限制,一个是参数session数目对实例整体会话有个限制还有profile中对单个用户会有限制,profile相关参数解释如下:1.Failedloginattempts:指