用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的同步,异步,阻塞,非阻塞 (阅读:14458)
- mysql 主从同步原理 (阅读:5701)
- 消息分发的同步均衡策略 (阅读:5019)
- 五款最好的免费同步软件 (阅读:3845)
- 大量小文件的实时同步方案 (阅读:3718)
- MySQL5.5复制/同步的新特性及改进 (阅读:3706)
- redis源代码分析 - replication (阅读:3393)
- rsync主动同步代码 (阅读:3114)
- 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读:3059)
- truncate table 不能复制到从库 (阅读:2718)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:anysql 来源: AnySQL.net
- 标签: DataCopy 同步
- 发布时间:2010-03-17 09:26:54
- [65] Oracle MTS模式下 进程地址与会话信
- [64] Go Reflect 性能
- [64] 如何拿下简短的域名
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 【社会化设计】自我(self)部分――欢迎区
- [58] 图书馆的世界纪录
- [56] android 开发入门
- [55] 视觉调整-设计师 vs. 逻辑
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [46] 界面设计速成