eaglet

本博专注于基于微软技术的搜索相关技术
随笔 - 189, 文章 - 0, 评论 - 3725, 阅读 - 147万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   eaglet  阅读(2734)  评论(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 技术详解

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示