mardi 23 juin 2015

ORA-12838

Si on se sert de INSERT /*+ APPEND */ pour ajouter des lignes à une table, il faut lancer un COMMIT tout de suite après. Sinon, et on essaie de lire ou modifier la table, Oracle répond avec ORA-12838. Voici un exemple de ce problème. Je l’ai testé sur Oracle 11.2:

SQL> create table tab1
  2  as select * from dba_tables
  3  where 1 = 2
  4  /
 
Table created.
 
SQL> insert /*+ append */ into tab1
  2  select * from dba_tables
  3  /
 
3163 rows created.
 
SQL> select count(*) from tab1
  2  /
select count(*) from tab1
                     *
ERROR at line 1:
ORA-12838: impossible de lire/modifier un objet après
modification en parallèle
 
SQL> commit
  2  /
 
Commit complete.
 
SQL> select count(*) from tab1
  2  /
 
  COUNT(*)
----------
      3163
 
SQL>