Publicado 21. mayo 2024
Actualizado en octubre de 2025
Introducción
Bienvenido de nuevo al blog. En esta publicación, le explicaremos cómo KeepTool 16.1 le ayuda a migrar trabajos dbms_jobheredados al Oracle Scheduler, más potente y flexible. El Scheduler ofrece funciones mejoradas, más control y una mejor compatibilidad a largo plazo.
Legado dbms_job Descripción
Muchas bases de datos Oracle siguen dependiendo del antiguo sistema de trabajos gestionado a través del dbms_job . Antes de Oracle 10g, esta era la única forma integrada de programar trabajos. Aunque muchos sistemas se han actualizado a lo largo de los años, muchos proyectos siguen manteniendo dbms_jobtareas basadas en .
En KeepTool (Hora), se muestra una descripción general de las tareas tradicionales, con menús contextuales que incluyen dbms_job las llamadas para gestionarlos.

Página de resumen de DBMS_JOB en Hora
Cada uno de estos trabajos se identifica con un número de trabajo. La columna «Qué» contiene un procedimiento o bloque PL/SQL que define la lógica, y la columna «Intervalo» contiene una expresión que calcula la próxima hora de ejecución.
La alternativa del programador de Oracle
A partir de Oracle 10g, el nuevo enfoque es dbms_scheduler. Los trabajos del programador se identifican mediante el propietario + el nombre del trabajo (no solo un número) e incluyen campos como Creador, Acción (superconjunto de «Qué») e Intervalo de repetición.

Página de descripción general de los trabajos del programador en Hora
Debido a estas mejoras, muchas publicaciones abogan por la migración al programador. En Oracle 19c, Oracle comenzó a convertir implícitamente dbms_job los trabajos internamente a trabajos del programador; los trabajos creados por dbms_job ahora pueden aparecer como trabajos del programador, con nombres como DBMS_JOB$_<númerode trabajo>. La vista del diccionario scheduler$_dbmsjob_map ayuda a realizar un seguimiento de estas asignaciones.
Sin embargo, confiar únicamente en la conversión automática puede dar lugar a problemas, especialmente en lo que respecta a la propiedad y el contexto de ejecución.
Peligros a tener en cuenta
Una cuestión especialmente espinosa: después de una importación de Oracle 19c (por ejemplo, a través de impdp as SYS), las tareas del programador pueden mostrar Creator = SYS aunque el propietario sea un usuario diferente (por ejemplo, TEST). En efecto, la tarea podría ejecutarse con privilegios SYS, lo que podría dar lugar a un comportamiento inesperado.

El creador de la tarea del programador difiere del propietario de la tarea
Cómo KeepTool simplifica la migración
Hay dos enfoques técnicos principales para convertir dbms_job a dbms_scheduler llamadas:
-
Utilizar dbms_metadata para derivar definiciones PL/SQL de los trabajos del programador interno que envuelven dbms_job.
-
Query dba_jobs (o las tablas de trabajos heredadas) y crear manualmente sus propios dbms_scheduler manualmente.
Optamos por el enfoque n.º 2 en la implementación de KeepTool por dos razones:
-
Es compatible con versiones anteriores de Oracle (anteriores a 19c).
-
En algunos casos extremos, dbms_metadata falla (por ejemplo, cuando el creador del trabajo es SYS).
Nuevo menú contextual en KeepTool 16.1
En la interfaz de Hora, hemos añadido un nuevo elemento al menú contextual en dbms_job filas: «Convertir en tarea del programador» (seleccionable varias veces).
Esto genera un script PL/SQL que:
-
Crea una nueva tarea programada (inicialmente en estado desactivado), envolviendo la lógica original.
-
Opcionalmente, incluye una dbms_job.remove() llamada para eliminar el original dbms_job.

Elemento de menú para convertir un dbms_job a Oracle Scheduler

DDL para crear la tarea del programador y establecer atributos
Este proceso de dos pasos le permite revisar y habilitar los trabajos del programador solo después de verificar que sean correctos.
Después de la conversión, los trabajos del programador aparecen en la vista general del programador. En la interfaz, los trabajos creados automáticamente (por Oracle) pueden aparecer resaltados en rojo, mientras que los creados mediante el asistente aparecen en verde.

La página de resumen de tareas del programador de Hora muestra las tareas creadas por Oracle o por el asistente
La página de resumen de tareas del programador de Hora muestra las tareas creadas por Oracle o por el asistente. Por último, puede eliminar las tareas antiguas, ya sea mediante un script o a través del menú contextual de Hora. Al eliminarlas, también se limpian las tareas del programador creadas automáticamente con nombres que comienzan por DBMS_JOB$_….
Resumen
Con KeepTool 16.1, la migración de dbms_job a Oracle Scheduler es tan fácil como hacer unos pocos clics. Puede generar los scripts PL/SQL adecuados, previsualizarlos y habilitarlos, y descartar sin problemas los trabajos antiguos. Incluso con un gran número de trabajos, el proceso es seguro, eficiente y fiable.
Manténgase a la vanguardia migrando ahora, para estar preparado cuando dbms_job se elimine.
➡️ Pruebe KeepTool gratis
Las herramientas Oracle de KeepTool están diseñadas específicamente para desarrolladores, administradores de bases de datos (DBA) y equipos de soporte. Con más de 25 años de experiencia, optimizamos continuamente nuestro software para que el análisis y la documentación de sus bases de datos sean más rápidos, eficientes y claros.