

# Realização de tarefas comuns de agendamento para instâncias de banco de dados Oracle
<a name="Appendix.Oracle.CommonDBATasks.Scheduler"></a>

Alguns trabalhos pertencentes ao `SYS` podem interferir nas operações normais de banco de dados. Nesses casos, o Oracle Support recomenda que você modifique a programação. Se você precisar habilitar ou desabilitar trabalhos do `SYS`, teste a operação em jobs programados em um ambiente de teste antes de implementá-la em um ambiente de produção. Para realizar tarefas para trabalhos do Oracle Scheduler pertencentes ao `SYS`, use o pacote `rdsadmin.rdsadmin_dbms_scheduler` do Amazon RDS.

Os procedimentos `rdsadmin.rdsadmin_dbms_scheduler` são compatíveis com as versões de mecanismo de banco de dados do Amazon RDS para Oracle na tabela a seguir. Ao usar esse pacote, você pode especificar os trabalhos do `SYS` listados na tabela.


| Versão do banco de dados | Trabalhos habilitados por padrão | Trabalhos desabilitados por padrão | 
| --- | --- | --- | 
| Oracle Database 19c |  <pre>BSLN_MAINTAIN_STATS_JOB<br />CLEANUP_NON_EXIST_OBJ<br />CLEANUP_ONLINE_IND_BUILD<br />CLEANUP_ONLINE_PMO<br />CLEANUP_TAB_IOT_PMO<br />CLEANUP_TRANSIENT_PKG<br />CLEANUP_TRANSIENT_TYPE<br />DRA_REEVALUATE_OPEN_FAILURES<br />FILE_SIZE_UPD<br />ORA$AUTOTASK_CLEAN<br />PMO_DEFERRED_GIDX_MAINT_JOB<br />PURGE_LOG<br />RSE$CLEAN_RECOVERABLE_SCRIPT<br />SM$CLEAN_AUTO_SPLIT_MERGE</pre>  |  <pre>FGR$AUTOPURGE_JOB<br />FILE_WATCHER<br />HM_CREATE_OFFLINE_DICTIONARY<br />LOAD_OPATCH_INVENTORY<br />ORA$PREPLUGIN_BACKUP_JOB<br />XMLDB_NFS_CLEANUP_JOB</pre>  | 
| Oracle Database 21c |  <pre>BSLN_MAINTAIN_STATS_JOB<br />CLEANUP_NON_EXIST_OBJ<br />CLEANUP_ONLINE_IND_BUILD<br />CLEANUP_ONLINE_PMO<br />CLEANUP_TAB_IOT_PMO<br />CLEANUP_TRANSIENT_PKG<br />CLEANUP_TRANSIENT_TYPE<br />DRA_REEVALUATE_OPEN_FAILURES<br />FILE_SIZE_UPD<br />ORA$AUTOTASK_CLEAN<br />PMO_DEFERRED_GIDX_MAINT_JOB<br />PURGE_LOG</pre>  |  <pre>FGR$AUTOPURGE_JOB<br />FILE_WATCHER<br />HM_CREATE_OFFLINE_DICTIONARY<br />LOAD_OPATCH_INVENTORY<br />ORA$PREPLUGIN_BACKUP_JOB<br />ORA$_ATSK_AUTOSTS<br />XMLDB_NFS_CLEANUP_JOB</pre>  | 

## Parâmetros comuns para os procedimentos do Oracle Scheduler
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.CommonParameters"></a>

Para realizar tarefas com o Oracle Scheduler, use os procedimentos no pacote do Amazon RDS `rdsadmin.rdsadmin_dbms_scheduler`. Vários parâmetros são comuns aos procedimentos no pacote. O pacote tem os seguintes parâmetros comuns.


****  

