java如何将数据从Oracle中的(PL/)SQL复制到另一个DBMS?
任务:将数据库中的所有数据(不含架构)复制到另一个数据库(可能是不同类型的数据库)。我无法修改源数据库,因此它是只读备份
上下文:将Oracle与多个数据库集成。现在我正在整合Oracle和Postgres
资源:仅限连接字符串,能够以最高可用权限连接数据库。(我无法通过ssh访问它——无法通过ssh创建顺序备份和下载文件,也无法编译和启动web/ftp服务器等。)
问题:是否有任何经验证且快速的方法来获取这些数据?也许有人有一个干净代码的开源解决方案
这里出现“fast”一词是因为一次只选择N行(使用rownum或row_number())并传输到目标数据库或中间文件太慢
# 1 楼答案
我建议你看看Liquibase。我已经成功地使用它在多个环境中保持模式和数据的一致性(尽管只是SQLServer,但我确信它也适用于不同的RDBMS)
至于性能,我有点担心,正如你提到的“TB数据”。。。尽管如此,还是值得一试
干杯
# 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工具可以帮助您
你好,吉尔特