繁体   English   中英

如何将数据从Oracle中的(PL /)SQL复制到另一个DBMS?

[英]How to copy data from (PL/)SQL in Oracle to another DBMS?

任务 :将数据库中的所有数据(无模式)复制到另一个数据库(可能是不同类型)。 我无法修改源数据库,因此它是只读备份

上下文 :将Oracle与许多数据库集成。 现在我正在整合Oracle和Postgres。

资源 :仅限连接字符串,能够以最高可用权限连接数据库。 (我无法通过ssh访问它 - 无法通过ssh创建顺序备份和下载文件,或者编译和启动web / ftp服务器等)

问题 :是否有任何经过验证的快速方法来提取这些数据? 也许某人有一个干净的代码的开源解决方案?

这里出现“fast”这个词,因为只需在一个回合中选择N行(使用rownum或row_number())并转移到目标数据库或中间文件太慢。

我建议你看看Liquibase 我成功地使用它来保持模式和数据在多个环境中保持一致(尽管只有SQLServers,但我确信它也适用于不同的RDBMS)。

至于性能我有点担心,因为你提到“太字节数据”......不过,它可能值得一试。

干杯,

像弹簧批这样的轻量级ETL工具可能是完成此任务的完美工具。

数据块的微观管理就是它的编写方式。

看一下jdbc游标示例:您只需配置SELECT和INSERT语句,以及映射,Spring-Batch将处理分页。

你可以在github找到它: https//github.com/SpringSource/spring-batch/blob/master/spring-batch-samples/src/main/resources/jobs/iosample/jdbcCursor.xml

参考资料可在以下网址找到: http//static.springsource.org/spring-batch/reference/html/readersAndWriters.html#database

Spring批处理保持已经处理了多少记录的状态,并允许继续先前崩溃的进程。 它通过将计数器保存在'jobRepository'中来实现,例如,它可以在第三个数据库中。

当然,这是一个纯java解决方案,本机解决方案可能更快,但如果你只获得JDBC连接字符串,你可能会给这一点。 这也假设您知道要传输的所有表的表结构。 如果没有,像SquirrelSQL这样的简单JDBC工具可以帮到你。

Greets,Geert。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM