개요
변경 트랜잭션이 수행 중일 때 해당 세션을 강제로 끊거나 세션 타임 아웃 설정에 의해 트랜잭션이 중단된 경우 해당 트랜잭션은 롤백(ROLLBACK)이 진행됩니다.
다음은 롤백 중인 쿼리를 확인하는 방법입니다.
버전
Altibase 5.1.5 이상
확인 방법
ALTIBASE HDB 5.1.5 이상 버전에서 모두 사용가능한 방법
아래 쿼리 수행 결과에서CURRENT_UNDO_NEXT_LSN_FILENO 컬럼과CURRENT_UNDO_NEXT_LSN_OFFSET 컬럼의 값이 점점 줄어들고 있다면 해당 트랜잭션이 롤백 중임을 알 수 있습니다.
롤백 작업은 변경 트랜잭션이 수행했던 작업을 취소하는 undo 작업을 수행합니다.
CURRENT_UNDO_NEXT_LSN으로 시작하는 컬럼은 이 undo 작업이 진행하면서 undo 할 다음 로그(logfile)를 가리키는 값을 의미합니다.
롤백 전에 수행된 변경 트랜잭션이 logfile 1 ~ logilfe 10 까지 기록되었다면 롤백 시 undo 는 logfile 10 부터 진행되기 때문에 CURRENT_UNDO_NEXT_LSN 으로 시작하는 컬럼의 값이 줄어든다는 것으로 롤백이 수행 중임을 알 수 있습니다.
- 해당 쿼리가 수행한 시각은 FIRST_UPDATE_TIME
- 롤백 시작 시각은 FIRST_UPDATE_TIME + TOTAL
ALTIBASE HDB 6.1.1.2.0 부터 변경된 확인 방법
ALTIBASE HDB 6.1.1.2.0 버전부터 v$transaction 의 status 컬럼으로 롤백 중인 문장을 간단하게 확인할 수 있게 되었습니다.
select query from v$statement where session_id in (select session_id from v$transaction where status=4);
v$transaction 의 status 컬럼은 트랜잭션 상태를 나타나는 값으로 0 ~ 6 값을 가질 수 있으며 값의 의미는 아래와 같습니다.
- 0: BEGIN : 트랜잭션 시작 됨
- 1: PRECOMMIT : 사용 안함
- 2: COMMIT_IN_MEMORY : 사용 안함
- 3: COMMIT :트랜잭션 커밋 됨
- 4: ABORT :롤백되어 abort 됨
- 5: BLOCKED :Lock 또는 다른 트랜잭션을 위해 대기함
- 6: END :트랜잭션을 다 사용하여 Free된 상태