加载中…
个人资料
sqlora
sqlora
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,500
  • 关注人气:8
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于ogg目标端没有主键的同步失败update

(2015-07-14 09:07:02)
分类: ogg

-- Add/modify columns 

alter table EQUIP_BUILDING add largeareaid INTEGER;

-- Add comments to the columns 

comment on column EQUIP_BUILDING.largeareaid

  is '大区域ID';

 

EQUIP_BUILDING源端增加字段和update后。

源端:

GGSCI (zydb) 1> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     ESOURCE     00:00:00      00:00:00   
EXTRACT     RUNNING     P117        00:00:00      00:00:00   
EXTRACT     RUNNING     P98         00:00:00      00:00:03   
EXTRACT     RUNNING     PSOURCE     00:00:00      00:00:03   

新增字段largeareaid,所有目标端都自动创建。

其中p98目标数据正常同步,P117和PSOURCE目标端数据没有同步。

 

在目标端通过view report 复制进程,检查发现不同步的目标端没有通过主键同步,再检查,发现不同步的目标端缺少主键,而可以同步的P98是有主键的。

之所以没有主键是因为之前目标端有临时的备份表占用了主键名称,由于部署人员没有检查初始化后'EQUIP_BUILDING'表的主键是否创建成功,导致后续的问题。

询问开发关于EQUIP_BUILDINGBAK0530表是否有用,没用后,drop掉即可,并确认主键约束名称也都删除。

然后在正确的目标表添加主键(从源库提取即可pl/sql)

完成后,重启目标端复制进程。

由于是update操作,可以再次在源端执行,观察目标端是否可以同步。最后检查同步正常。

 

SQL>  select index_name from user_indexes where table_name='EQUIP_BUILDING';

INDEX_NAME
------------------------------
SYS_IL0000096505C00016$$
SYS_IL0000096505C00017$$

SQL> select count(*) from equip_building where largeareaid is not null ;

  COUNT(*)
----------
         0

SQL> select count(*) from equip_building where largeareaid is not null ;

  COUNT(*)
----------
         0

SQL> /

  COUNT(*)
----------
         0

SQL> select constraint_name,table_name from dba_CONS_COLUMNS where constraint_na
me='EQUIP_BUILDING_GMIDX';

CONSTRAINT_NAME                TABLE_NAME
------------------------------ ------------------------------
EQUIP_BUILDING_GMIDX           EQUIP_BUILDINGBAK0530

SQL> drop table EQUIP_BUILDINGB0530 purge;

表已删除。

SQL> alter table EQUIP_BUILDING
    add constraint EQUIP_BUILDING_GMIDX primary key (ID)
    using index
    tablespace USERS
    pctfree 10
    initrans 2
    maxtrans 255
    storage
    (
 10      initial 128K
 11      minextents 1
 12      maxextents unlimited
 13    );
  add constraint EQUIP_BUILDING_GMIDX primary key (ID)
                 *
第 2 行出现错误:
ORA-02264: 名称已被一现有约束条件占用


SQL> select constraint_name,table_name from dba_CONS_COLUMNS where constraint_na
me='EQUIP_BUILDING_GMIDX';

CONSTRAINT_NAME                TABLE_NAME
------------------------------ ------------------------------
EQUIP_BUILDING_GMIDX           EQUIP_BUILDINGBAK0530

SQL> select count(*) from equip_building where largeareaid is not null ;

  COUNT(*)
----------
         0

SQL> drop table EQUIP_BUILDINGB0530 purge;
drop table EQUIP_BUILDINGB0530 purge
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> select constraint_name,table_name from dba_CONS_COLUMNS where constraint_na
me='EQUIP_BUILDING_GMIDX';

CONSTRAINT_NAME                TABLE_NAME
------------------------------ ------------------------------
EQUIP_BUILDING_GMIDX           EQUIP_BUILDINGBAK0530

SQL> drop constraint EQUIP_BUILDING_GMIDX;
drop constraint EQUIP_BUILDING_GMIDX
     *
第 1 行出现错误:
ORA-00950: 无效 DROP 选项


SQL> alter table EQUIP_BUILDINGBAK0530 drop constraint EQUIP_BUILDING_GMIDX;

表已更改。

SQL> select constraint_name,table_name from dba_CONS_COLUMNS where constraint_na
me='EQUIP_BUILDING_GMIDX';

未选定行

SQL> alter table EQUIP_BUILDINGBAK0530 drop constraint EQUIP_BUILDING_GMIDX;
alter table EQUIP_BUILDINGBAK0530 drop constraint EQUIP_BUILDING_GMIDX
                                                  *
第 1 行出现错误:
ORA-02443: 无法删除约束条件 - 不存在的约束条件


SQL> alter table EQUIP_BUILDING
    add constraint EQUIP_BUILDING_GMIDX primary key (ID)
    using index
    tablespace USERS
    pctfree 10
    initrans 2
    maxtrans 255
    storage
    (
 10      initial 128K
 11      minextents 1
 12      maxextents unlimited
 13    );

表已更改。
SQL> select index_name from user_indexes where table_name='EQUIP_BUILDING';

INDEX_NAME
------------------------------
EQUIP_BUILDING_GMIDX
SYS_IL0000096505C00016$$
SYS_IL0000096505C00017$$
SQL> select count(*) from equip_building where largeareaid is not null ;

  COUNT(*)
----------
         0

SQL> /

  COUNT(*)
----------
         0

SQL> /

  COUNT(*)
----------
         0

SQL> /

  COUNT(*)
----------
         0

SQL> /

  COUNT(*)
----------
         0

重新启动复制进程,之前的事务被取消。
让开发人员在源端重新执行update操作后,可以正常利用主键同步。

SQL> select count(*) from equip_building where largeareaid is not null ;

  COUNT(*)
----------
     29152

SQL>


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有