프린트 하기

OS 환경 : Oracle Linux 8.4 (64bit)

 

DB 환경 : Oracle Database 23.5.0.24.07 ai for Oracle Cloud and Engineered Systems

 

에러 : ORA-63302: Transaction must roll back

Priority Transactions 기능을 테스트 하던 중 발생한 에러
관련 게시글
참고 : 오라클 23ai 신기능 트랜잭션 우선순위 설정 및 자동 롤백 ( https://positivemh.tistory.com/1179 )

 

 

a 세션에서 Priority level 를 low 로 설정 후 t1 테이블 update 진행

1
2
SQL> alter session set txn_priority = low;
SQL> update t1 set col1 = 1111;

 

 

b 세션에서 Priority level 를 medium 으로 설정 후 t1 테이블 update 진행

1
2
3
SQL> alter session set txn_priority = medium;
SQL> update t1 set col1 = 2222;
(대기)

priority_txns_medium_wait_target 시간(초) 만큼 대기하다가 b 세션 update 가 성공함

 

 

a 세션에서 테스트 중이던 테이블 조회

1
2
3
4
5
6
7
SQL> select * from t1;
select * from t1
              *
ERROR at line 1:
ORA-63302: Transaction must roll back
ORA-63300: Transaction is automatically rolled back since it is blocking a higher priority transaction from another session.
Help: https://docs.oracle.com/error-help/db/ora-63302/

에러가 발생함

 

 

조금 있다가 다시 쿼리하면 ORA-63302만 발생함

1
2
3
4
5
SQL> select * from t1;
*
ERROR at line 1:
ORA-63302: Transaction must roll back
Help: https://docs.oracle.com/error-help/db/ora-63302/

 

 

이때는 commit 및 dml 도 되지 않음

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> commit;
commit
*
ERROR at line 1:
ORA-63302: Transaction must roll back
Help: https://docs.oracle.com/error-help/db/ora-63302/
 
SQL> insert into t1 values (6);
insert into t1 values (6)
            *
ERROR at line 1:
ORA-63302: Transaction must roll back
Help: https://docs.oracle.com/error-help/db/ora-63302/

 

 

이때 세션 a는 v$transaction 에서 조회되지 않음

1
2
3
SQL> select * from v$TRANSACTION where addr = (select taddr from v$session where sid = 298);
 
no rows selected

 

 

세션 상태는 inactive 상태임

1
2
3
4
5
6
7
8
9
10
11
SQL>
set lines 200 pages 1000
col username for a10
col program for a30
select sid, serial#, status, username, program 
from v$session 
where sid = 298;
 
       SID    SERIAL# STATUS   USERNAME   PROGRAM
---------- ---------- -------- ---------- ------------------------------
       298      15143 INACTIVE IMSI       sqlplus@ora23 (TNS V1-V3)

 

 

해결 방법 : 롤백 명령을 입력

롤백명령을 입력

1
2
3
SQL> rollback;
 
Rollback complete.

 

 

테이블 재조회

1
2
3
4
5
6
7
8
9
SQL> select * from t1;
 
      COL1
----------
         1
         2
         3
         4
         5

정상적으로 롤백된 결과가 나옴

 

 

원인 : 

Priority Transactions 기능 중 일부로 우선순위가 높은 트랜잭션에 의해 자동 롤백 된 뒤에는 명시적으로 해당 세션에서 rollback 를 입력해줘야 그다음 작업들이 가능함
a세션에서 rollback 명령을 입력하지 않아도 이미 트랜잭션은 롤백이 된 상태이지만 명시적으로 작성을 해줘야함

 

 

참조 : 

https://positivemh.tistory.com/1179