HubbleDotNet自动与Oracle中的数据同步解析
近一段时间在网络中遇到了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除外)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述