我有以下场景,需要在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;
/
如何选择插入的最新行?
答案 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数据库同步表。