通知

luolovegui 2007-10-18 11:50:35
我这里装了一个linux版本的oracle,其中一个表A要与另外一个oracle的一个表B同步,由于特殊原因,不可以使用,也不可能使用oracle提供的同步服务,请不要问我原因。


所以我想写一个中间层程序,时刻监控表A是否有更新。这样时刻监控表A有很多麻烦的地方,浪费资源,因为表A也不算小。因此我打算为表A写一些触发器,这样一旦表A有改动我就知道了,现在问题是怎么在触发器中可以让我的程序知道表A有改动?

我想过在触发器中通过utl_file,text_io输出一个标志文件,但是我又不知道写linux程序,只知道写windows程序。不知道上面的utl_file,text_io能不能输出文件到我当前程序的机子上面。

或者再建一个表B,程序监控表B。当A有改动时,在触发器内中,将表A有改动的标识写入表B中。这样表B也不大。

或者不知道oracle本身就有没有通知我程序的方法,比如一些函数命令等。关键是可以让程序第一时间得到表A有改动的通知。

我的程序应该是ado直接连接oracle。

请大家各抒己见,出谋划策,谢谢。
...全文
155 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
guo0399 2007-11-01
  • 打赏
  • 举报
回复
数据库连接在网络不稳定情况比较容易让同步机制失效,我觉得“或者再建一个表B,程序监控表B。当A有改动时,在触发器内中,将表A有改动的标识写入表B中。这样表B也不大。”应该可以。

因为LZ有说不能用数据库同步,如果我做我会用远程数据库连接+Oracle JOB也和LZ的思路一样,如果A表比较大,就创建一张状态表,以达到优化性能的目的
luolovegui 2007-10-25
  • 打赏
  • 举报
回复
确实是要做一个中间层,不过大家好像也没有好点子哦.请大家继续关注.
liuzi123 2007-10-22
  • 打赏
  • 举报
回复
关注
Croatia 2007-10-22
  • 打赏
  • 举报
回复
不能用同步,是不是说,数据库连接也不可以呢?可以的话,直接使用数据库连接是最快的了。

看LZ想自己做一个中间层,其实很多方法可以用。
假如使用utl_file的话,可以建立linux系统的samba系统。用来连接windows系统。
除了utl_file,还有smtp,tcp的包等等。
都可以用来实现LZ想做的事情。
或者使用系统监察,你可以检查系统的监察纪录。也可以。
但是,真的需要用到吗?

决定写触发器的话,数据真的很多的话,尽量不要用得太复杂了。万一网络呀,或者其他问题出现了。
xiaoku 2007-10-21
  • 打赏
  • 举报
回复
直接在a表写个触发器然后把数据提交到b表不可以么?
47522341 2007-10-21
  • 打赏
  • 举报
回复
或者再建一个表B,程序监控表B。当A有改动时,在触发器内中,将表A有改动的标识写入表B中。这样表B也不大。
-------------------------------
这种方式好像比较容易实现一些。
adaizi1980 2007-10-21
  • 打赏
  • 举报
回复
事情这样做的话就做反了,应该是你的前台程序做对A表的操作时在同一个TRANSACTION中往B表中写入,两个操作一起提交或回滚,这样可以保证数据完整;
也可以直接在数据库写trigger,只要A表有操作就直接同步修改B表,这样做也可以保证数据完整性,效率差不多;
如果同步必须要人工干预(如生产中A流程完成后及时通知B流程操作员开始),那么就在前台或应用服务程序中通过消息机制直接实现,这样还可以减轻数据库服务器的负担
luolovegui 2007-10-18
  • 打赏
  • 举报
回复
哦,写错了一点点,后面的表B是表A在同一个oracle库中,与最上面的表B不为同一个表.请大家别误解.

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