본문 바로가기

IT관련

오라클 Parallel DML 주의 사항 (ORA-12838 : cannot read/modify)

병렬 DML 작업 후에 갑자기 select 가 에러나는 황당한 경험을 하게 되는 경우가 있습니다.

보통 Oracle 에서는 어떤 DML 도 조회(Select)에는 영향을 주지않는다는 확신을 가지고 있는 사람들이 많은데, Parallel DML 은 예외입니다.

Parallel DML 후에 commit 이나 rollback 을 해주지 않으면 아래와 같이 ORA-12838 에러를 만나게 됩니다.

 

 

조회(Select) 만 저렇게 에러가 나는게 아니라, 해당 Table 에 TM Lock 을 걸어버리기 때문에 다른 DML 도 안됩니다.

 

$ 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 DML 만 저런 현상이 있는게 아니라, /*+ append */ 힌트를 사용하는 Direct Path Load 의 경우도 ORA-12838 에러가 발생합니다.