본문 바로가기

트랜잭션

(3)
ORA-22990: LOB 위치는 트랜잭션을 걸칠 수 없습니다 LOB(Longraw, Blob, Clob) 등을 select ... for update 등등의 방법으로 DB 에 넣으면서 Stream 을 flush() 할 때.. 아래와 같이, flush() 가 commit() 뒤에 존재하면 오류. try{ ... conn.commit(); }catch(Exception e){ ... }finally{ ... stream.flush(); } 예외 상황이 발생하더라도 flush() 하고자 finally 에 넣겠다는 의도였겠지만.. DB 상의 LOB 처리시에는 try 문 안에서 flush() 한 다음 commit() 하고 finally 에서 close() 하는 것이 맞음.
하나의 트랜잭션 안에서 sysdate 가 다른 값이 세팅될 수 있다..? .java 에서 하나의 트랜잭션으로 최초와 마지막 insert 문에 sysdate 를 넣는 문장이 있고,첫 insert 문장이 실행되고 마지막 insert 문장이 실행될 때 1초의 시차가 있었다면..첫번째 insert 문장의 sysdate 항목과 마지막 insert 문장의 sysdate 항목은 1초의 차이가 난다. 그리고, 첫번째 insert 문장의 sysdate 가 마지막 insert 문장의 sysdate 항목 보다 빠르다고는 할 수 없다.이것은 DBMS 가 어떻게 처리했느냐에 따라 다르다.특히, DBMS 의 CPU 가 여럿이라면.. 병렬 처리의 폐해(?)가 적용될 수 있으므로 유의. 이를 동일 시각으로 맞춰주려면,트랜잭션 초입에 sysdate 를 select 해서 그 값을 가지고 있다가,매 문장에서 ..
ConcurrentModificationException, Transcation 이 중첩될 때도 발생 DB Transaction 을 태울 때,중첩이 되는 경우 ConcurrentModificationException 이 발생할 수 있다. 이게 또 항상 발생하는 것은 아님.. ㅠ.아무튼 트랜잭션은 중첩하지 않도록 작성하는 것이 좋다. http://blog.naver.com/wpdus2694/220827942824List 나 ArrayList 를 for 문에서 .remove() 할 때도..이 때는 for 문을 사용하지 말고 while 문에서 Iterator 를 사용하면 .remove() 된 내용을 감안하니 에러가 없다 한다. http://bryan7.tistory.com/196Multi-thread 환경에서 발생..aspectjtools 1.7.4 버전에서 보완되었다 한다.그런데, 역시나 for 문을 돌릴 ..