Problem
When there are large amount of data to be inserted into a table, it is better to use direct path insert. To do direct path insert, we can specify hit /*+ append */ as shown below.
SQL> insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a;However, if we do another direct path insert into the same table, there will be error, ORA-12838: cannot read/modify an object after modifying it in parallel.
SQL> insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a; insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a * ERROR at line 1: ORA-12838: cannot read/modify an object after modifying it in parallelTo do another direct path insert into the same table, we need to commit the first one first.
SQL> commit; Commit complete. SQL> insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a; 4 rows created.Conventional insert does not have the issue as shown below.
SQL> insert into tblabc select a.id, a.a from TBL_TEST3 a; 4 rows created. SQL> insert into tblabc select a.id, a.a from TBL_TEST3 a; 4 rows created. SQL> insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a; 4 rows created. SQL> insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a; insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a * ERROR at line 1: ORA-12838: cannot read/modify an object after modifying it in parallel SQL> commit; Commit complete. SQL> insert /*+ append */ into tblabc select a.id, a.a from TBL_TEST3 a; 4 rows created.
No comments:
Post a Comment