0

我正在尝试使用 Oracle ODI 将记录插入 Azure sql Dataware House,但在插入一些记录后出现错误。

注意:我正在尝试插入 1000 条记录,但在 800 条之后出现错误。

错误消息:由:java.sql.BatchUpdateException:112007 引起;超出准备好的语句的每个会话 20 MB 的内存限制。减少准备好的语句的数量或大小。

我正在尝试插入 1000 条记录,但在 800 条之后出现错误。

错误消息:由:java.sql.BatchUpdateException:112007 引起;超出准备好的语句的每个会话 20 MB 的内存限制。减少准备好的语句的数量或大小。

4

2 回答 2

1

虽然 Abhijith 的回答在技术上是正确的,但我想提出一个可以为您提供更好性能的替代方案。

问题的根源在于你选择了最糟糕的方式将大量数据加载到 Azure SQL 数据仓库。很长的 INSERT 语句列表将执行得非常糟糕,无论您向其抛出多少 DWU,因为它始终是单节点操作。

我的建议是按照以下方式调整您的 ODI 流程,假设您的 Oracle 是内部部署的。

  • 将您的提取写入文件
  • 调用 AZCOPY 将文件移动到 Azure blob 存储
  • 创建外部表以映射存储中文件的视图
  • CREATE TABLE AS 或 INSERT INTO 从该视图读取到目标表

这将比您当前的方法快几个数量级。

于 2019-07-01T06:09:13.080 回答
0

20MB 是定义的限制,目前是硬限制。减少批量大小肯定会帮助您解决此限制。

链接到容量限制。

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-service-capacity-limits

于 2019-06-26T07:08:35.520 回答