개발노트

ORA-12838 : Cannot read/modify an object after modifying it in parallel 본문

ERROR

ORA-12838 : Cannot read/modify an object after modifying it in parallel

개발자? 2022. 8. 11. 20:08

원인: 하나의 트랜잭션 내에서 parallel 또는 append 힌트가 적용된 DML 수행 후 commit, rollback 을 하지 않고 객체에 접근할 때 발생

해결: 트랜잭션 단위를 쪼개야 한다. parallel 또는 append 힌트가 적요된 DML 수행 후 바로 Commit 이나 Rollback 수행

 oerr ora 12838
12838, 00000, “cannot read/modify an object after modifying it in parallel”
// *Cause: Within the same transaction, an attempt was made to add read or
// modification statements on a table after it had been modified in parallel
// or with direct load. This is not permitted.
// *Action: Rewrite the transaction, or break it up into two transactions:
// one containing the initial modification and the second containing the
// parallel modification operation.

 

parallel 작업으로 insert 를 수행한 후, insert 대상 테이블을 조회할 때 오류가 발생했다.

 

insert /*+ parallel(16) */ into A 

select * from B;


insert into C

select * from A;

-- ora-12838 발생!!!

commit;

 

나의 프로시저 흐름은 이러했다.

A에는 데이터가 제대로 추가가 되었는데, C 테이블에는 데이터가 추가가 안되었다.

 

보통 Oracle 에선 어떤 DML 도 조회(Select)에는 영향을 주지않는다고 알고 있었으나,

Parallel dml 은 예외였다.

Parallel dml 을 수행한 후 commit, rollback을 해주지 않았을 때 'ora-12838' 에러가 발생했고, 이후에 dml 이나 select 쿼리가 정상수행되지 않는다.

구글링을 해보니 이런 현상은 append 힌트를 사용한 경우에도 적용이 되었다.

Direct path Load 작업들에 적용되는 룰인 듯 하다.

 

 

반응형

'ERROR' 카테고리의 다른 글

ORA-14400: inserted partition key does not map to any partition  (0) 2023.04.03
Comments