« 用DataCopy进行Oracle数据同步 »
Tools » http://www.anysql.net/tools/datacopy-data-sync-mode.html 2010-03-16DataCopy(下载)并不一定是指从源端取得数据, 然后INSERT到目标端, 插入只是一个默认操作而已, 其实在目标端还可以做UPDATE或DELETE操作. 对于INSERT可以使用Direct Path Load的方式, 速度可以比得上CTAS, 其他的操作方式, 则只能实现Array DML了. 在日常的DBA工作中, 还是会有一些数据同步的需求的, 这时DataCopy应当可以减轻你的工作量.
在DataCopy中增加了两个命令行选项, 以支持不同的操作方式.
* sync = sync mode (INSERT,UPDATE,DELETE,UPDINS,INSUPD,DELINS).
* unique = primary key or unique key columns of target table.
除INSERT操作外(SYNC选项的默认值), UPDATE/DELETE操作都需要指定目标端表的主键列, 以用在WHERE条件中. UPDATE操作会根据指定的主键列去更新非主键列的值(SYNC=UPDATE), 而DELETE操作则直接在目标端根据主键列删除记录(SYNC=DELETE).
datacopy user1=… user2=… table1=emp table2=emp_sync sync=delete unique=empno
datacopy user1=… user2=… table1=emp table2=emp_sync sync=update unique=empno
根据前面的三种基本操作还可以延伸出来额外的三种操作, 在目标端用PL/SQL代码来实现, 第一种是UPDATE-INSERT方式, 在目标端先进行UPDATE, 如果更新0条记录, 则进行INSERT. 这种方式适合于以UPDATE为主的数据同步.
datacopy user1=… user2=… table1=emp table2=emp_sync sync=updins unique=empno
第二种是INSERT-UPDATE方式, 在目标端先进行INSERT, 如果主键冲突, 则进行UPDATE. 这种方式适合于以INSERT为主的数据同步.
datacopy user1=… user2=… table1=emp table2=emp_sync sync=insupd unique=empno
第三种是DELETE-INSERT方式, 在目标端先进行DELETE, 再进行INSERT操作. 这种方式的执行成本会比较高, 但逻辑简单.
datacopy user1=… user2=… table1=emp table2=emp_sync sync=delins unique=empno
后面的三种方式, 如果要用PL/SQL来实现Array接口, 代码还是有一点复杂的, 如果要实现动态SQL的处理, 估计更复杂. 并且大量的循环, 用外部C写的程会更有效率.
Tags: Copy, Data, Tools


如果是读日志同步,就是goldengate了
用Trigger来做增量捕捉, 这个程序再改改就可以实现增量同步了.
能不能告知原理呢?
如果数据量很大,要实现两个表之间不定时同步的话,这个程序是否可行?
如果是很大表, 要不定期地做少量数据变更的同步, 这个可以用ASyncData程序, 在DataCopy的基础上开发出来的.
我用datacopy的tables参数,这个参数是copy的table的list,我该如何使用呢?我用tables=(t1,t2)或者tables=t1,t2或者tables=[t1,t2]都报错,无效字符。
知道了,这样使用:
tables=t1,t2