SQLException: ORA-01652: невозможно увеличить временный сегмент на 128 в табличном пространстве TEMPORAL - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь сделать вставки в пакетном обновлении с шаблоном jdbc, и я получаю следующую ошибку.Мое приложение живет все время и выполняет несколько вставок в час по мере поступления событий.Я нашел решение, которое генерирует соединение каждый раз, когда я вызываю метод, а затем закрываю его, но это неправильно.Мне нужно использовать свое сгенерированное соединение только через один компонент.любое решение?

мой код:

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());

            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...