需要一个持续监听Oracle DB的程序,如果有任何DML,它会调用另一个程序吗?

时间:2013-07-19 20:57:16

标签: java oracle jdbc wrapper

我有一个包含大量表的Oracle数据库...如何编写一些可以监听Oracle数据库的内容,如果对数据库进行了任何更改,它会调用另一个执行某些处理的程序

  1. 这将是asnync
  2. 如果发生任何类型的DML,我只需要触发一个java程序..我不要t want details about which table or what rows or new/old values ... If there is a DML on any table in a DB call a java program that

3 个答案:

答案 0 :(得分:0)

http://docs.oracle.com/cd/B14117_01/win.101/b10118/o4o00118.htm OracleDB有一些事件。试着用它们;例如,当db更新时 - 并调用另一个java程序: Runtime.getRuntime()。exec(/ 这里的参数 /);

答案 1 :(得分:0)

我担心你在这里为失败做好准备。我建议采取相关但略有不同的行动方案。

不要在每次数据更改时触发处理,而是考虑使用CronQuartz等内容每隔X分钟/小时运行一次。

如果您担心在未进行任何更改时运行它,您可以向表中添加触发器以更新“上次更新”表,如果自上次运行后未进行任何更改,则可以中止。 / p>

这避免了您对“更新处理器”的最大担忧,即如果有更新,您会做什么(触发流程),以及正在运行另一次更新发生。你引发了另一个过程吗?怎么会发生冲突?我认为你会发现在更新和同步过程之间稍微延迟会更好。

答案 2 :(得分:0)

对于一个问题,这是一个非常高的命令。

对于初学者,您将需要一种方法来检测是否发生了DML操作(INSERT,UPDATE,DELETE)。

对于各个表的审核,我们可以使用TRIGGERS。

CREATE TRIGGER [BEFORE|AFTER] [INSERT][UPDATE][DELETE] ... [FOR EACH ROW]

规范性操作是在“审核日志”表中记录有关信息的信息(以后需要的任何内容)。您必须决定您需要执行的操作是否是同步的(应该在DML完成之前发生),或者这些操作是否可以是异步的(可以在DML完成后的任何时间发生)。

通常,同步处理在PL / SQL中完成,但Oracle确实提供了一种调用外部过程(EXTPROC)的机制,尽管您不希望从TRIGGER那样做。

Oracle还提供“细粒度审计”。 FGA收集的信息不是“逐行”级别,就像我们可以通过FOR EACH ROW触发器一样。

所以,这实际上取决于你想要达到的目标。

下一步是弄清楚如何将这些信息提供给外部流程。该进程是否会定期轮询表(或表集),您是要使用AQ高级队列还是其他一些队列机制。