J'ai réalise la procédure ci-dessous sous Oracle afin de supprimer le contenu de certaines tables et de les mettre à jour à partir du contenu des tables correspondantes provenant d'un schéma d'une autre base.

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
PROCEDURE MAJ_DATA_MAELIS  IS
 
CURSOR liste_tables_cursor IS
SELECT table_name
FROM user_tables;
 
req_delete VARCHAR2(4000);
req_insert VARCHAR2(4000);
 
err_msg VARCHAR2(80):=null;
err_num NUMBER:=0;
 
BEGIN
 
FOR liste_tables_rec IN liste_tables_cursor
  LOOP
    req_delete := 'TRUNCATE TABLE ' || liste_tables_rec.table_name;
    req_insert := 'INSERT INTO ' || liste_tables_rec.table_name || ' SELECT * FROM NOM_SCHEMA.'|| liste_tables_rec.table_name || '@BASE';
 
    BEGIN
      EXECUTE IMMEDIATE req_delete;
      commit;
      SET TRANSACTION USE ROLLBACK SEGMENT BIGRBS;
      EXECUTE IMMEDIATE req_insert;
      commit;
      SET TRANSACTION USE ROLLBACK SEGMENT BIGRBS;
      DBMS_OUTPUT.put_line('la table ' || liste_tables_rec.table_name || ' a été mise à jour');
    EXCEPTION
      WHEN OTHERS THEN
        err_num := SQLCODE;
        err_msg := SUBSTR(SQLERRM, 1, 80);
        dbms_output.put_line( 'Err num = ' || to_char(err_num) );
        dbms_output.put_line( 'Err msg = ' || err_msg );
    END;
  END LOOP;
END maj_data_maelis;
Seules les 12ères tables sur 16 ont correctement été mises à jour. Je recois les erreurs suivantes:
ORA-01555: Snapshot tros vieux, segment d'annulation 1, nommé "BIGRBS" tros petit
ORA-06512: à "MON_SCHEMA.MA_PROCEDURE", ligne 16
ORA-06512: à ligne 2
Pourtant la taille du rollback segment a bien été augmentée et j'ai ajouté les lignes comme "commit;" et "SET TRANSACTION USE ROLLBACK SEGMENT BIGRBS;" pour gérer ce problème mais je ne trouve pas de solution.
D'ou cela peut-il provenir?
D'avance merci.