SQLException:ORA-01652:无法在表空间TEMPORAL中将临时段扩展128

时间:2018-12-20 13:21:37

标签: java oracle jdbc

我正在尝试使用jdbc模板在batchupdate中进行插入,但出现以下错误。 我的应用程序一直存在,并在事件到达时每小时执行多次插入。 我找到了一个解决方案,该解决方案在每次调用该方法然后关闭它时都会生成一个连接,但这不是正确的选择。 我只需要通过Bean使用一次生成的连接。 任何解决方案吗?

我的代码:

private void insertarDatosEnDB(List<RowObject> dbObjectList) {

    try {

        String sql = "INSERT /*+ APPEND IGNORE_ROW_ON_DUPKEY_INDEX(" + table + "," + "NOKIA_JSON_RAW_PK " + ") */ INTO " + table +
                " (FECHA, NOMBRE_PROYECTO,NOMBRE_ARCHIVO, TIPO,  DOCUMENTO) VALUES (?, ?, ?, ?, ?)";

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

            jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i) throws SQLException {
                    RowObject ci = dbObjectList.get(i);
                    ps.setDate(1, new java.sql.Date(ci.getFecha().getTime()));
                    ps.setString(2, ci.getNombre_proyecto());
                    ps.setString(3, ci.getNombre_archivo());
                    ps.setString(4, "ALGUN-TIPO");
                    // Usando directamente un CLOB
                    Clob clob = ps.getConnection().createClob();
                    clob.setString(1, ci.getJson());
                    ps.setClob(5, clob);
                }

                @Override
                public int getBatchSize() {
                    return dbObjectList.size();
                }
            });
            LOGGER.info("Se han insertado datos en la tabla con el nombre de archivo: {}", dbObjectList.get(0).getNombre_archivo());
        } catch (Exception e) {
            String archivo = dbObjectList.get(0).getNombre_archivo();
           /*try {
                FileUtils.writeStringToFile(new File(".\\" + archivo + "_" + System.currentTimeMillis() + ".txt"), dbObjectList.get(0).getJson().toString());
            } catch (IOException e1) {
                e1.printStackTrace();
            }*/
            LOGGER.error("Error al insertar archivo {}  en DB Class: {}\n -Message: {}\n -Cause: {}\n -StackTrace: {}", archivo, e.getClass(), e.getMessage(), e.getCause(), e.getStackTrace());
            e.printStackTrace();
        }
}

public void persistirDatosEnDB(List<RowObject> dbObjectList) {
    TransactionTemplate template = new TransactionTemplate(transactionManager);

    template.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
            try {
                insertarDatosEnDB(dbObjectList);
            }
            catch (Exception e){
                LOGGER.error("Error al insertar en DB Class: {}\n -Message: {}\n -Cause: {}\n -StackTrace: {}", e.getClass(), e.getMessage(), e.getCause(), e.getStackTrace());

            }
        }
    });

0 个答案:

没有答案
相关问题