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指定或超时过期时获取,ORA-00054:资源忙,并与指定的或超时过期NOWAIT获取,例外的是java.sql.SQLException中

除此之外,您可以帮助我如何在此段代码中插入提交语句。

此刻,您尝试重命名的表被另一个会话占用(读取,插入数据,更新,删除)。为了让您的请求在没有此错误的情况下运行,您必须关闭其他会话或停止访问此表。 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#' 
+0

什么是解决方案,如何在更改数据库表之前关闭代码中的会话 –