zoukankan      html  css  js  c++  java
  • HubbleDotNet自动与Oracle中的数据同步解析

    转自:

    http://www.cnblogs.com/zhaoDotNet/archive/2010/09/17/1829509.html

    作者:ZhaoDotNet

    感谢 ZhaoDotNet 无私分享他的经验。 

     

    近一段时间在网络中遇到了HubbleDotNet 的创始人,应他的请求,第一次在cnblog中写博客,先将我昨天学到的贴上来,希望能够了帮到更多使用HubbleDotNet的人们;

      昨天在创始人的帮助下,我完成了Hubble同Oracle之间数据的同步问题,写这篇文章,主要是完善HubbleDotNet 的创始人没有写对Oracle数据库实时同步的文章,现诚心奉上;

      首先,在Hubble中创建与oracle对应的表,

    下一步,点击Next按钮

    点击Next按钮

    这里说明一下,ID Field写的一定是唯一标识的主键,并且必须是整型(oracle中是NUMBER型)的,我定义的是BUFFERID, 因为Oracle中没有自增长功能,所有请朋友们自己写个触发器或者别的方法让它自增,实现了就可以;还有一点就是如上图我的主键DataType必须选择为Int,Analyzer必须为Untokenized,至此即完成了创建Hubble表的过程,如果想实现数据的同步,接着往下看;

      为了让数据库中的数据与Hubble数据同步,我们先在Oracle中创建一个辅助触发表,主要的功能是记录T_Goods表中哪些字段的内容发生了变化的,将改变的字段记录到辅助触发表中,代码如下:

    -- Create table
    create table HBTRIGGER_VIEW_6
    (
      SERIAL NUMBER(10) not null,
      ID     NUMBER(10) not null,
      OPR    VARCHAR2(20),
      FIELDS VARCHAR2(4000)
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate primary, unique and foreign key constraints
    alter table HBTRIGGER_VIEW_6
      add constraint PK_SERIAL primary key (SERIAL)
      using index
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );

    说明:表中的SERIAL为主键,必须是自增的整形字段;ID 不可定义为别的名称(经验);

    对于如何将改变的内容字段记录下来,我写了一个触发器,代码如下:

    create or replace trigger HBTrigger_T_6_Update
    after  update on FOR EACH ROW
    DECLARE
    updateFields VARCHAR2(4000) :='';
    begin
    if :new.GOODS_NAME !=:old.GOODS_NAME then
    updateFields:='GOODS_NAME,';
    END IF;

    if :new.GOODS_BRAND !=:old.GOODS_BRAND then
    updateFields:=updateFields||'GOODS_BRAND,';
    END IF;
    .
    .//中间需要的字段自己加吧
    .
    if updateFields is not null then
      insert into HBTRIGGER_VIEW_6(ID,Opr,Fields) values(:new.BUFFERID,'Update', updateFields) ;
    end if;
    end HBTrigger_T_6_Update;

    这时修改了T_GOODS中的字段后,辅助触发表是就发生了如下变化:

    这些工作完成后,我们转到Hubble,

    现在我们在刚才建好的T_Goods表上右击,选择Table Info,打开Attributes选项框,将TableSynchronization改为True,TriggerTableName填写我们刚创建的辅助触发表名,点击Set完成;

    现在我们进行同步操作,在刚才建好的T_Goods表上右击,选择Synchronize Table,点击Start,结果如下图,

    现在你查询一下你的Hubble记录,是不是跟Oracle表中的记录一样呢,当然这些工作我们也可以在程序中完成,具体的怎么写,请查看Hubble创始人的博客http://www.cnblogs.com/eaglet/archive/2010/08/25/1808143.html

    如果你看完这篇文章觉得写触发器麻烦,在此,也有专门为懒人准备的简单的操作方法,只需要两步:

    一、在刚才建好的T_Goods表上右击,选择Truncate Table;

    二、在刚才建好的T_Goods表上右击,选择Synchronize Table,点击Start;

    这样操作只是费点时间,不过对于懒人来说,最不珍惜的就是时间,也无所谓了;

    如果你在中间的某些操作出现问题,请留言。也可下载最新的Hubble版本,随时更新;

    注:如转载请标明出处(eaglet除外)

    返回 Hubble.net 技术详解

  • 相关阅读:
    Mycat 安全设置
    基于 HA 机制的 Mycat 高可用
    mycat中间件进行MySQL数据表的水平拆分
    mycat中间件进行MySQL数据库的垂直拆分
    mycat中间件进行MySQL的数据读写分离
    dubbo环境搭建--Windows
    分布式应用架构的发展演变RPC
    Java新特性--方法引用
    Java新特性-stream流
    Java新特性-四大函数式接口
  • 原文地址:https://www.cnblogs.com/eaglet/p/1832263.html
Copyright © 2011-2022 走看看