我有本地和远程数据库。 本地数据库是远程数据库的副本。 我必须将远程数据库中的新记录插入本地数据库。 远程数据库中有14个表,因此我需要跟踪所有14个表中的更改。
我知道我可以选择远程数据库中的每个表并检查本地数据库中是否存在记录,如果没有则插入它。
还有其他办法吗?在java中可能吗? 什么方法最好?
答案 0 :(得分:2)
让我们从DBlink开始到远程数据库
CREATE PUBLIC DATABASE LINK REMO
CONNECT TO <user_name>
IDENTIFIED BY <password>
USING '<service_name>';
然后在用户模式的所有表中插入循环。或者如果您只想插入一些表格,请为这14个表格定义适当的条件。
begin
for x in (select table_name from user_tables) loop
execute immediate 'insert into ' || x.table_name || ' (select * from ' || x.table_name || '@REMO minus select * from ' || x.table_name || ')';
commit;
end loop;
end;
/
这将仅插入新记录(实际上是在远程上存在(或已更改)的记录而在本地不存在)。如果你需要什么,这将有效。如果您需要同步,这不是解决方案。
答案 1 :(得分:1)
如果您只有一个本地数据库并且它一直运行 - 您可以使用远程数据库中的触发器插入到本地数据库。
顺便说一句:从本地去手动检查远程不是一个好主意。如果现有远程记录发生了变化,但本地仍有旧值,该怎么办?还有大量的Oracle工具可以在数据库之间进行复制和同步。最好深入挖掘。