【发布时间】:2017-12-02 06:20:07
【问题描述】:
处理一个必须从其中复制数百万条记录的小示例 teradata 数据库到 Oracle DB。
环境:Spring Boot + Spring JDBC (jdbcTemplate) + Spring REST + Spring Scheduler + Maven + Oracle + Teradata
使用 Spring JDBC 的 batchUpdate 将数据插入目标数据库 Oracle。
在来自源数据库的 SQL 查询中使用 teradata 的“前 1000 名”。
fecthDataResults = repository.queryForList(
"select top 1000 A, B, C, D, E from " + schemaName + ".V_X");
从视图“V_X”查询。
这个视图有 4000 万条记录,如果运行,spring boot 应用程序会阻塞。
还插入到目标 Oracle DB 中的 2 个表(主表和备份表)中。
获取和加载/复制 4000 万条记录以确保成功复制到 2 个表中的最佳方法是什么。
Spring Scheduler 在指定的时间/间隔安排批量复制。 Spring Rest 手动调用复制 - 两者都实现了。
任何建议将不胜感激。
谢谢。
【问题讨论】:
-
我会将其委托给本机
imp/exp脚本...但如果您需要在 Java 中执行此操作,则可以选择 Spring Batch + Spring JDBC 操作 (select top X into Y)。跨度> -
从 Teradata 导出数据(转换为 CSV 或其他格式)-> 转换 -> 直接导入到 oracle(使用 SQL*Loader 实用程序等工具)适合您吗?这样你就绕过了spring应用
-
谢谢@Carlos。使用 Top X (1000) 到 Y 本身。现在必须检查如何处理 3600 万条记录。
-
@Sninivas - 该示例对于直接从数据库到数据库的记录数量较少的情况下工作正常 - 不能使用 SQL 加载器 - 实际上使用也可以工作的 spring 调度程序..
-
@Manish 为什么不从Oracle 连接到 Teradata 并在 Oracle 数据库中创建一个存储过程来使用 Bulk Collect 获取数据。最后,从 Java 或 Spring 调用 Oracle 存储过程。
标签: java spring spring-boot spring-jdbc