两台数据库IP地址分别为192.168.1.120和192.168.1.130.    120数据库为主数据库,130数据库为辅数据库。现在120和130里的数据表结构和数据完全相同。现在要做个同步,使得120数据库中的一部分表,增加删除修改数据,而130数据库都可以同步的增加删除或修改。注意此同步为单向同步,就是让130数据库中跟120数据库中数据相同。表结构不会发生变化。
网上给的建议是使用dblink,再使用快照。然后再写触发器。我先创建dblink connect120测试成功。
再创建快照如下,语句执行成功。
Create snapshot log on Aa_Database_Log;
--Aa_Database_Log是我要映射的表
Create snapshot sn_Aa_Database_Log as select * from Aa_Database_Log@connect120;
--创建快照
Alter snapshot sn_Aa_Database_Log refresh fast Start with sysdate+1/24*60 next sysdate+1/24*60;
--oracle自动在1分钟后进行第一次快速刷新,以后每隔1分钟快速刷新一次EXEC DBMS_SNAPSHOT.REFRESH('sn_Aa_Database_Log','F');
结果快照表建成功了。但并没有同步刷新。我手动刷新了下。还是不可以。网上介绍说,快照进程没启动起来。我的是oracle 10g。不知道怎样启动快照进程。
另外还有其他方法实现我这个问题的,可以给建议。

解决方案 »

  1.   

    120同步表建立物化视图日志。
    130建立物化视图。
    创建刷新组:DBMS_REFRESH.MAKE
    要刷新的物化视图添加到刷新组DBMS_REFRESH.ADD
    ok了。
      

  2.   

    可参考我发的http://topic.csdn.net/u/20080819/10/4acdea17-4d99-4e0b-a7c7-da7d01d261ce.html
    中的方法。另外对多用户的同步,如有经验请指点一下,多谢!
      

  3.   


    --在主数据库和物化视图数据库分别创建连接对方的数据库连接(database link),假如为ddbb
    --把要复制的数据表导入到物化视图数据库的对应用户下--在主数据库(待复制的数据)创建要进行数据复制的表的物化视图日值
    CREATE MATERIALIZED VIEW LOG ON tt  WITH ROWID, PRIMARY KEY, SEQUENCE  INCLUDING NEW VALUES;--在物化视图数据库(复制到的目的地)把要复制的表创建物化视图;
    CREATE MATERIALIZED VIEW tt ON PREBUILT TABLE  REFRESH FAST ON DEMAND AS SELECT * FROM tt@ddbb;
    --在物化视图数据库上创建刷新组,指定10分钟刷新一次
    BEGIN
       DBMS_REFRESH.MAKE(
         name => 'ABCDX',
         list => '',
         next_date => SYSDATE,
         interval => '/*10:Mins*/ sysdate + 10/(60*24)',
         implicit_destroy => FALSE,
         lax => FALSE,
         job => 0,
         rollback_seg => NULL,
         push_deferred_rpc => FALSE,
         refresh_after_errors => TRUE,
         purge_option => NULL,
         parallelism => NULL,
         heap_size => NULL);
    END;
    /
    --把要定期刷新的物化视图添加到刷新组
    BEGIN
       DBMS_REFRESH.ADD(
         name => 'ABCDX',
         list => 'TT',
         lax => TRUE);
    END;
    /
      

  4.   

    10G 可以用streams另外,你的另一台库是干什么的?容灾?还是做查询?或者要做正常业务?
      

  5.   

    streams是什么?能详细介绍下吗
      

  6.   

    如果只在一台做DML操作,另一台只需同步这些操作数据而自生不做任何操作,可以用data guard如果要在两台服务器都能各自做各种DML操作,并且要求它们同步,那就用楼上说的streams具体使用你要看手册了,操作步骤很多,一两句话说不清。
      

  7.   

    只同步部分表,那就用streams或者advanced replication,不过这些个配置不如DG简单。