2017-10-05 140 views
1
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中

除此之外,您可以幫助我如何在此段代碼中插入提交語句。

回答

0

此刻,您嘗試重命名的表被另一個會話佔用(讀取,插入數據,更新,刪除)。爲了讓您的請求在沒有此錯誤的情況下運行,您必須關閉其他會話或停止訪問此表。 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

什麼是解決方案,如何在更改數據庫表之前關閉代碼中的會話 –

相關問題