Exécution des tâches de planification courantes pour les instances de base de données Oracle - Amazon Relational Database Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exécution des tâches de planification courantes pour les instances de base de données Oracle

Certaines tâches Oracle Scheduler détenues par SYS peuvent interférer avec les opérations de base de données normales. Oracle Support vous recommande de désactiver ces tâches ou de modifier la planification. Utilisez le package Amazon RDS rdsadmin.rdsadmin_dbms_scheduler pour effectuer des tâches pour les tâches Oracle Scheduler détenues par SYS.

Les procédures rdsadmin.rdsadmin_dbms_scheduler sont prises en charge pour les versions suivantes du moteur de base de données Amazon RDS for Oracle :

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c

Paramètres communs pour les procédures d'Oracle Scheduler

Pour effectuer des tâches avec Oracle Scheduler, utilisez les procédures du package Amazon RDS rdsadmin.rdsadmin_dbms_scheduler. Plusieurs paramètres sont communs aux procédures figurant dans le package. Le package possède les paramètres communs suivants.

Nom du paramètre Type de données Valeurs valides Par défaut Obligatoire Description

name

varchar2

'SYS.BSLN_MAINTAIN_STATS_JOB','SYS.CLEANUP_ONLINE_IND_BUILD'

Oui

Nom du travail à modifier.

Note

Pour l'heure, vous pouvez modifier uniquement les travaux SYS.CLEANUP_ONLINE_IND_BUILD et SYS.BSLN_MAINTAIN_STATS_JOB.

attribute

varchar2

'REPEAT_INTERVAL','SCHEDULE_NAME'

Oui

Attribut à modifier.

Pour modifier l'intervalle de répétition du travail, spécifiez 'REPEAT_INTERVAL'.

Pour modifier le nom de planification du travail, spécifiez 'SCHEDULE_NAME'.

value

varchar2

Intervalle ou nom de planification valide, selon l'attribut utilisé.

Oui

Nouvelle valeur de l'attribut.

Modification des travaux DBMS_SCHEDULER

Utilisez la procédure Oracle dbms_scheduler.set_attribute pour modifier certains composants d'Oracle Scheduler. Pour de plus amples informations, veuillez consulter DBMS_SCHEDULER et la procédure SET_ATTRIBUTE dans la documentation Oracle.

Lorsque vous utilisez des instances de base de données Amazon RDS, ajoutez le nom du schéma SYS au début du nom de l'objet. L'exemple suivant définit l'attribut du plan de la ressource pour l'objet monday window.

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

Modification des fenêtres AutoTask de maintenance

Les instances Amazon RDS for Oracle sont créées avec les paramètres par défaut pour les fenêtres de maintenance. Les tâches de maintenance automatisées, telles que la collecte de statistiques de l'optimiseur, s'exécutent lors de ces fenêtres. Par défaut, les fenêtres de maintenance activent le gestionnaire de ressources Oracle Database.

Pour modifier la fenêtre, utilisez le package DBMS_SCHEDULER. Vous devrez peut-être modifier les paramètres de la fenêtre de maintenance pour les raisons suivantes :

  • Vous voulez que les tâches de maintenance s'exécutent à un moment différent, avec des paramètres différents, ou pas du tout. Par exemple, vous souhaitez modifier la durée de la fenêtre ou modifier l'heure et l'intervalle de répétition.

  • Vous souhaitez éviter les répercussions sur les performances de l'activation du gestionnaire de ressources pendant la maintenance. Par exemple, si le plan de maintenance par défaut est spécifié et si la fenêtre de maintenance s'ouvre alors que la base de données est en cours de chargement, des événements d'attente tels que resmgr:cpu quantum peuvent apparaître. Cet événement d'attente est lié au gestionnaire de ressources de base de données. Vous avez les options suivantes :

    • Vérifiez que les fenêtres de maintenance sont actives pendant les heures creuses pour votre instance de base de données.

    • Désactivez le plan de maintenance par défaut en réglant l'attribut resource_plan sur une chaîne vide.

    • Définissez le paramètre resource_manager_plan de votre groupe de paramètres sur FORCE:. Si votre instance utilise Enterprise Edition, ce paramètre empêche l'activation des plans du gestionnaire de ressources de base de données.

Pour modifier les paramètres de votre fenêtre de maintenance
  1. Connectez-vous à votre base de données à l'aide d'un client SQL Oracle.

  2. Interrogez la configuration actuelle pour une fenêtre de planificateur.

    L'exemple suivant interroge la configuration pour MONDAY_WINDOW.

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

    La sortie suivante indique que la fenêtre utilise les valeurs par défaut.

    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. Modifiez la fenêtre à l'aide du package DBMS_SCHEDULER.

    L'exemple suivant définit le plan de ressources sur null, afin que le gestionnaire de ressources ne s'exécute pas pendant la fenêtre de maintenance.

    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; /

    L'exemple suivant définit la durée maximale de la fenêtre sur 2 heures.

    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; /

    L'exemple suivant définit l'intervalle de répétition sur tous les lundis, à 10 heures.

    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; /

