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 [alter table UKIADATA rename to UKIADATA_temp]; ORA-00054:资源繁忙并在指定NOWAIT或超时过期时获取 ;嵌套异常是java.sql.SQLException:ORA-00054:资源繁忙并且在指定NOWAIT或超时过期时获取,
除此之外,您可以帮助我如何在这段代码中插入commit语句。
答案 0 :(得分: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#'