oracle同步2个表

时间:2017-07-11 12:33:32

标签: oracle triggers views

我有以下场景,需要在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; 
/

如何选择插入的最新行?

3 个答案:

答案 0 :(得分:2)

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

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

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

此链接可以帮助您

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

答案 1 :(得分:1)

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

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

  • 如果数据库B在2小时内无法使用怎么办?您将数据插入到数据库A中,该数据库A现在在数据库B中丢失了。 - >暂时将其插入数据库A中的缓存表中,做一些疯狂的事情。

  • 性能。那么,插入大量数据的性能将是丑陋的。每次插入数据时,Oracle都会启动PL / SQL引擎将数据插入远程数据库。

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

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

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

答案 2 :(得分:1)

试试这段代码

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

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

使用ora_rowscn跨两个不同的oracle数据库同步表。