Answer
This happens when the scheduling formula computes its next run time relative to the current SYSDATE — once the job executes, it reschedules itself for the same time later that same day (since the formula re-evaluates against 'today'), the background scheduler then notices that newly-scheduled run for today hasn't happened yet and fires it again, and this repeats until enough time passes that the formula's own logic finally rolls over to a genuinely future date (like the following month). The fix is to base the formula on a SYSDATE that's already pushed into the future rather than the current date — for example, computing off add_months(SYSDATE, 1) so the very first evaluation already resolves to a date safely beyond 'today,' preventing the same-day reschedule loop from ever starting.