2017-10-05 19 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_temp로 이름을 변경 UKIADATA 테이블을 변경] ORA-00054 : NOWAIT가 지정되거나 제한 시간이 만료되어 자원이 사용 중이고 획득되었습니다. ; 중첩 예외는 java.sql.SQLException입니다. ORA-00054 : 리소스가 사용 중이며 NOWAIT가 지정되거나 제한 시간이 만료되어 획득합니다.ORA-00054 : 바쁜 자원과 NOWAIT 지정 또는 제한 시간이 만료와 함께 취득, 예외는 java.sql.SQLException이

이 코드 이외에 commit 문을 삽입하는 방법은 무엇입니까?

답변

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

해결책은 무엇입니까? 데이터베이스 테이블을 변경하기 전에 코드에서 세션을 어떻게 닫을 수 있습니까? –