Oracle JDB C - Влияние отката commit () close () close () AutoCommit () на соединение - Ожидающие базовые транзакции - PullRequest
0 голосов
/ 30 апреля 2020

Dao Snippet

Connection connection = null;

try{
        connection.setAutoCommit(false);
        connection = session.getConnection();  // session here is HttpSession
        Prepared Statement ...
        executeUpdate(); // Step 1
        insert();   // Step 2
        executeUpdate();   Step 3
        connection.commit();
}catch(SQLException e){
       connection.rollback();
}finally{
       connection.setAutoCommit(true);
}

После завершения вышеуказанного шага, пользователь нажимает на выход

try {
            // Rollback all pending transactions
            connection = session.getConnection();  // session here is HttpSession
            connection.rollback();
        } catch (Exception e) {
            logger.error(e);
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                logger.error(e);
            }
        }

Я использую Java JDB C с Oracle.

Вопрос

  1. Будет ли шаг 1/2/3 выполняться последовательно на уровне базы данных, скажем, шаг 1 занимает 2 минуты, шаг 2 занимает 1 минуту и ​​шаг 3 всего несколько секунд.

  2. Допустим, вышеописанный метод Dao завершается, и базовый db все еще выполняет обновления, и сразу же пользователь нажимает на выход из системы и вызывается код выхода из системы, который пытается выполнить откат () любой ожидающей транзакции и также закройте Соединение с БД.

Будет ли оно ждать завершения основной транзакции или произойдет откат.

Будет закрыто (), как-нибудь повлияет на незафиксированные транзакции

Действительно ли необходимо установить AutoCommit (true) в finally, я вижу блокировки в таблицах моей базы данных, если я не вызову этот оператор. В идеале commit () или rollback () должны вернуть БД в исходное состояние.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...