我希望在两个不同的服务器(server1和server2)中有两个同步的数据库,所以:
和
这样我可以从两个服务器更新两个表同步,我已经设法使用DBlink没有问题从server1更新到服务器2。
有什么问题?当两个表都启用了触发器时,它会创建一个无限循环,因此server1会更改然后更新server2,然后它会更改并更新server1,依此类推。 有没有办法在没有这个问题的情况下做我需要的东西?
感谢。
答案 0 :(得分:2)
使用table1中的附加字段(标志)和有条件执行的触发器可以轻松解决问题。
在表格中添加新列:
alter table table1 add column sync boolean default false;
在触发器功能集sync
到true
:
create function on_update_table1()
...
-- update table1 on another server with dblink setting sync = true
...
使用条件创建触发器:
create trigger on_update_table1
after update on table1
for each row when (not new.sync)
execute procedure on_update_table1();
仅当来自其他服务器的触发器未执行更新时才会触发该触发器。
但请注意,在提议的同步方法中,您可以遇到更难的问题。特别是,您应该知道如何解决两台服务器上同一行的同时更改冲突。只有在设计时消除了这些冲突,或者您必须实现自己的锁定系统时,才能应用同步,这可能是一个相当复杂的问题。