Esecuzione di attività di programmazione comuni per le istanze database Oracle - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di attività di programmazione comuni per le istanze database Oracle

Alcuni processi Scheduler di proprietà di SYS possono interferire con le normali operazioni di database. Oracle Support consiglia di disattivare questi processi o di modificare la pianificazione. Puoi utilizzare il pacchetto rdsadmin.rdsadmin_dbms_scheduler di Amazon RDS per eseguire le attività dai processi Oracle Scheduler di proprietà di SYS.

Le procedure rdsadmin.rdsadmin_dbms_scheduler sono supportate nelle seguenti versioni del motore database Amazon RDS for Oracle:

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c

Parametri comuni per procedure Oracle Scheduler

Per eseguire attività con Oracle Scheduler, puoi utilizzare le procedure del pacchetto di Amazon RDS rdsadmin.rdsadmin_dbms_scheduler. Nelle procedure del pacchetto ci sono diversi parametri comuni. Il pacchetto presenta i seguenti parametri comuni.

Nome del parametro Tipo di dati Valori validi Default Campo obbligatorio Descrizione

name

varchar2

'SYS.BSLN_MAINTAIN_STATS_JOB','SYS.CLEANUP_ONLINE_IND_BUILD'

Il nome del processo da modificare.

Nota

Al momento, puoi solo modificare i lavori SYS.CLEANUP_ONLINE_IND_BUILD e SYS.BSLN_MAINTAIN_STATS_JOB.

attribute

varchar2

'REPEAT_INTERVAL','SCHEDULE_NAME'

Attributo da modificare

Per modificare l'intervallo di ripetizione del lavoro, specificare 'REPEAT_INTERVAL'.

Per modificare il nome della pianificazione del lavoro, specificare 'SCHEDULE_NAME'.

value

varchar2

Un intervallo o un nome di pianificazione valido, a seconda dell'attributo utilizzato.

Il nuovo valore dell'attributo.

Modifica dei processi di DBMS_SCHEDULER

Puoi utilizzare la procedura Oracle dbms_scheduler.set_attribute per modificare determinati componenti di Oracle Scheduler. Per ulteriori informazioni, consulta DBMS_SCHEDULER e Procedura SET_ATTRIBUTE nella documentazione di Oracle.

Quando usi istanze database Amazon RDS, aggiungi il nome di schema SYS come prefisso al nome dell'oggetto. L'esempio seguente imposta l'attributo del piano delle risorse per l'oggetto finestra Lunedì.

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

Modifica delle finestre di AutoTask manutenzione

Le istanze di Amazon RDS for Oracle vengono create con le impostazioni predefinite per le finestre di manutenzione. Le attività di manutenzione automatizzate come la raccolta delle statistiche dell'ottimizzatore vengono eseguite durante queste finestre. Per impostazione predefinita, le finestre di manutenzione attivano Oracle Database Resource Manager.

Per modificare la finestra, utilizzare il pacchetto DBMS_SCHEDULER. Potrebbe essere necessario modificare le impostazioni della finestra di manutenzione per i motivi seguenti:

  • Si desidera che i processi di manutenzione vengano eseguiti in un momento diverso, con impostazioni diverse o non del tutto. Ad esempio, è possibile modificare la durata della finestra o modificare il tempo e l'intervallo di ripetizione.

  • Si desidera evitare l'impatto sulle prestazioni dell'abilitazione di Resource Manager durante la manutenzione. Ad esempio, se viene specificato il piano di manutenzione predefinito e se si apre la finestra di manutenzione mentre il database è sotto carico, è possibile che vengano visualizzati eventi di attesa come resmgr:cpu quantum. Questo evento di attesa è correlato a Database Resource Manager. Sono disponibili le seguenti opzioni:

    • Assicurarsi che le finestre di manutenzione siano attive durante i periodi non di punta per l'istanza del database.

    • Disabilitare il piano di manutenzione predefinito impostando l'attributo resource_plan ad una stringa vuota.

    • Imposta il parametro resource_manager_plan su FORCE: nel gruppo di parametri. Se l'istanza utilizza Enterprise Edition, questa impostazione impedisce l'attivazione dei piani di Database Resource Manager.

Per modificare le impostazioni della finestra di manutenzione
  1. Connettersi al database utilizzando un client Oracle SQL.

  2. Eseguire una query sulla configurazione corrente per una finestra di scheduler.

    Nell'esempio seguente viene eseguita una query sulla configurazione di MONDAY_WINDOW.

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

    Il seguente output mostra che la finestra utilizza i valori di default.

    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. Modificare la finestra utilizzando il pacchetto DBMS_SCHEDULER.

    Nell'esempio seguente il piano delle risorse viene impostato su null in modo che il Resource Manager non venga eseguito durante la finestra di manutenzione.

    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'esempio seguente imposta la durata massima della finestra su 2 ore.

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

    Nell'esempio seguente l'intervallo di ripetizione viene impostato su ogni lunedì alle 10:00.

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