| Nome do parâmetro | Tipo de dados | Valores válidos | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | --- | 
|  `name`  |  varchar2  |  Os procedimentos listados na tabela em [Realização de tarefas comuns de agendamento para instâncias de banco de dados Oracle](#Appendix.Oracle.CommonDBATasks.Scheduler)   |  —  |  Sim  |  O nome do trabalho a ser modificado.  | 
|  `attribute`  |  varchar2  |  `'REPEAT_INTERVAL'`,`'SCHEDULE_NAME'`  |  –  |  Sim  |  Atributo a ser modificado. Para modificar o intervalo de repetição do trabalho, especifique `'REPEAT_INTERVAL'`. Para modificar o nome da programação do trabalho, especifique `'SCHEDULE_NAME'`.  | 
|  `value`  |  varchar2  |  Um intervalo de programação ou nome de programação válidos, dependendo do atributo usado.  |  –  |  Sim  |  O novo valor do atributo.  | 

## Modificação de trabalhos DBMS\$1SCHEDULER
<a name="Appendix.Oracle.CommonDBATasks.ModifyScheduler"></a>

Para modificar determinados componentes do Oracle Scheduler, use o procedimento do Oracle `dbms_scheduler.set_attribute`. Para obter mais informações, consulte [DBMS\$1SCHEDULER](https://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72235) e [Procedimento SET\$1ATTRIBUTE](https://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72399) na documentação da Oracle. 

Ao trabalhar com instâncias de bancos de dados do Amazon RDS, anteponha o nome do esquema `SYS` ao nome do objeto. O exemplo a seguir define o atributo de plano de recurso para o objeto da janela de segunda-feira.

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

## Modificando janelas de manutenção de AutoTask
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.maintenance-windows"></a>

As instâncias do Amazon RDS for Oracle são criadas com configurações padrão para janelas de manutenção. Tarefas de manutenção automatizadas, como coleta de estatísticas do otimizador, são executadas durante essas janelas. Por padrão, as janelas de manutenção ativam o Oracle Database Resource Manager.

Para modificar a janela, use o pacote `DBMS_SCHEDULER`. Talvez seja necessário modificar as configurações da janela de manutenção pelos seguintes motivos:
+ Você deseja que os trabalhos de manutenção sejam executados em um momento diferente, com configurações diferentes ou não. Por exemplo, talvez você queira modificar a duração da janela ou alterar o tempo e o intervalo de repetição.
+ Você quer evitar o impacto sobre a performance causado pela habilitação do Gerenciador de recursos durante a manutenção. Por exemplo, se o plano de manutenção padrão for especificado e se a janela de manutenção for aberta enquanto o banco de dados estiver sob carga, você poderá observar eventos de espera como `resmgr:cpu quantum`. Este evento de espera está relacionado ao Gerenciador de recursos de banco de dados. Você tem as seguintes opções:
  + Certifique-se de que as janelas de manutenção estejam ativas durante horários fora do pico de utilização da sua instância de banco de dados.
  + Desabilite o plano de manutenção padrão definindo o atributo `resource_plan` como uma string vazia.
  + Defina o parâmetro `resource_manager_plan` no grupo de parâmetros do banco de dados como `FORCE:`. Se sua instância usa o Enterprise Edition, essa configuração impede que os planos do Gerenciador de recursos de banco de dados sejam ativados.

**Para modificar as configurações da janela de manutenção**

1. Conecte ao banco de dados usando um cliente Oracle SQL.

1. Consulte a configuração atual para uma janela do programador. 

   O exemplo a seguir consulta a configuração para `MONDAY_WINDOW`.

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

   A saída a seguir mostra que a janela está usando os valores padrão.

   ```
   ENABLED         RESOURCE_PLAN                  DURATION         REPEAT_INTERVAL
   --------------- ------------------------------ ---------------- ------------------------------
   TRUE            DEFAULT_MAINTENANCE_PLAN       +000 04:00:00    freq=daily;byday=MON;byhour=22
                                                                   ;byminute=0; bysecond=0
   ```

1. Modifique a janela usando o pacote `DBMS_SCHEDULER`.

   O exemplo a seguir define o plano de recursos como nulo para que o Gerenciador de recursos não seja executado durante a janela de manutenção.

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

   O exemplo a seguir define a duração máxima da janela como 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;
   /
   ```

   O exemplo a seguir define o intervalo de repetição para todas as segundas-feiras às 10 horas da manhã.

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

## Definir o fuso horário para trabalhos do Oracle Scheduler
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.TimeZone"></a>

Para modificar o fuso horário do Oracle Scheduler, você pode usar o procedimento do Oracl `dbms_scheduler.set_scheduler_attribute`. Para obter mais informações sobre o pacote `dbms_scheduler`, consulte [DBMS\$1SCHEDULER](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_SCHEDULER.html) e [SET\$1SCHEDULER\$1ATTRIBUTE](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_SCHEDULER.html#GUID-2AB97BF7-7154-4E6C-933F-B2659B18A907) na documentação do Oracle.

**Como modificar a configuração atual de fuso horário**

1. Conecte-se ao banco de dados usando um cliente como o SQL Developer. Para obter mais informações, consulte [Conectar-se à sua instância de banco de dados usando o Oracle SQL Developer](USER_ConnectToOracleInstance.SQLDeveloper.md).

1. Defina o fuso horário padrão da seguinte maneira, substituindo seu fuso horário por `time_zone_name`.

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

No exemplo a seguir, altere o fuso horário para Ásia/Xangai. 

Comece consultando o fuso horário atual, como mostrado a seguir.

```
SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';
```

A saída mostra que o fuso horário atual é ETC/UTC.

```
VALUE
-------
Etc/UTC
```

Depois, você define o fuso horário como Ásia/Xangai.

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

Para obter mais informações sobre como alterar o fuso horário do sistema, consulte [Fuso horário da Oracle](Appendix.Oracle.Options.Timezone.md).

## Desativar trabalhos do Oracle Scheduler de propriedade do SYS
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.Disabling"></a>

Para desativar um trabalho do Oracle Scheduler pertencente ao SYS, use o procedimento `rdsadmin.rdsadmin_dbms_scheduler.disable`. 

Esse procedimento usa o parâmetro comum `name` para tarefas do Oracle Scheduler. Para obter mais informações, consulte [Parâmetros comuns para os procedimentos do Oracle Scheduler](#Appendix.Oracle.CommonDBATasks.Scheduler.CommonParameters).

O exemplo a seguir desabilita o trabalho `SYS.CLEANUP_ONLINE_IND_BUILD` do Oracle Scheduler.

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

## Ativar trabalhos do Oracle Scheduler de propriedade do SYS
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.Enabling"></a>

Para ativar um trabalho do Oracle Scheduler pertencente ao SYS, use o procedimento `rdsadmin.rdsadmin_dbms_scheduler.enable`.

Esse procedimento usa o parâmetro comum `name` para tarefas do Oracle Scheduler. Para obter mais informações, consulte [Parâmetros comuns para os procedimentos do Oracle Scheduler](#Appendix.Oracle.CommonDBATasks.Scheduler.CommonParameters).

O exemplo a seguir habilita o trabalho `SYS.CLEANUP_ONLINE_IND_BUILD` do Oracle Scheduler.

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

## Modificar o intervalo de repetição do Oracle Scheduler para trabalhos do tipo CALENDAR
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.Modifying_Calendar"></a>

Para modificar o intervalo de repetição de um trabalho do Oracle Scheduler pertencente ao SYS do tipo `CALENDAR`, use o procedimento `rdsadmin.rdsadmin_dbms_scheduler.disable`.

Este procedimento usa os seguintes parâmetros comuns para tarefas do Oracle Scheduler:
+ `name`
+ `attribute`
+ `value`

Para obter mais informações, consulte [Parâmetros comuns para os procedimentos do Oracle Scheduler](#Appendix.Oracle.CommonDBATasks.Scheduler.CommonParameters).

O exemplo a seguir modifica o intervalo de repetição do trabalho `SYS.CLEANUP_ONLINE_IND_BUILD` do Oracle Scheduler.

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

## Modificar o intervalo de repetição do Oracle Scheduler para trabalhos do tipo NAMED
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.Modifying_Named"></a>

Alguns trabalhos do Oracle Scheduler usam um nome de programação em vez de um intervalo. Para esse tipo de trabalho, é necessário criar outra programação nomeada no esquema do usuário mestre. Use o procedimento `sys.dbms_scheduler.create_schedule` padrão do Oracle para fazer isso. Além disso, use o `rdsadmin.rdsadmin_dbms_scheduler.set_attribute procedure` para atribuir a nova programação nomeada ao trabalho. 

Este procedimento usa o seguinte parâmetro comum para tarefas do Oracle Scheduler:
+ `name`
+ `attribute`
+ `value`

Para obter mais informações, consulte [Parâmetros comuns para os procedimentos do Oracle Scheduler](#Appendix.Oracle.CommonDBATasks.Scheduler.CommonParameters).

O exemplo a seguir modifica o intervalo de repetição do trabalho `SYS.BSLN_MAINTAIN_STATS_JOB` do Oracle Scheduler.

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

## Desativar a confirmação automática para a criação de trabalhos do Oracle Scheduler
<a name="Appendix.Oracle.CommonDBATasks.Scheduler.autocommit"></a>

Quando o `DBMS_SCHEDULER.CREATE_JOB` cria trabalhos do Oracle Scheduler, ele os cria imediatamente e confirma as alterações. Talvez seja necessário incorporar a criação de trabalhos do Oracle Scheduler na transação do usuário para fazer o seguinte:
+ Reverter o trabalho do Oracle Schedule quando a transação do usuário é revertida.
+ Criar o trabalho do Oracle Scheduler quando a transação principal do usuário é confirmada.

Você pode usar o procedimento `rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag` para ativar esse comportamento. Este procedimento não usa parâmetros. Você pode usar esse procedimento nas seguintes versões do RDS para Oracle:
+ 21.0.0.0.ru-2022-07.rur-2022-07.r1 e posteriores
+ 19.0.0.0.ru-2022-07.rur-2022-07.r1 e posteriores

O exemplo a seguir desativa a confirmação automática do Oracle Scheduler, cria um trabalho do Oracle Scheduler e, depois, reverte a transação. Como a confirmação automática está desativada, o banco de dados também reverte a criação do trabalho do 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
```