Logical Standby中为什么要求表中数据的唯一性约束

本文介绍了Oracle逻辑Standby数据库如何通过SQL应用实现与Primary数据库的同步,特别是针对update和delete操作如何确保能够准确地定位到待更新的记录。文章详细解释了Oracle如何利用主键、唯一索引/约束及补充日志来确保行的唯一标识。

          逻辑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/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值