【问题标题】:oracle synchronize 2 tablesoracle同步2张表
【发布时间】:2017-12-15 12:43:47
【问题描述】:

我有以下场景,需要在ORACLE中解决:

表 A 位于数据库服务器上 表 B 在不同的服务器上

表 A 将填充数据。 每当将某些内容插入表 A 时,我都想将其复制到表 B。 表 B 几乎有类似的列,但有时我只想得到 来自tableA 2列的内容并将其连接并保存到 表 B。

我对ORACLE不是很熟悉,但是在GOOGLE上研究过 有人说你可以用 TRIGGERS 或 VIEWS 来做,你会怎么做?

所以一般来说,有一个表格将被填充及其内容 应该复制到不同的表。

这是我目前提出的解决方案

create public database link
  other_db
connect to
  user
identified by
  pw
using 'tns-entry';

CREATE TRIGGER modify_remote_my_table 
  AFTER INSERT ON my_table 
  BEGIN INSERT INTO ....?
  END; 
/

如何选择最新插入的行?

【问题讨论】:

  • 您还应该告诉我们您是希望立即进行同步还是可以推迟同步。如果您想立即同步。那么您必须使用触发器或在表 B 上创建物化视图并使其在提交时刷新(这有点棘手,但比触发器好得多)。如果它可能在插入表 A 之后的某个时间发生,那么这可能是 dbms_job 或任何其他计划的进程,这可能发生在系统的非生产负载期间。

标签: oracle triggers views


【解决方案1】:

如果这两个表的数据库位于两个不同的服务器中,那么您将需要在表 A 模式中创建一个数据库链接(db-link),以便它可以访问(读/写)表 B 数据使用数据库链接。

第1步:在表A服务器数据库中创建指向表B服务器数据库的数据库链接

第 2 步:为表 A 创建一个触发器,这有助于使用数据库链接向表 B 插入数据。您可以在将触发器插入表 B 之前自定义(连接值)。

这个链接应该对你有帮助

http://searchoracle.techtarget.com/tip/How-to-create-a-database-link-in-Oracle

【讨论】:

  • 是的,您可以使用 AFTER INSERT 触发器,这将帮助您处理发生在触发器定义的表中的所有插入操作。表 B 不会同步表 A 的 UPDATES 和 DELETES。
  • 好吧,如果我想要这样,那么我需要为 INSERT、UPDATE、DELETE 等创建多个触发器,对吗?
  • 不。您可以单独创建一个触发器,类似于“AFTER INSERT OR DELETE OR UPDATE ON”
  • 更新编辑。请检查
  • @DeeJay14 - 很抱歉,但我绝不会建议使用触发器来解决任何问题,除了某种最后的手段。首先,触发器混淆了逻辑并增加了流程的复杂性。其次 - 你可以在某个时候让它变得如此复杂(或者忘记它),你会想知道这些回归来自哪里。第三 - 在 99.9% 的情况下,还有另一种更直接的方法......
【解决方案2】:

是的,您可以使用触发器来执行此操作。但可能有一些缺点。

  • 如果数据库 B 不可用怎么办? -> 触发器中的异常处理。

  • 如果数据库 B 在 2 小时内不可用怎么办?您将数据插入到数据库 A 中,而数据库 B 中现在缺少该数据。 -> 将其临时插入数据库 A 中的缓存表中做一些疯狂的事情。

  • 性能。好吧,插入大量数据的性能会很糟糕。每次插入数据,Oracle都会启动PL/SQL引擎将数据插入远程数据库。

也许您可以考虑使用 MViews(物化视图)通过数据库链接复制数据。稍后您可以构建查询,以便它们访问数据库 B 中的表并通过加入 MView 从数据库 A 添加所需的数据。

您还可以使用快速刷新来(几乎)实时复制数据。

从 Oracle 数据库管理员的角度来看,这比触发器方法更有意义。

【讨论】:

  • 打败我。当我读到这个问题时,mview 似乎比使用触发器执行表同步更有意义。
【解决方案3】:

试试这个代码

数据库链接被认为是相当不安全的,并且现在 oracle 自己的选项具有相关的许可证,其他一些选项也已被弃用。

https://gist.github.com/anonymous/e3051239ba401e416565cdd912e0de8c

使用 ora_rowscn 在两个不同的 oracle 数据库之间同步表。

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多