请问,ORACLE ADG 的 redo apply 如何理解?
ORACLE ADG 的 redo apply 如何理解?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
8条回答
默认
最新
理解一下 DG 的原理就差不多了。

评论
有用 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) 备库应用大致过程
–不同模式,不同设置会有所不同
- 主库写redo record的同时,如果备库有standby log,则RFS会写standby redo log。
- 如果备库开启了实时应用,则MRP进程会同时读redo log进行一条一条redo record应用。
- 只需要按照redo record更新相应数据块即可(可能Oracle内部会对这个过程有自己优化吧)。
(5)传输跟应用过程上图JiekeXu大佬已经给出图,可参照图
再详细的内部原理就不知道啦。
评论
有用 0谢谢。其实里面一直理解不到的就是mrp通过redo record怎么去直接修改块,因为sql语句执行容易理解,但是用redo record去直接修改块就理解不到
谢谢
评论
有用 0里面有dba定位数据块,有改变向量改变数据,物理备库嘛,dba源端是这个块,目标端还是,按照信息改就可以啦,当然,oracle肯定对这个过程会有自己优化,大致应该是这样。
评论
有用 0定位到块,定位到row piece,根据redo record里记录的更新后的值,往里写呗,插入就写进去,删除就标记,update就用新值替代旧值,再深入就回答不了了,希望有大佬来回答你。
你要问我计算机如何翻译每条指令,我估计得问源码跟编译器了,哈哈
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏


