Realización de tareas de programación comunes para instancias de base de datos de Oracle - Amazon Relational Database Service

Realización de tareas de programación comunes para instancias de base de datos de Oracle

Algunos trabajos del programador que pertenece a SYS pueden interferir con las operaciones normales de la base de datos. Oracle Support recomienda deshabilitar estos trabajos o modificar la programación. Puede utilizar el paquete rdsadmin.rdsadmin_dbms_scheduler de Amazon RDS para realizar tareas de los trabajos del Programador de Oracle que es propiedad de SYS.

Estos procedimientos rdsadmin.rdsadmin_dbms_scheduler son compatibles con las siguientes versiones de motores de bases de datos de Amazon RDS for Oracle:

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c

  • Oracle Database 12c Versión 2 (12.2) en versiones 12.2.0.2.ru-2019-07.rur-2019-07.r1 o posteriores a 12.2

  • Oracle Database 12c Versión 1 (12.1), versión 12.1.0.2.v17 o posterior a 12.1

Parámetros comunes para los procedimientos del programador de Oracle

Utilice los procedimientos del paquete de Amazon RDS para realizar tareas con el programador de Oracl rdsadmin.rdsadmin_dbms_scheduler. Varios parámetros son comunes en los procedimientos del paquete. El paquete tiene los siguientes parámetros comunes.

Nombre del parámetro Tipo de datos Valores válidos Valor predeterminado Obligatorio Descripción

name

varchar2

'SYS.BSLN_MAINTAIN_STATS_JOB','SYS.CLEANUP_ONLINE_IND_BUILD'

El nombre del trabajo que se va a modificar.

nota

En la actualidad, solo puede modificar los trabajos SYS.CLEANUP_ONLINE_IND_BUILD y SYS.BSLN_MAINTAIN_STATS_JOB.

attribute

varchar2

'REPEAT_INTERVAL','SCHEDULE_NAME'

El atributo que se va a modificar.

Especifique para modificar el intervalo de repetición del trabaj 'REPEAT_INTERVAL'.

Especifique para modificar el nombre de programación del trabaj 'SCHEDULE_NAME'.

value

varchar2

Un nombre de programación o intervalo de programación válidos, en función del atributo utilizado.

El nuevo valor del atributo.

Modificación de trabajos DBMS_SCHEDULER

Puede utilizar el procedimiento dbms_scheduler.set_attribute de Oracle para modificar determinados componentes de Oracle Scheduler. Para obtener más información, consulte DBMS_SCHEDULER y SET_ATTRIBUTE Procedure en la documentación de Oracle.

Cuando trabaje con instancias de bases de datos de Amazon RDS, anteponga el nombre del esquema SYS al nombre del objeto. En el siguiente ejemplo se establece el atributo RESOURCE_PLAN para el objeto MONDAY_WINDOW.

BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'SYS.MONDAY_WINDOW', attribute => 'RESOURCE_PLAN', value => 'resource_plan_1'); END; /

Modificar las ventanas de mantenimiento de AutoTask

Las instancias de Amazon RDS for Oracle se crean con la configuración predeterminada de las ventanas de mantenimiento. Las tareas de mantenimiento automatizadas, como la recopilación de estadísticas del optimizador, se ejecutan durante estas ventanas. De forma predeterminada, las ventanas de mantenimiento activan Administrador de recursos de la base de datos de Oracle.

Para modificar la ventana, utilice el paquete DBMS_SCHEDULER. Es posible que tenga que modificar la configuración de la ventana de mantenimiento por las siguientes razones:

  • Desea que los trabajos de mantenimiento se ejecuten en un momento diferente, con configuraciones diferentes o que no se ejecuten en absoluto. Por ejemplo, puede que desee modificar la duración de la ventana o cambiar el tiempo y el intervalo de repetición.

  • Desea evitar el impacto en el rendimiento de habilitar el Administrador de Recursos durante el mantenimiento. Por ejemplo, si se especifica el plan de mantenimiento predeterminado y si la ventana de mantenimiento se abre mientras la base de datos está bajo carga, es posible que vea eventos de espera como resmgr:cpu quantum. Este evento de espera está relacionado con el Administrador de recursos de base de datos. Dispone de las opciones siguientes:

    • Asegúrese de que las ventanas de mantenimiento estén activas durante las horas de menor actividad de su instancia de base de datos.

    • Deshabilite el plan de mantenimiento predeterminado estableciendo el atributo resource_plan a una cadena vacía.

    • Establezca el parámetro resource_manager_plan en FORCE: en el grupo de parámetros. Si la instancia utiliza Enterprise Edition, esta configuración impide que se activen los planes del Administrador de recursos de base de datos.

Para modificar la configuración de la ventana de mantenimiento
  1. Conexión a la base de datos mediante un cliente de Oracle SQL.

  2. Consulte la configuración actual para una ventana del programador.

    En el siguiente ejemplo, se consulta la configuración de MONDAY_WINDOW.

    SELECT ENABLED, RESOURCE_PLAN, DURATION, REPEAT_INTERVAL FROM DBA_SCHEDULER_WINDOWS WHERE WINDOW_NAME='MONDAY_WINDOW';

    El siguiente resultado muestra que la ventana está utilizando los valores predeterminados.

    ENABLED RESOURCE_PLAN DURATION REPEAT_INTERVAL --------------- ------------------------------ ---------------- ------------------------------ TRUE DEFAULT_MAINTENANCE_PLAN +000 04:00:00 freq=daily;byday=MON;byhour=22 ;byminute=0; bysecond=0
  3. Modifique la ventana mediante el paquete DBMS_SCHEDULER.

    En el siguiente ejemplo se establece el plan de recursos como nulo para que el Administrador de recursos no se ejecute durante la ventana de mantenimiento.

    BEGIN -- disable the window to make changes DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); -- specify the empty string to use no plan DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'RESOURCE_PLAN', value=>''); -- re-enable the window DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /

    En el siguiente ejemplo se establece la duración máxima de la ventana en 2 horas.

    BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'DURATION', value=>'0 2:00:00'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /

    En el siguiente ejemplo se establece el intervalo de repetición en todos los lunes a las 10 AM.

    BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'REPEAT_INTERVAL', value=>'freq=daily;byday=MON;byhour=10;byminute=0;bysecond=0'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /

Configuración de zona horaria para trabajos de Oracle Scheduler

Para modificar la zona horaria de Oracle Scheduler, puede utilizar el procedimiento de Oracle dbms_scheduler.set_scheduler_attribute. Para obtener más información sobre el paquete dbms_scheduler, consulte DBMS_SCHEDULER y SET_SCHEDULER_ATTRIBUTE en la documentación de Oracle.

Para modificar la configuración de zona horaria actual
  1. Conéctese a la base de datos mediante un cliente como SQL Developer. Para obtener más información, consulte Conexión a la instancia de base de datos mediante Oracle SQL Developer.

  2. Establezca la zona horaria predeterminada de la siguiente manera, sustituyendo su zona horaria por time_zone_name.

    BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => 'time_zone_name' ); END; /

En el siguiente ejemplo, debe cambiar la zona horaria a Asia/Shanghái.

Comience consultando la zona horaria actual, como se muestra a continuación.

SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';

La salida muestra que la zona horaria actual es ETC/UTC.

VALUE ------- Etc/UTC

A continuación, establece la zona horaria en Asia/Shanghái.

BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => 'Asia/Shanghai' ); END; /

Para obtener más información sobre cómo cambiar la zona horaria del sistema, consulte Zona horaria Oracle.

Desactivación de los trabajos del programador de Oracle propiedad de SYS

Utilice el procedimiento rdsadmin.rdsadmin_dbms_scheduler.disable para desactivar un trabajo del programador de Oracle que pertenezca a SYS.

Este procedimiento utiliza el parámetro común name para las tareas del programador de Oracle. Para obtener más información, consulte Parámetros comunes para los procedimientos del programador de Oracle.

En el siguiente ejemplo se desactiva el trabajo del programador de Oracle SYS.CLEANUP_ONLINE_IND_BUILD.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.disable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /

Activación de los trabajos del programador de Oracle propiedad de SYS

