这里要介绍一个在DataCopy基础上开发出来的OCI程序, 可以基于物化视图日志或触发器抓捉的变化数据进行数据同步, 先暂时称这个OCI程序为DataSync, 使用它可以实现简单的一对一复制, 或一对多, 甚至于多对多的数据复制. 虽然不能想Shareplex之类的基于日志, 并保证事务顺序, 但在数据迁移, 历史数据归档中, 还是可以发挥很大的作用. 先来看一下命令行帮助吧.

DataSync: Oracle Data Replication Utility, Release 3.0.1
(c) Copyright Lou Fangxin (AnySQL.net) 2010, all rights reserved.

Usage: datasync keyword=value [,keyword=value,...]

Valid Keywords:
  user    = username/password@tnsname for source and target.
  user1  = username/password@tnsname for source database.
  user2  = username/password@tnsname for target database.
* wait    = wait time in microsecond after each array.
  array  = array fetch size
  long    = maximum size for long, long raw, CLOB, BLOB columns.
* crypt  = encrypt the connection info only, no data copy (YES/NO).
  parfile = read command option from parameter file
  config  = config files.
* dbid    = target database flag column of log table.
* dblist  = all target database flag columns of log table.
* init    = fix message out of sync before replication(YES).
  log    = log file name for screen messages.

Notes:
  datasync user1=scott/tiger user2=scott/tiger config=scott.cfg init=yes

Config:
  Source # Primary Key # Log Table # Target # Conflict # Filler # Where

    接下来我们来实现两个数据库(DB1,DB2)之间一个表(SCOTT.EMP)的同步, 要求将DB1的变更复制到DB2上, 使用DataSync来实现其实是非常简单的.

    1, 在DB1的表(SCOTT.EMP)上创建物化视图, 并为物化视图的表创建一个索引, 以优化数据访问.

CREATE MATERILIZED VIEW LOG ON EMP WITH SEQUENCE, PRIMARY KEY;
CREATE INDEX MLOG$_EMP_IX1 ON MLOG$_EMP (SEQUENCE$$);

    2, 准备一个配置文件(scott.cfg), 如下所示.

D:\>type scott.cfg
EMP  #EMPNO  #MLOG$_EMP  #EMP

    3, 使用DataCopy进行数据初始化, DB2上的表结构需要自行创建, DataCopy并不拷贝表结构信息.

datacopy user1=scott/tiger@db1 user2=scott/tiger@db2 table=emp

    4, 启动DataSync数据复制后台进程.

datasync user1=scott/tiger@db1 user2=scott/tiger@db2 config=scott.cfg

    5, 在源端做一些数据操作, 看看操作是不是被比较实时(2秒左右)地复制到DB2数据库中?

update emp set comm = nvl(comm,0) + 200;

    如果你的数据库不是很忙, 又不想花大钱去引入Shareplex之类的高价软件, 并用对事务没有要求, 是可以用用DataSync的. 备注: 非注册版复制的频率为5分钟, 支持大约一秒7次变更以内的操作.