transaction 2

Spring Batch와 직렬화 엑세스(ORA-08177) 오류 원인 및 해결

SQLException: ORA-08177: can't serialize access for this transactionSpring Batch 설정 중 '이 트랜잭션에 대한 직렬화 액세스를 할 수 없습니다.'는 에러가 발생했다. 결론부터 말하자면, 현재 애플리케이션의 트랜잭션 격리 수준이 직렬화(Serializable)로 설정되어 있는데, 이 규칙을 지키지 못해 발생한 에러이다. 여기서 '격리 수준'이란 트랜잭션 간의 동시성 문제를 해결하기 위한 규칙을 의미한다. 그중 Serializable 옵션은 한 트랜잭션이 특정 데이터를 읽는 동안, 다른 트랜잭션이 동일한 데이터에 접근/수정하는 것을 막기 위해 그 데이터에 잠금을 걸어 동시 접근을 방지한다. 따라서, 모든 트랜잭션이 마치 직렬로 실행되는 것처럼 ..

Spring 2024.12.14

트랜잭션의 특성(Commit, Rollback, Savepoint)

트랜잭션(Transaction)의 특성특징설명원자성(Atomicity)트랜잭션은 DB연산의 전부가 실행되거나 전혀 실행되지 않아야 한다.(ALL OR NOTHING) 즉, 트랜잭션의 처리가 완전히 끝나지 않았을 경우는 실행되지 않은 상태와 같아야 함.일관성(Consistency)트랜잭션 실행 결과로 DB상태가 모순되지 않아야 함.고립성, 격리성(Isolation)트랜잭션 실행 중에 생성되는 연산의 중간결과는 다른 트랜잭션이 접근할 수 없다.즉, 부분적인 실행 결과를 다른 트랜잭션이 볼 수 없음.영속성, 지속성(Durability)트랜잭션이 그 실행을 성공적으로 완료하면 그 결과는 영구적으로 보장이 되어야 한다.계좌이체는 한 계좌에서 현금이 인출된 후에 다른 계좌로 입금이 되는데, 현금이 인출되기 전에 다..

Database 2020.09.10