逻辑standby与primary的数据库同步是通过sql应用实现,SQL应用转换的SQL语句在执行时,对于insert还好,对于update,delete操作则必须能够唯一定位到数据库待更新的那条记录。 如果primary库中表设置不当,可能就无法确认唯一条件。 逻辑standby 逻辑上与primary数据库相同,物理上可能与primary数据库存在很大差异(比如rowid, 数据块number,文件占用空间,大小 等), 逻辑standby的物理结构与primary是不相同的(即使初始逻辑standby是通过primary的备份创建),因此想通过rowid 更新显然是不行的,不能再将rowid做为唯一条件 。
如何确保primary库中各表的行可被唯一标识
Oracle 通过主键、唯一索引/约束补充日志(supplemental logging)来确定待更新逻辑standby库中的行。当数据库启用了补充日志(supplemental logging),每一条update语句写redo的时候会附加列值唯一信息,比如:
v 如果表定义了主键,则主键值会随同被更新列一起做为update语句的一部分,以便执行时区别哪些列应该被更新。
v 如果没有主键,则非空的唯一索引/约束会随同被更新列做为update语句的一部分,以便执行时区分哪些列应该被更新,如果该表有多个唯一索引/约束,则oracle自动选择最短的那个。
v 如果表即无主键,也没有定义唯一索引/约束,所有可定长度的列连同被更新列作为update语句的一部分。更明确的话,可定长度的列是指那些除:long,lob,long raw,object type,collection类型外的列。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-614710/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-614710/
本文介绍了Oracle逻辑Standby数据库如何通过SQL应用实现与Primary数据库的同步,特别是针对update和delete操作如何确保能够准确地定位到待更新的记录。文章详细解释了Oracle如何利用主键、唯一索引/约束及补充日志来确保行的唯一标识。
859

被折叠的 条评论
为什么被折叠?



