转自:
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除外)