Utilice el procedimiento rdsadmin.rdsadmin_dbms_scheduler.enable para activar un trabajo del programador de Oracle que pertenezca a SYS.

Este procedimiento utiliza el parámetro común name para las tareas del programador de Oracle. Para obtener más información, consulte Parámetros comunes para los procedimientos del programador de Oracle.

En el siguiente ejemplo se activa el trabajo del programador de Oracle SYS.CLEANUP_ONLINE_IND_BUILD.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.enable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /

Modificación del intervalo de repetición del programador de Oracle para los trabajos del tipo CALENDAR

Utilice el procedimiento CALENDAR para modificar el intervalo de repetición de un trabajo del programador de Oracle que pertenece a SYS del tipo rdsadmin.rdsadmin_dbms_scheduler.disable.

Este procedimiento utiliza los siguientes parámetros comunes para las tareas del programador de Oracle:

  • name

  • attribute

  • value

Para obtener más información, consulte Parámetros comunes para los procedimientos del programador de Oracle.

En el siguiente ejemplo se modifica el intervalo de repetición del trabajo del programador de Oracle SYS.CLEANUP_ONLINE_IND_BUILD.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute( name => 'SYS.CLEANUP_ONLINE_IND_BUILD', attribute => 'repeat_interval', value => 'freq=daily;byday=FRI,SAT;byhour=20;byminute=0;bysecond=0'); END; /

Modificación del intervalo de repetición del programador de Oracle para los trabajos del tipo NAMED

Algunos trabajos del programador de Oracle utilizan un nombre de programación en lugar de un intervalo. Debe crear una nueva programación NAMED en el esquema de usuario principal para este tipo de trabajos. Para ello, utilice el procedimiento estándar de Oracle sys.dbms_scheduler.create_schedule. Además, utilice el rdsadmin.rdsadmin_dbms_scheduler.set_attribute procedure para asignar la nueva programación con nombre asignado al trabajo.

Este procedimiento utiliza los siguientes parámetros comunes para las tareas del programador de Oracle:

  • name

  • attribute

  • value

Para obtener más información, consulte Parámetros comunes para los procedimientos del programador de Oracle.

En el siguiente ejemplo se modifica el intervalo de repetición del trabajo del programador de Oracle SYS.BSLN_MAINTAIN_STATS_JOB.

BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'rds_master_user.new_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=0;byminute=0;bysecond=0', end_date => NULL, comments => 'Repeats daily forever'); END; / BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute ( name => 'SYS.BSLN_MAINTAIN_STATS_JOB', attribute => 'schedule_name', value => 'rds_master_user.new_schedule'); END; /

Desactivación de la confirmación automática para la creación de trabajos del programador de Oracle

Cuando DBMS_SCHEDULER.CREATE_JOB crea trabajos del programador de Oracle, los crea inmediatamente y confirma los cambios. Puede que necesite incorporar la creación de trabajos del programador de Oracle en la transacción de usuario para hacer lo siguiente:

  • Revertir el trabajo del programador de Oracle cuando se revierte la transacción del usuario.

  • Crear el trabajo del programador de Oracle cuando se confirme la transacción principal del usuario.

Puede utilizar el procedimiento rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag para activar este comportamiento. Este procedimiento no acepta parámetros. Puede utilizar este procedimiento en las siguientes versiones de RDS para Oracle:

  • 21.0.0.0.ru-2022-07.rur-2022-07.r1 y posteriores

  • 19.0.0.0.ru-2022-07.rur-2022-07.r1 y posteriores

El siguiente ejemplo desactiva la confirmación automática del programador de Oracle, crea un trabajo del programador de Oracle y, a continuación, revierte la transacción. Como la confirmación automática está desactivada, la base de datos también revierte la creación del trabajo del programador de Oracle.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag; DBMS_SCHEDULER.CREATE_JOB(job_name => 'EMPTY_JOB', job_type => 'PLSQL_BLOCK', job_action => 'begin null; end;', auto_drop => false); ROLLBACK; END; / PL/SQL procedure successfully completed. SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME='EMPTY_JOB'; no rows selected