有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

这里出现“fast”一词是因为一次只选择N行(使用rownum或row_number())并传输到目标数据库或中间文件太慢


共 (2) 个答案

  1. # 1 楼答案

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

    至于性能,我有点担心,正如你提到的“TB数据”。。。尽管如此,还是值得一试

    干杯

  2. # 2 楼答案

    像spring batch这样的轻量级ETL工具可能是完成这项任务的完美工具

    数据块的微观管理就是它所围绕的内容

    看看jdbc游标示例:只需配置SELECT和INSERT语句,以及映射,Spring批处理将负责分页

    您可以在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 batch保留已处理记录的状态,并允许继续之前崩溃的进程。它通过将计数器保存在“jobRepository”中来实现这一点,例如,jobRepository可以位于第三个数据库中

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

    你好,吉尔特