IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

用DataCopy进行Oracle数据同步

AnySQL.net 2010-03-17 09:26:54 累计浏览 2,752 次
本机暂存

       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=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写的程会更有效率.

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. Oracle MTS模式下 进程地址与会话信息 (累计阅读 14,408)
  2. 那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼 (累计阅读 6,880)
  3. 性能测试工具sysbench简介 (累计阅读 6,027)
  4. 大于2GB的Listener.log和运行超过198天的主机上的Oracle实例 (累计阅读 5,863)
  5. 仅仅只备份是不够的 (累计阅读 5,825)
  6. Oracle Database 12c 新特性 - Native Top N 查询 (累计阅读 5,751)
  7. ORACLE最大可以存储多少数据量 (累计阅读 5,729)
  8. Oracle DBA的学习进阶成长树-从初出茅庐到高瞻远瞩 (累计阅读 5,603)
  9. 老托的Oracle 数据库Patch概念性小常识 (累计阅读 5,549)
  10. 查看oracle数据库用户下的所有空表 (累计阅读 5,505)