ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Logical Standby中为什么要求表中数据的唯一性约束

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

原创 Linux操作系统 作者:tolywang 时间:2009-09-11 17:09:36 0 删除 编辑

          逻辑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博客 ” ,链接:https://blog.itpub.net/35489/viewspace-614710/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    14696200