Définition du fuseau horaire pour les tâches d'Oracle Scheduler

Pour modifier le fuseau horaire d'Oracle Scheduler, vous pouvez utiliser la procédure Oracle dbms_scheduler.set_scheduler_attribute. Pour de plus amples informations sur le package dbms_scheduler, veuillez consulter DBMS_SCHLENDER et SET_SCHENDER_ATTRIBUTE dans la documentation Oracle.

Pour modifier le paramètre de fuseau horaire actuel
  1. Connectez-vous à la base de données à l'aide d'un client tel que SQL Developer. Pour plus d'informations, consultez Connexion à votre instance de base de données à l'aide d'Oracle SQL Developer.

  2. Définissez le fuseau horaire par défaut comme suit, en remplaçant votre fuseau horaire par time_zone_name.

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

Dans l'exemple suivant, vous changez le fuseau horaire pour Asia/Shanghai.

Commencez par interroger le fuseau horaire actuel, comme indiqué ci-dessous.

SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';

La sortie indique que le fuseau horaire actuel est ETC/UTC.

VALUE ------- Etc/UTC

Ensuite, vous définissez le fuseau horaire sur Asia/Shanghai.

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

Pour plus d'informations sur la modification du fuseau horaire système, consultez Fuseau horaire Oracle.

Désactivation de travaux Oracle Scheduler détenus par SYS

Pour désactiver un travail Oracle Scheduler détenu par l'utilisateur SYS, utilisez la procédure rdsadmin.rdsadmin_dbms_scheduler.disable.

Cette procédure utilise le paramètre commun name pour les tâches Oracle Scheduler. Pour plus d'informations, consultez Paramètres communs pour les procédures d'Oracle Scheduler.

L'exemple suivant désactive le travail Oracle Scheduler SYS.CLEANUP_ONLINE_IND_BUILD.

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

Activation de travaux Oracle Scheduler détenus par SYS

Pour activer un travail Oracle Scheduler détenu par SYS, utilisez la procédure rdsadmin.rdsadmin_dbms_scheduler.enable.

Cette procédure utilise le paramètre commun name pour les tâches Oracle Scheduler. Pour plus d'informations, consultez Paramètres communs pour les procédures d'Oracle Scheduler.

L'exemple suivant active le travail Oracle Scheduler SYS.CLEANUP_ONLINE_IND_BUILD.

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

Modification de l'intervalle de répétition Oracle Scheduler pour les travaux du type CALENDAR

Pour modifier l'intervalle de répétition d'un travail Oracle Scheduler relevant de SYS de type CALENDAR, utilisez la procédure rdsadmin.rdsadmin_dbms_scheduler.disable.

Cette procédure utilise les paramètres communs suivants pour les tâches Oracle Scheduler :

  • name

  • attribute

  • value

Pour plus d'informations, consultez Paramètres communs pour les procédures d'Oracle Scheduler.

L'exemple suivant modifier l'intervalle de répétition du travail Oracle Scheduler 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; /

Modification de l'intervalle de répétition Oracle Scheduler pour les travaux du type NAMED

Certains travaux Oracle Scheduler utilisent non pas un intervalle, mais un nom de planification. Pour ce type de travaux, vous devez créer une planification nommée dans le schéma d'utilisateur principal. Pour cela, utilisez la procédure Oracle standard sys.dbms_scheduler.create_schedule. De même, utilisez rdsadmin.rdsadmin_dbms_scheduler.set_attribute procedure pour affecter la nouvelle planification nommée à la tâche.

Cette procédure utilise le paramètre commun suivant pour les tâches Oracle Scheduler :

  • name

  • attribute

  • value

Pour plus d'informations, consultez Paramètres communs pour les procédures d'Oracle Scheduler.

L'exemple suivant modifier l'intervalle de répétition du travail Oracle Scheduler 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; /

Désactivation de la validation automatique pour la création de travaux Oracle Scheduler

Quand DBMS_SCHEDULER.CREATE_JOB crée des travaux Oracle Scheduler, il les crée immédiatement et valide les modifications. Vous devrez peut-être intégrer la création de travaux Oracle Scheduler dans la transaction utilisateur pour effectuer les opérations suivantes :

  • Annuler le travail Oracle Scheduler lorsque la transaction utilisateur est annulée.

  • Créer la tâche Oracle Scheduler lorsque la transaction utilisateur principale est validée.

Vous pouvez utiliser la procédure rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag pour activer ce comportement. Cette procédure ne prend aucun paramètre. Vous pouvez utiliser cette procédure dans les versions suivantes de RDS for Oracle :

  • 21.0.0.0.ru-2022-07.rur-2022-07.r1 et versions ultérieures

  • 19.0.0.0.ru-2022-07.rur-2022-07.r1 et versions ultérieures

L'exemple suivant désactive la validation automatique pour Oracle Scheduler, crée un travail Oracle Scheduler, puis annule la transaction. Comme la validation automatique est désactivée, la base de données annule également la création du travail Oracle Scheduler.

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