用DataCopy进行Oracle数据同步
DataCopy(下载)并不一定是指从源端取得数据, 然后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=empnodatacopy 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写的程会更有效率.
建议继续学习:
- 关于IO的同步,异步,阻塞,非阻塞 (阅读:14310)
- mysql 主从同步原理 (阅读:5657)
- 消息分发的同步均衡策略 (阅读:4969)
- 五款最好的免费同步软件 (阅读:3789)
- 大量小文件的实时同步方案 (阅读:3666)
- MySQL5.5复制/同步的新特性及改进 (阅读:3593)
- redis源代码分析 - replication (阅读:3254)
- rsync主动同步代码 (阅读:3067)
- 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读:2935)
- truncate table 不能复制到从库 (阅读:2705)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:anysql 来源: AnySQL.net
- 标签: DataCopy 同步
- 发布时间:2010-03-17 09:26:54
- [397] WEB系统需要关注的一些点
- [15] 哪本书是对程序员最有影响、每个程序员都该阅读
- [14] InnoDB insert性能拐点测试
- [14] 修改系统最大文件句柄数
- [12] 一次神奇的MySQL优化
- [11] 我的git笔记
- [10] Android设计中的.9.png
- [10] 业务流程图的绘制流程分享(一)
- [10] Python 代码规范小结
- [10] Spark性能优化——和shuffle搏斗