[PL SQL] erreur "Snapshot trop vieux, segment d'annulation..."
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:
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:
Citation:
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.