两个Oracle服务器有办法实现数据同步吗?有思路吗?

解决方案 »

  1.   

    高机复制就是物化视图:
      物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。
      
      物化视图可以查询表,视图和其它的物化视图。
      
      通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。
      
      对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。
      
      对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。
      
      本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。
      
      在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。
      
      1.主键物化视图:
      下面的语法在远程数据库表emp上创建主键物化视图
      
      SQL> CREATE MATERIALIZED VIEW mv_emp_pk
      REFRESH FAST START WITH SYSDATE
      NEXT SYSDATE + 1/48
      WITH PRIMARY KEY
      AS SELECT * FROM emp@remote_db;
      Materialized view created.
      注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:
      
      SQL> CREATE MATERIALIZED VIEW LOG ON emp;
      Materialized view log created.
      
      2.Rowid物化视图
      下面的语法在远程数据库表emp上创建Rowid物化视图
      
      SQL> CREATE MATERIALIZED VIEW mv_emp_rowid
      REFRESH WITH ROWID
      AS SELECT * FROM emp@remote_db;
      Materialized view log created.
      
      3.子查询物化视图
      下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图
      
      SQL> CREATE MATERIALIZED VIEW mv_empdept
      AS SELECT * FROM emp@remote_db e
      WHERE EXISTS
      (SELECT * FROM dept@remote_db d
      WHERE e.dept_no = d.dept_no)
      Materialized view log created.
      REFRESH 子句
      
      [refresh [fast|complete|force]
      [on demand | commit]
      [start with date] [next date]
      [with {primary key|rowid}]]
      
      Refresh选项说明:
      
      a. noracle用刷新方法在物化视图中刷新数据.
      
      b. 是基于主键还是基于rowid的物化视图
      
      c. 物化视图的刷新时间和间隔刷新时间
      
      Refresh方法-FAST子句
      
      增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志
      
      SQL> CREATE MATERIALIZED VIEW LOG ON emp;
      Materialized view log created.
      
      对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。
      
      Refresh方法- COMPLETE子句
      
      完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成    完全刷新即使增量刷新可用。
      
      Refresh Method – FORCE 子句
      
      当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项
      
      主键和ROWD子句
      
      WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.
      
      主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。
      
      Rowid物化视图只有一个单一的主表,不能包括下面任何一项:
      
      n Distinct 或者聚合函数.
      
      n Group by,子查询,连接和SET操作
      
      刷新时间
      
      START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.
      
      SQL> CREATE MATERIALIZED VIEW mv_emp_pk
      REFRESH FAST
      START WITH SYSDATE
      NEXT SYSDATE + 2
      WITH PRIMARY KEY
      AS SELECT * FROM emp@remote_db;
      Materialized view created.
      在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.
      
      总结
      物化视图提供了可伸缩的基于主键或ROWID的视图,指定了刷新方法和自动刷新的时间。
      

  2.   

    dataguard ,  做个逻辑standby 实时同步!
      

  3.   

    选择很多,可用的技术概括有如下几种(10G):
    1 物化视图
     如2楼所述,如果只是同步库中的部分表,用物化视图是一个不错的选择,如果是全库同步,最好的选择还是DATA GUARD,稳定,维护简单方便。
    2 Data guard
      分为物理Data guard和逻辑的Data guard,两个库实时保持同步,但物理Data guard打开库时要先停止同步。并且只能在相同硬件平台下操作。通常作为容灾备份或报表服务器。
    3 流复制
       支持两个库部分表实时同步和整个库实时同步,并且支持异构平台
    4 Golden gate
      oracle的收费软件,支持异构平台,支持两个库实时同步,支持双向复制和一对多复制或多对一复制。 
      

  4.   

    物化视图一般做小数据量,不经常改变的全量更新同步。
    database links可以做类似流水表的增量定时同步。
    其他的没用过,据说Data guard不错。