ORA-00054: ресурс занят и получен с указанием NOWAIT или истекло время ожидания, исключением является java.sql.SQLException

jdbcTemplate.execute("alter table UKIADATA rename to UKIADATA_temp");

jdbcTemplate.execute("alter table UKIADATA_2 rename to UKIADATA");

jdbcTemplate.execute("alter table UKIADATA_temp rename to UKIADATA_2");

logger.info("Tables swapped.");

Я получаю сообщение об ошибке SQL [переименовать таблицу UKIADATA в UKIADATA_temp]; ORA-00054: ресурс занят и получен с указанием NOWAIT или истекло время ожидания; вложенным исключением является java.sql.SQLException: ORA-00054: ресурс занят и получен с указанным NOWAIT или истек срок ожидания,

В дополнение к этому не могли бы вы помочь мне, как я могу вставить операторы фиксации в этот фрагмент кода.


person Mona Dhar    schedule 05.10.2017    source источник


Ответы (1)


В данный момент таблица, которую вы пытаетесь переименовать, занята другим сеансом (чтение, вставка данных, обновление, удаление). Чтобы ваш запрос выполнялся без этой ошибки, вы должны закрыть другие сеансы или прекратить доступ к этой таблице. Операции DDL не требуют исправления, они требуют исправления только команд вставки, обновления, удаления. Любая команда DDL также зафиксирует данные перед началом своей работы. Этот SQL определит, какие сеансы блокируют таблицу. И следующий SQL принудительно завершит эти сеансы.

select s.sid, s.serial#
from v$locked_object l, dba_objects o, v$session s
where  o.object_name in('UKIADATA','UKIADATA_2')  and 
l.object_id = o.object_id and l.session_id = s.sid 

alter system kill session 'sid,serial#'
person Dmitry Demin    schedule 05.10.2017
comment
Каково решение, как я могу закрыть сеанс в коде перед изменением таблицы базы данных - person Mona Dhar; 05.10.2017