用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的同步,异步,阻塞,非阻塞 (阅读:14660)
- mysql 主从同步原理 (阅读:5756)
- 消息分发的同步均衡策略 (阅读:5094)
- 五款最好的免费同步软件 (阅读:3929)
- 大量小文件的实时同步方案 (阅读:3785)
- MySQL5.5复制/同步的新特性及改进 (阅读:3851)
- redis源代码分析 - replication (阅读:3565)
- rsync主动同步代码 (阅读:3179)
- 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读:3213)
- truncate table 不能复制到从库 (阅读:2775)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:anysql 来源: AnySQL.net
- 标签: DataCopy 同步
- 发布时间:2010-03-17 09:26:54
-
[70] find命令的一点注意事项
-
[54] 读书笔记-壹百度:百度十年千倍的29条法则
-
[38] 小屏幕移动设备网页设计注意事项
-
[36] memory prefetch浅析
-
[36] 卡诺模型―设计品质与设计价值的思考
-
[31] Oracle bbed工具的编译
-
[23] 杨建:网站加速--Cache为王篇
-
[21] 在vim保存时获得sudo权限
-
[21] 程序员技术练级攻略
-
[20] 洋葱式信息安全观察:信息安全与业务浪涌