繁体   English   中英

MyBatis 3.2.7庞大的BATCH插入被阻止

[英]MyBatis 3.2.7 bulky BATCH insert is blocked

我遇到一个问题,我试图将大约10,000条记录的BATCH插入13列的Oracle 11g表中。 Actually this is blocked if I try more than 1000 records. 同样,对500条记录的BATCH插入进行细粒度的测试也太慢了。

由于ORA-4031错误,BATCH正在数据库上生成巨大的跟踪文件。 每个会话中运行的SQL语句的长度超过80,000行,并以42,000个绑定变量作为输入。

驱动程序: oracle.jdbc.driver.OracleDriver

我正在尝试满足要求:如果插入的任何数据无效,则必须回滚。

我的问题是:

有没有一种方法可以告诉MyBatis将传入的大批量分为小批,每个小批说10条记录,将它们插入,但如果其中一个失败则回滚所有批处理,并且仅在成功插入所有批处理时才提交?

还是有其他替代方法?

Below is the xml mapping for the insert:

<insert id="insertToTable" parameterType="java.util.List">
        INSERT ALL
        <foreach item="line" collection="list" >
            <foreach item="lineItem"
                collection="line.entrySet()" open="" close="" separator="">
                into
                TABLE_TEST_T
                (col1, col2, col3, col4, col5,
                col6, col7, col8, col9, col10,
                col11, col12, col13)
                values(
        <!--        #{lineItem.item1, jdbcType=DATE}, -->
                #{lineItem.item1, jdbcType=VARCHAR},
                #{lineItem.item2, jdbcType=VARCHAR},
                #{lineItem.item3, jdbcType=VARCHAR},
                #{lineItem.item4, jdbcType=NUMERIC},
                #{lineItem.item5, jdbcType=NUMERIC},
                #{lineItem.item6, jdbcType=NUMERIC},
                #{lineItem.item7, jdbcType=NUMERIC},
                #{lineItem.item8, jdbcType=NUMERIC},
                #{lineItem.item9, jdbcType=NUMERIC},
                #{lineItem.item10, jdbcType=NUMERIC},
                #{lineItem.item11, jdbcType=NUMERIC},
                #{lineItem.item12, jdbcType=NUMERIC},
                #{lineItem.item13, jdbcType=NUMERIC}    
                )           
            </foreach>
        </foreach>
        SELECT * FROM dual
    </insert>

感谢您的反馈。

是的,您可以启动事务并在发生错误时将其回滚,或者在没有错误的情况下将其提交。 有许多方法可以管理Java应用程序中的事务

由于使用的是myBatis,因此可以查看SqlMapTransactionManager

我在路由中使用了骆驼EIP拆分器,并将查询绑定在事务中。 可以在http://camel.465427.n5.nabble.com/Camel-Mybatis-2-13-1-BATCH-of-10-000-records-tt5756211.html中找到更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM