set linesize 200 define off echo on -- -- Analisar Jobs -- COLUMN LOG_USER FORMAT A10 COLUMN PRIV_USER FORMAT A10 COLUMN SCHEMA_USER FORMAT A10 COLUMN FAILURES FORMAT 99 COLUMN WHAT FORMAT A70 SELECT JOB, BROKEN, LAST_DATE, LOG_USER, PRIV_USER, SCHEMA_USER ,FAILURES ,WHAT FROM DBA_JOBS ORDER BY WHAT /
Obs. ORA-12011 => Verifique se LOG_USER=SCHEMA_USER.
O ideal é o LOG_USER=PRIV_USER=SCHEMA_USER.
Para não ter trabalho drop o job e crie com o usuario schema_user.
Pegue os dados do job
-- -- PARA EXECUTAR O QUE ESTAVA EM BROKEN -- SELECT 'EXECUTE '||WHAT FROM DBA_JOBS& WHERE BROKEN='Y' ORDER BY 1 / -- -- RETIRAR DE BROKEN --- SELECT 'EXECUTE SYS.DBMS_IJOB.BROKEN('||JOB||',FALSE);' FROM DBA_JOBS WHERE BROKEN='Y' -- -- Analisar datas / Intervalos -- COLUMN LOG_USER FORMAT A10 COLUMN PRIV_USER FORMAT A10 COLUMN SCHEMA_USER FORMAT A10 COLUMN FAILURES FORMAT 99 COLUMN WHAT FORMAT A70 SELECT JOB, LAST_DATE, NEXT_DATE, INTERVAL, BROKEN, SCHEMA_USER, FAILURES, WHAT FROM DBA_JOBS ORDER BY 2/ Para forçar a execução de algum job. ======================================= exec dbms_job.run(numero do job); Para remover um job. ==================== execute dbms_job.remove(numero do job); Para colocar um job em Broken. ================================= execute DBMS_JOB.BROKEN(numero do job,true); Para retirar um job em broken. =============================== execute DBMS_JOB.BROKEN(numero do job,false);
Para alterar um job
DBMS_JOB.CHANGE ( job IN BINARY_INTEGER, what IN VARCHAR2, next_date IN DATE, interval IN VARCHAR2, instance IN BINARY_INTEGER DEFAULT NULL, force IN BOOLEAN DEFAULT FALSE);
— Aconselho a utilizar o script abaixo.
Para recriar um job a partir de outro job.
set line 155 set feedback off set pagesize 0 select 'DECLARE ' || CHR(10) || ' JOBNO INTEGER; ' || CHR(10) || ' BEGIN ' ||CHR(10) || ' DBMS_JOB.SUBMIT(JOBNO, ''' || replace(WHAT,'''','''''') || ''',' || CHR(10) ||'to_date('''|| to_char(next_date,'DD/MM/YYYY HH24:MI:SS') ||''',''DD/MM/YYYY HH24:MI:SS'')'||',' || CHR(10) || '''' || INTERVAL || ''');' || CHR(10) || 'END;' || CHR(10) || '/' from dba_jobs where log_user = upper('&log_user'); set line 132 set feedback on set pagesize 14 /
— Para remover o job e cria-lo novamente com os mesmos parâmetros com sysdate ( a partir de agora)
select 'execute DBMS_JOB.BROKEN('||to_char(job)||','||'true);' ||chr(10)|| 'execute dbms_job.remove('||to_char(job)||');' ||chr(10)|| 'DECLARE ' || CHR(10) || ' JOBNO INTEGER; ' || CHR(10) || ' BEGIN ' ||CHR(10) || ' DBMS_JOB.SUBMIT(JOBNO, ''' || replace(WHAT,'''','''''') || ''',' || CHR(10) || 'to_date('''|| to_char(SYSDATE,'DD/MM/YYYY HH24:MI:SS') ||''',''DD/MM/YYYY HH24:MI:SS'')'||',' || CHR(10) || '''' || INTERVAL || ''');' || CHR(10) ||'END;' || CHR(10) || '/' from USER_jobs /
— Refaz o que estava em broken com a ultima execução
select 'execute DBMS_JOB.BROKEN('||to_char(job)||','||'true);' ||chr(10)|| 'execute dbms_job.remove('||to_char(job)||');' ||chr(10)|| 'DECLARE ' || CHR(10) || ' JOBNO INTEGER; ' || CHR(10) || ' BEGIN ' || CHR(10) || ' DBMS_JOB.SUBMIT(JOBNO, ''' || replace(WHAT,'''','''''') || ''',' || CHR(10) || 'to_date('''|| to_char(NVL(LAST_DATE,SYSDATE),'DD/MM/YYYY HH24:MI:SS') ||''',''DD/MM/YYYY HH24:MI:SS'')'||',' || CHR(10) || '''' || INTERVAL || ''');' || CHR(10) || 'END;' || CHR(10) || '/' from user_jobs where broken='Y' /
— Veja o que foi refeito após broken
COLUMN LOG_USER FORMAT A10 COLUMN PRIV_USER FORMAT A10 COLUMN SCHEMA_USER FORMAT A10 COLUMN FAILURESFORMAT 99 COLUMN WHAT FORMAT A70
SELECT JOBBROKEN ,LAST_DATE,LOG_USER,PRIV_USER,SCHEMA_USER ,FAILURES ,WHAT USER_JOBS where FAILURES is null /
— Executa o que estava em broken
select 'exec dbms_job.run('||job||');' FROM USER_JOBS where FAILURES is null /
Para alterar o what de um job.
exec DBMS_JOB.WHAT(numero do job,'novo what');
Para alterar a instance de um job.
exec DBMS_JOB.INSTANCE(numero do job,'instance');
Lembrando que todos os comandos foram escritos como se você fosse o dono do job.
Caso você não seja o dono do job você terá de efetuar a seguinte sintaxe.
exec sys.dbms_ijob.comando...
exemplo:
exec sys.dbms_ijob.run(numero do job); SYS.DBMS_IJOB.BROKEN(27,FALSE); Procedimento PL/SQL concluído com sucesso. exec sys.dbms_ijob.run(27); EXECUTE SYS.DBMS_IJOB.BROKEN(44,FALSE); Procedimento PL/SQL concluído com sucesso. exec sys.dbms_ijob.run(44);