En la versión de Oracle 19c se me presentó error al tratar de realizar la consulta haca la vista DBA_JOBS.
ORA-01873: the leading precision of the interval is too small
Revisando en la documentación de Oracle "Querying DBA_JOBS Encounter ORA-01873 (Doc ID 2710794.1)" se indica que
CAUSA:
Lista de verificación de la herramienta de actualización previa de la base de datos. (ID de documento 2380601.1)A partir de Oracle Database 19c, los trabajos creados y administrados a través del paquete DBMS_JOB en versiones anteriores de la base de datosse volverán a crear utilizando la arquitectura Oracle Scheduler. Es posible que los trabajos que no se hayan vuelto a crear correctamente no funcionen correctamente después de la actualización.
SOLUCION
Ignore la columna TOTAL_TIME y seleccione otras columnas para obtener la información de la consulta DBA_JOBS.
O
Consultando dba_scheduler_jobs y verá todos los trabajos que fueron creados usando dbms_job.select * from dba_scheduler_jobs;
Como vemos la solución esta en omitir de la consulta el campo TOTAL_TIME de la vista DBA_JOBS o usar DBA_SCHEDULER_JOBS.
Como en mi caso esta solución no me ayudaba de mucho por que no pdodia editar el programa que hacia uso de esa vista lo que realice es editar la vista DBA_JOBS. Si ya se que me diran que no debemos hacaerlo ya que es un objeto del SYS, pero les comento que no todo esta escrito en piedra asi que lo hice y me funcionó.
Deben de conectarse con el SYS para poder realizar la modificación.
(
JOB,
LOG_USER,
PRIV_USER,
SCHEMA_USER,
LAST_DATE,
LAST_SEC,
THIS_DATE,
THIS_SEC,
NEXT_DATE,
NEXT_SEC,
TOTAL_TIME,
BROKEN,
INTERVAL,
FAILURES,
WHAT,
NLS_ENV,
MISC_ENV,
INSTANCE
)
BEQUEATH DEFINER AS
SELECT m.dbms_job_number JOB,
j.creator LOG_USER,
u.name PRIV_USER,
u.name SCHEMA_USER,
j.last_start_date LAST_DATE,
SUBSTR ( TO_CHAR ( j.last_start_date, 'HH24:MI:SS' ), 1, 8 ) LAST_SEC,
DECODE ( BITAND ( j.job_status, 2 ), 2, j.last_start_date, NULL ) THIS_DATE,
DECODE ( BITAND ( j.job_status, 2 ), 2, SUBSTR ( TO_CHAR ( j.last_start_date, 'HH24:MI:SS' ), 1, 8 ), NULL )
THIS_SEC,
j.next_run_date NEXT_DATE,
SUBSTR ( TO_CHAR ( j.next_run_date, 'HH24:MI:SS' ), 1, 8 ) NEXT_SEC,
( CASE
WHEN j.last_end_date > j.last_start_date THEN
--EXTRACT (
--DAY FROM (j.last_end_date - j.last_start_date) * 86400)
(CAST(j.last_end_date AS DATE)-CAST(j.last_start_date AS DATE)) * 86400
ELSE
0
END )
TOTAL_TIME, -- Scheduler does not track total time
DECODE ( BITAND ( j.job_status, 1 ), 0, 'Y', 'N' ) BROKEN,
DECODE ( BITAND ( j.flags, 1024 + 4096 + 134217728 ), 0, j.schedule_expr, NULL ) INTERVAL,
j.failure_count FAILURES,
j.program_action WHAT,
j.nls_env NLS_ENV,
j.env MISC_ENV,
NVL ( j.instance_id, 0 ) INSTANCE
FROM sys.scheduler$_dbmsjob_map m
LEFT OUTER JOIN sys.obj$ o ON ( o.name = m.job_name )
LEFT OUTER JOIN sys.user$ u ON ( u.name = m.job_owner )
LEFT OUTER JOIN sys.scheduler$_job j ON ( j.obj# = o.obj# )
WHERE o.owner# = u.user#;
Se marca con rojo lo que viene por defecto y genera el error y se marca con azul con lo que se remplazó y funcionó.
Espero les sirva.
Nice, thanks!
ResponderEliminar