使用 Spring Boot 的 Oracle 到 SQL Server 数据传输

Posted

技术标签:

【中文标题】使用 Spring Boot 的 Oracle 到 SQL Server 数据传输【英文标题】:Oracle to SQL Server data transfer using spring boot 【发布时间】:2018-10-10 18:58:06 【问题描述】:

我正在寻找技术解决方案;使用 java spring boot 从一个数据库中查询数据并将其加载到 SQL Server 数据库中。

模拟查询以获取在给定时间 20 小时之间更新的产品名称:

SELECT 
    productName, updatedtime FROM
products WHERE
    updatedtime BETWEEN '2018-03-26 00:00:01' AND '2018-03-26 19:59:59';

这是我们遵循的方法。

1) 其长期运行的 Oracle 查询,在营业时间运行大约 1 小时,并返回约 100 万条记录。

2) 我们必须使用 JDBC 将此结果集插入/转储到 SQL Server 表中。

3) 据我所知,Oracle JDBC 驱动程序支持流式传输。当我们迭代 ResultSet 时,它只会将 fetchSize 行加载到内存中。

int currentRow = 1;
while (rs.next()) 
  // get your data from current row from Oracle database and accumulate in a batch
  if (currentRow++ % BATCH_SIZE == 0) 
    //insert whole accumulated batch into SqlServer database
  

在这种情况下,我们不需要将所有来自 Oracle 的庞大数据集存储在内存中。我们将分批 BATCH_SIZE 插入 SqlServer。唯一的事情是我们需要考虑在哪里提交到 SqlServer 数据库。

4) 这里的瓶颈是查询执行等待从 oracle db 获取数据的时间,所以我计划将查询分成 10 个相等的部分,这样每个查询就可以在每小时之间给出更新时间,如图所示。这样每个查询的执行时间也减少到 ~ 10 分钟。 例如: 选择 产品名称,更新时间 FROM 产品在哪里 更新时间介于“2018-03-26 01:00:01”和“2018-03-26 01:59:59”之间;

5.为此,我需要 5 个 Oracle JDBC 连接和 5 个 Sql 服务器连接(用于查询数据并插入数据库)来独立完成其工作。我是 JDBC 连接池的新手 如果连接不使用等,我该如何进行连接池和关闭连接?

如果您有任何其他更好的方法可以快速从数据源获取数据作为实时数据,请提出建议。请建议。提前致谢。

【问题讨论】:

【参考方案1】:

这是 Spring Batch 中的一个典型用例。

您有 ItemReader(来自您的源数据库)和 ItemWriter(进入您的目标数据库)的概念。

您可以定义多个数据源,并且可以读取固定的提取大小(例如 JdbcCursorItemReader),还可以创建网格以进行并行执行。

通过快速搜索,您可以在网上找到许多与此类任务相关的示例。

我知道我没有发布与概念相关的代码,但我需要一些时间来准备一个像样的示例

【讨论】:

谢谢瑞克,你能不能分享一下它的例子,这样会有所帮助。谢谢 我无法在这个深夜 (GMT+1) 之前为您提供示例。如果您赶时间,您应该查看有关 spring 批处理的 spring 指南:spring.io/guides/gs/batch-processing,然后将其调整为从不同的数据库读取和写入,而不是使用平面文件作为输入。(您应该使用限定符定义多个 DataSource Bean)

以上是关于使用 Spring Boot 的 Oracle 到 SQL Server 数据传输的主要内容,如果未能解决你的问题,请参考以下文章

spring boot整合mybitas怎么配置oracle?

如何将 Spring Boot JAR 连接到远程 Oracle 数据库?

Spring Boot 配置Oracle数据库

运行 Spring Boot 简单应用程序时找不到 Oracle 驱动程序

使用 Spring Boot 和 Spring JDBC 在 oracle 中设置默认模式 = SOMETHING

Spring Boot 从 Oracle 配置入手