用数据链路和建立任务可以解决。
建立两条数据链路:
(1) A库--->B库:A_link
(2) B库--->B库:B_link
以下可以解决问题1,问题2同理:
写一个过程:
CREATE OR REPLACE procedure A_syn
as
  sTableName varchar(30);
  cursor crTable is select TABLE_NAME from user_tables@A_link 
begin
  open crTable;
  LOOP
fetch crTable into sTableName;
EXIT WHEN crTable%NOTFOUND;
 sSql:='INSERT INTO ' || sTableName ||' select * from ' 
                || sTableName || '@' || A_link;
 EXECUTE IMMEDIATE(sSql);
 commit;
 exception 
  when others then 
return;
  end loop; 
  close crTable;
end ;

解决方案 »

  1.   

    lcz022:
      你这种思维明显想错了,我需要的是数据的同步,不是要你把整个数据导入导出
      

  2.   

    这是一个比较简单的想法,如果你不想用触发器,既然是两边的数据来源不同。
    在库A和B分别建立DBLINK,如果库A INSERT 一条记录,如果成功。就发第二条
    语句给B,反之一样,在过程里面实现应该很简单。不知道你有什么见解?
      

  3.   

    LGQDUCKY(飘) :
       你说的蛮对的,我也考虑过这个问题,不过有一个疑难是B库中的程序不是我做的,也就不能用你那种方法实现
      

  4.   

    那就用 sql server 的导入导出工具建立一个任务,然后建立触发器,当A库有一条数据插入时同时向B库插入一条数据.
      

  5.   

    你只在B库中相关表上建立触发器,而A库中不建触发器,B库的触发器在向A库插入数据时要判断数据是否已经存在。
    你用程序向A库中的插入数据后,再用程序对B库进行相同数据插入。
      

  6.   

    建立一个基于dblink的连接视图,例如在A上,插入数据到视图a,b,c时,直接对应到B的aa,bb,cc
    这样可以保持同步,而且使用起来非常简单。
    qq:106383098