![Oracle Streams 如何在分发过程中阻止代码的执行?](https://linux22.com/image/594771/Oracle%20Streams%20%E5%A6%82%E4%BD%95%E5%9C%A8%E5%88%86%E5%8F%91%E8%BF%87%E7%A8%8B%E4%B8%AD%E9%98%BB%E6%AD%A2%E4%BB%A3%E7%A0%81%E7%9A%84%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
我思考了 Oracle Streams 并遇到了一个问题。
我编程的数据库使用了 Oracle Streams,但我不是 DBA。因此,我不熟悉数据库的配置。我只是对 Streams 的实际功能有一个“简单”的了解。
在我看来,它可以保持多个分布式数据库之间的数据一致性。现在我要问的是:
假设我们有两个通过 Oracle Streams 匹配的数据库 A 和 B。它们都是基于相同的架构、表和触发器构建的。如果在数据库 A 中的表 T1 上插入了数据,则数据将通过 Streams 分发到数据库 B 中的表 T1。
但是,如果表 T1 有一个插入触发器 TR1,情况会怎样?在 T1 中插入时,它肯定会在数据库 A 上执行,但是如果流将数据从 A 分发到 B,数据库 B 上会发生什么?触发器会执行吗?我想不会,因为这可能带来很多麻烦。
Streams 是否会在通过其自身分发数据期间阻止任何代码的执行?
答案1
会发生什么取决于触发器是否设置为一次点火。
如果触发器设置为触发一次,那么更改将应用于数据库 A,并且 Streams 会忠实地将它们复制到数据库 B。这听起来就是您想要的。
否则,当 Streams 复制导致触发器在数据库 A 上触发的更改后,触发器将在数据库 B 上再次触发。
哪种方法适合于特定情况取决于触发器的作用。
看Oracle 的文档以获得更完整的解释和另一个例子。