[DBA] ORA-02266 sur truncate partition
Bonjour,
j'ai créé un script de purge mensuel qui est le suivant :
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
| CREATE OR REPLACE PROCEDURE PURGE
IS
cnt_transfert_actif PLS_INTEGER;
mois_courant USER_TAB_PARTITIONS.partition_position%TYPE;
CURSOR partition_cur (mois_courant USER_TAB_PARTITIONS.partition_position%TYPE) IS
SELECT DISTINCT partition_name, partition_position
FROM USER_TAB_PARTITIONS
WHERE partition_position != mois_courant
ORDER BY partition_position;
BEGIN
SELECT TO_NUMBER (TO_CHAR (SYSDATE, 'MM'))
INTO mois_courant
FROM DUAL;
FOR partition_rec IN partition_cur (mois_courant)
LOOP
DBMS_OUTPUT.put_line ('La purge du mois de ' || partition_rec.partition_name || ' a commence');
EXECUTE IMMEDIATE 'ALTER TABLE INSTANCE_PAR_TRANSFERT TRUNCATE PARTITION ' || partition_rec.partition_name || ' REUSE STORAGE';
EXECUTE IMMEDIATE 'ALTER TABLE TACHE_ELEMENTAIRE TRUNCATE PARTITION ' || partition_rec.partition_name || ' REUSE STORAGE';
EXECUTE IMMEDIATE 'ALTER TABLE ETAT_PAR_TRANSFERT TRUNCATE PARTITION ' || partition_rec.partition_name || ' REUSE STORAGE';
EXECUTE IMMEDIATE 'ALTER TABLE TRANSFERT TRUNCATE PARTITION ' || partition_rec.partition_name || ' REUSE STORAGE';
DBMS_OUTPUT.put_line ('La purge du mois de ' || partition_rec.partition_name || ' termine');
COMMIT;
END LOOP;
END PURGE;
/ |
Lorsque je le lance, j'obtiens ça comme erreur :
Citation:
begin
purge;
end;
ORA-02266: Les clés primaires/uniques de la table référencées par des clés étrangères
ORA-06512: à "SEB.PURGE", ligne 24
ORA-06512: à ligne 2
Une clef primaire est référencé dans d'autres tables. Je ne vois pas trop
comment faire pour m'en sortir. Je travaille sous Toad & Oracle 9i