Azure sql database 对于准备好的语句,超出了每个会话20 MB的内存限制。减少准备好的语句的数量或大小

Azure sql database 对于准备好的语句,超出了每个会话20 MB的内存限制。减少准备好的语句的数量或大小,azure-sql-database,azure-sqldw,oracle-data-integrator,azure-sql-data-warehouse,Azure Sql Database,Azure Sqldw,Oracle Data Integrator,Azure Sql Data Warehouse,我试图使用Oracle ODI将记录插入Azure sql数据仓库,但在插入一些记录后出现错误 注意:我试图插入1000条记录,但800条之后会出现错误 错误消息:原因:java.sql.BatchUpdateException:112007;对于准备好的语句,超出了每个会话20 MB的内存限制。减少准备好的语句的数量或大小 我正在尝试插入1000条记录,但800条之后会出现错误 错误消息:原因:java.sql.BatchUpdateException:112007;对于准备好的语句,超出了每

我试图使用Oracle ODI将记录插入Azure sql数据仓库,但在插入一些记录后出现错误

注意:我试图插入1000条记录,但800条之后会出现错误

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

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


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

20MB是定义的限制,目前是硬限制。减少批处理大小肯定会帮助您绕过此限制

链接到容量限制


虽然Abhijith的回答在技术上是正确的,但我想建议一种替代方案,它将给您带来更好的性能

问题的根源在于,您选择了最糟糕的方式将大量数据加载到Azure SQL数据仓库中。一长串INSERT语句将执行得非常糟糕,不管您向它抛出多少DWU,因为它总是一个单节点操作

我的建议是按照以下方式调整ODI流程,假设您的Oracle是本地的

将摘录写入文件 调用AZCOPY将文件移动到Azure blob存储 创建外部表以将视图映射到存储中的文件 将表创建为或插入,以便从该视图读取到目标表中
这将比您当前的方法快几个数量级。

实际上,错误来自Oracle Odi方面。我已经准备好将Azure dataware house扩展到G2-1000c。1000行不多,我认为20 MB的内存限制足以插入这些记录。