eaglet

本博专注于基于微软技术的搜索相关技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

HubbleDotNet自动与Oracle中的数据同步解析

Posted on 2010-09-21 09:21  eaglet  阅读(2731)  评论(4编辑  收藏  举报

转自:

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 技术详解