Impostazione del fuso orario per i job di Oracle Scheduler

Per modificare il fuso orario per Oracle Scheduler, è possibile utilizzare la procedura Oracle dbms_scheduler.set_scheduler_attribute. Per ulteriori informazioni sul pacchetto dbms_scheduler, consulta DBMS_SCHEDULER e SET_SCHEDULER_ATTRIBUTE nella documentazione di Oracle.

Per modificare l'impostazione del fuso orario corrente
  1. Connettersi al database utilizzando un client come SQL Developer. Per ulteriori informazioni, consulta Connessione all'istanza database tramite Oracle SQL Developer.

  2. Impostare il fuso orario predefinito come segue, sostituendo il fuso orario per time_zone_name.

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

Nell'esempio seguente, si modifica il fuso orario in Asia/Shanghai.

Iniziare interrogando il fuso orario corrente, come illustrato di seguito.

SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';

L'output mostra che il fuso orario corrente è ETC/UTC.

VALUE ------- Etc/UTC

Quindi si imposta il fuso orario su Asia/Shanghai.

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

Per ulteriori informazioni sulla modifica del fuso orario di sistema, consulta Fuso orario Oracle.

Disattivazione dei processi Oracle Scheduler di proprietà di SYS

Per disattivare un processo Oracle Scheduler di proprietà dell'utente SYS, utilizza la procedura rdsadmin.rdsadmin_dbms_scheduler.disable.

Questa procedura utilizza il parametro comune name per le attività Oracle Scheduler. Per ulteriori informazioni, consulta Parametri comuni per procedure Oracle Scheduler.

L'esempio seguente disabilita il lavoro Oracle Scheduler SYS.CLEANUP_ONLINE_IND_BUILD.

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

Attivazione dei processi Oracle Scheduler di proprietà di SYS

Per attivare un processo Oracle Scheduler di proprietà SYS, utilizza la procedura rdsadmin.rdsadmin_dbms_scheduler.enable.

Questa procedura utilizza il parametro comune name per le attività Oracle Scheduler. Per ulteriori informazioni, consulta Parametri comuni per procedure Oracle Scheduler.

L'esempio seguente abilita il lavoro Oracle Scheduler per SYS.CLEANUP_ONLINE_IND_BUILD.

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

Modifica dell'intervallo di ripetizione di Oracle Scheduler dei processi di tipo CALENDAR

Per modificare l'intervallo di ripetizione per modificare un lavoro Oracle Scheduler di proprietà SYS di tipo CALENDAR, utilizzare la procedura rdsadmin.rdsadmin_dbms_scheduler.disable.

Questa procedura utilizza i parametri comuni seguenti per le attività Oracle Scheduler:

  • name

  • attribute

  • value

Per ulteriori informazioni, consulta Parametri comuni per procedure Oracle Scheduler.

L'esempio seguente modifica l'intervallo di ripetizione del lavoro 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; /

Modifica dell'intervallo di ripetizione di Oracle Scheduler dei processi di tipo NAMED

I lavori Oracle Scheduler utilizzano il nome della pianificazione invece dell'intervallo. Per questi tipi di lavori, è necessario creare un nuovo nome di pianificazione nello schema dell'utente principale. Per questo, utilizzare la procedura standard Oracle sys.dbms_scheduler.create_schedule. Inoltre, utilizza rdsadmin.rdsadmin_dbms_scheduler.set_attribute procedure per assegnare le nuove pianificazioni denominate al processo.

Questa procedura utilizza i parametri comuni seguenti per le attività Oracle Scheduler:

  • name

  • attribute

  • value

Per ulteriori informazioni, consulta Parametri comuni per procedure Oracle Scheduler.

L'esempio seguente modifica l'intervallo di ripetizione del lavoro 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; /

Disattivazione del commit automatico per la creazione di processi in Oracle Scheduler

DBMS_SCHEDULER.CREATE_JOB crea i processi Oracle Scheduler immediatamente e conferma le modifiche. Potrebbe essere necessario incorporare la creazione di processi Oracle Scheduler nella transazione utente per:

  • Eseguire il rollback del processo Oracle Schedule quando viene eseguito il rollback della transazione dell'utente.

  • Creare il processo Oracle Scheduler quando viene confermata la transazione dell'utente principale.

Puoi utilizzare la procedura rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag per attivare questo comportamento. Questa procedura non richiede parametri. È possibile utilizzare questa procedura nelle seguenti versioni di RDS per Oracle:

  • 21.0.0.0.ru-2022-07.rur-2022-07.r1 versioni successive

  • 19.0.0.0.ru-2022-07.rur-2022-07.r1 versioni successive

L'esempio seguente disattiva il commit automatico per Oracle Scheduler, crea un processo Oracle Scheduler e quindi esegue il rollback della transazione. Poiché il commit automatico è disattivato, il database esegue il rollback anche del processo 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