Bonjour à tous,

J'ai 2 bases de données Oracle 9.2, chacune sur un serveur unix AIX 5.3.
Dans chacune des bases j'ai une table AA_CATHY et une procédure PR_TOTO qui fait un insert dans cette table.

Voici ma procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
PROCEDURE PR_TOTO
IS
  vc_sqlcode     NUMBER := -20000;        -- error code
  vc_sqlerrm     VARCHAR2(100);           -- error message
  BEGIN
 
  INSERT INTO AA_CATHY(NOM,CODE) VALUES ('123456','A');
 
  EXCEPTION
     WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('PB');
         vc_sqlerrm := SUBSTR(SQLERRM, 1, 100);
         ROLLBACK;
         RAISE_APPLICATION_ERROR(vc_sqlcode,vc_sqlerrm);
  END PR_TOTO;
Il n'y a pas de "COMMIT" volontairement

Sur la base 1, lorsque j'exécute les commandes suivantes par sqlplus, l'insert de ma procédure est automatiquement commité après le "exit".

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
SET SERVEROUTPUT ON
WHENEVER SQLERROR EXIT 1
BEGIN
PR_TOTO;
EXCEPTION
   WHEN OTHERS THEN RAISE;
END;
/
 
exit

Sur la base 2, l'insert de ma procédure n'est pas commité après le "exit".

Les paramètres de mes 2 bases semblent tous identiques.
Par exple, le paramètre AUTOCOMMIT est à OFF sur les 2 bases
Je ne comprends pas pourquoi lorsque je sors de sqlplus il n'y a pas de "commit" de fait dans ma base 2 alors que c'est le cas dans la base 1 ?

Celà ne semble pas venir d'un paramètre de sqlplus sur les serveur unix car j'ai la même différence avec mon client sqlplus (windows xp).

Il n'y a pas si longtemps, la base 2 faisait le "commit" lorsqu'on sortait d'une session sqlplus mais ce n'est plus le cas. Quelqu'un a du toucher un paramètre, je ne sais pas.

Je sais juste qu'il y a eu des tests sur l'isolation level des transactions de fait avec les commandes suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
set transaction READ WRITE;
 
set transaction read only;
 
set transaction isolation level read committed;
 
set transaction isolation level serializable;
Mais ces tests ne concernent que les transactions qui ont suivies il y a plus de 3 semaines, depuis les utilisateurs se sont déconnectés. Il n'y a pas eu d'alter session ou alter system à ma connaissance.

Je ne veux pas ajouter un COMMIT dans ma procédure, ce qui résoudrait mon pb, mais juste comprendre pourquoi la sortie de ma session sqlplus ne commite plus.

Merci de votre aide.

Cat