Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle同步2个表_Oracle_Triggers_Views - Fatal编程技术网

oracle同步2个表

oracle同步2个表,oracle,triggers,views,Oracle,Triggers,Views,我有以下场景,需要在ORACLE中解决: 表A位于数据库服务器上 表B位于不同的服务器上 表A将填充数据。 每当有东西被插入表A时,我都想将它复制到表B。 表B几乎有相似的列,但有时我只想 从tableA中删除两列中的内容,并将其连接并保存到 表B 我对甲骨文不是很熟悉,但是在研究过谷歌之后 有人说你可以使用触发器或视图,你会怎么做 因此,一般来说,有一个将被填充的表及其内容 应该复制到另一张桌子上 这就是我目前提出的解决方案 create public database link othe

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

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

表A将填充数据。 每当有东西被插入表A时,我都想将它复制到表B。 表B几乎有相似的列,但有时我只想 从tableA中删除两列中的内容,并将其连接并保存到 表B

我对甲骨文不是很熟悉,但是在研究过谷歌之后 有人说你可以使用触发器或视图,你会怎么做

因此,一般来说,有一个将被填充的表及其内容 应该复制到另一张桌子上

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

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; 
/

如何选择插入的最新行?

如果这两个表的数据库位于两个不同的服务器中,则需要在表a架构中创建数据库链接(db link),以便它可以使用db link访问(读/写)表B数据

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

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

这个链接应该对你有帮助


如果这两个表的数据库位于两个不同的服务器中,则需要在表a架构中创建数据库链接(db link),以便它可以使用db link访问(读/写)表B数据

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

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

这个链接应该对你有帮助


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

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

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

  • 表演。嗯,插入大量数据的性能会很差。每次插入数据时,Oracle都会启动PL/SQL引擎将数据插入远程数据库

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

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


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

是的,您可以使用触发器来实现这一点。但也有一些缺点

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

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

  • 表演。嗯,插入大量数据的性能会很差。每次插入数据时,Oracle都会启动PL/SQL引擎将数据插入远程数据库

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

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

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

试试这段代码

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

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

请尝试此代码

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


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

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