How to create scheduler for manually refresh Materialized View if the MV get need_compile stallness status
I'm successfully able to create a scheduler for my MV to refresh every minutes if the status stallness is not FRESH. Here's my solutions :

I created a schedules to be used in my scheduler:

BEGIN
    sys.dbms_scheduler.create_schedule(
    repeat_interval =&gt; 'FREQ=MINUTELY',
    start_date =&gt; to_timestamp_tz('2015-06-09 01:41:55 Asia/Jakarta', 'YYYY-MM-DD HH24:MI:SS TZR'),
    comments =&gt; 'Interval refresh 1 menit',
    schedule_name =&gt; '"SOME_SCHEMA"."REFRESH_MV"');
END;


After that I create DBMS_SCHEDULER to create a job like this :

BEGIN
sys.dbms_scheduler.create_job(
job_name =&gt; '"SOME_SCHEMA"."REFRESH_MV"',
job_type =&gt; 'PLSQL_BLOCK',
job_action =&gt; 'DECLARE
    mv_name USER_MVIEWS.MVIEW_NAME%type;
    mv_status USER_MVIEWS.STALENESS%type;
    mv_last USER_MVIEWS.LAST_REFRESH_TYPE%type;
    mv_state USER_MVIEWS.COMPILE_STATE%type;

    CURSOR check_mv
    IS SELECT MVIEW_NAME, STALENESS, LAST_REFRESH_TYPE, COMPILE_STATE FROM USER_MVIEWS WHERE MVIEW_NAME = ''MV_TEST_BRO'' ORDER BY MVIEW_NAME;

    BEGIN
        OPEN check_mv;

        LOOP
            FETCH check_mv INTO mv_name, mv_status, mv_last, mv_state;
            IF mv_status != ''FRESH'' THEN
                DBMS_REFRESH.REFRESH(name =&gt; ''SOME_SCHEMA.MINUTE_REFRESH'');
            ELSE
                EXIT;
            END IF;
            EXIT WHEN check_mv%NOTFOUND;

        END LOOP;

    CLOSE check_mv;
END;',
schedule_name =&gt; '"SOME_SCHEMA"."REFRESH_MV"',
job_class =&gt; '"DEFAULT_JOB_CLASS"',
comments =&gt; 'Refresh MV every 1 Minutes',
auto_drop =&gt; FALSE,
enabled =&gt; FALSE);
sys.dbms_scheduler.set_attribute( name =&gt; '"SOME_SCHEMA"."REFRESH_MV"', attribute =&gt; 'raise_events', value =&gt; dbms_scheduler.job_failed);
sys.dbms_scheduler.set_attribute( name =&gt; '"SOME_SCHEMA"."REFRESH_MV"', attribute =&gt; 'logging_level', value =&gt; DBMS_SCHEDULER.LOGGING_FAILED_RUNS);
sys.dbms_scheduler.set_attribute( name =&gt; '"SOME_SCHEMA"."REFRESH_MV"', attribute =&gt; 'restartable', value =&gt; TRUE);
sys.dbms_scheduler.enable( '"SOME_SCHEMA"."REFRESH_MV"' );
END;


In the job action, I checked stallness status for specified MV like MV_TEST_BRO but you can check the status for every MV you had. And I activated some attribut to raise event if the job failed, logging level, and restartable.

This job was running for a week now and no problem at all. My MV always FRESH every time. May be this post will help another who face the same problem like me. :D