2009-04-23 19 views
1

J'ai un problème:SYSDATE - 1 erreur sur la fonction pl/sql

quand j'émets cette fonction ci-dessous ti me donne l'erreur suivante:

select 'EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME =>'''||name||'''||,OPTIONS=>DBMS_LOGMNR.NEW);' 
from v\$archived_log 
where name is not null; 

select 'EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME =>'''||name||'''||,OPTIONS=>DBMS_LOGMNR.ADDFILE);' 
from v\$archived_log 
where name is not null; 


EXECUTE DBMS_LOGMNR.START_LOGMNR(STARTTIME => SYSDATE - 1, ENDTIME => SYSDATE, 
OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE + 
DBMS_LOGMNR.COMMITTED_DATA_ONLY + DBMS_LOGMNR.PRINT_PRETTY_SQL); 

Error: 

* 
ERROR at line 1: 
ORA-01291: missing logfile 
ORA-06512: at "SYS.DBMS_LOGMNR", line 58 
ORA-06512: at line 1 

Mais j'ai ajouté tous les journaux archivés pour plusieurs jours avant et mon sysdate est à aujourd'hui.

Veuillez nous aider à résoudre ce problème.

merci.

Reagrds

Ayo

+0

Vous avez effectué un DBMS_LOGMNR.ADD_LOGFILE (xxxxx) juste avant cet appel? Pouvez-vous éditer pour montrer cela aussi? – curtisk

Répondre

0

paraître comme si vous exécutiez la sélection, mais pas d'exécuter les sentences.

+0

Merci pour votre réponse, mais que voulez-vous dire?, Devrais-je utiliser la commande d'exécution seulement et supprimer la sélection. Veuillez expliquer. offres d'emploi –

1

Vous devez prendre les valeurs des deux premières requêtes et les exécuter réellement, et vous semblez avoir une erreur de syntaxe de toute façon.

BEGIN 
    FOR CUR_NEW IN ( 
    select 'CALL DBMS_LOGMNR.ADD_LOGFILE(' || 
      'LOGFILENAME =>'''||name||''','|| 
      'OPTIONS=>DBMS_LOGMNR.NEW);' as COMM 
    from v$archived_log 
    where name is not null 
) LOOP 
    EXECUTE IMMEDIATE CUR_NEW.COMM; 
    END LOOP; 

    FOR CUR_ADD IN ( 
    select 'CALL DBMS_LOGMNR.ADD_LOGFILE(' || 
      'LOGFILENAME =>'''||name||''','|| 
      'OPTIONS=>DBMS_LOGMNR.ADDFILE);' as COMM 
    from v$archived_log 
    where name is not null 
) LOOP 
    EXECUTE IMMEDIATE CUR_ADD.COMM; 
    END LOOP; 

    EXECUTE IMMEDIATE 'CALL DBMS_LOGMNR.START_LOGMNR(' || 
    'STARTTIME => SYSDATE - 1, ' || 
    'ENDTIME => SYSDATE, ' || 
    'OPTIONS => ' || 
     ' DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG '|| 
     '+ DBMS_LOGMNR.CONTINUOUS_MINE '|| 
     '+ DBMS_LOGMNR.COMMITTED_DATA_ONLY '|| 
     '+ DBMS_LOGMNR.PRINT_PRETTY_SQL)'; 
END;