Realização de tarefas comuns de agendamento para instâncias de banco de dados Oracle
Alguns trabalhos pertencentes ao SYS
podem interferir nas operações normais de banco de dados. O Suporte da Oracle recomenda desativar esses trabalhos ou modificar a programaçã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 seguintes versões de mecanismo de banco de dados do Amazon RDS for Oracle:
-
Oracle Database 21c (21.0.0)
-
Oracle Database 19c
Parâmetros comuns para os procedimentos do Oracle Scheduler
Para realizar tarefas com o Oracle Scheduler, use os procedimentos no pacote rdsadmin.rdsadmin_dbms_scheduler
do Amazon RDS. 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 |
---|---|---|---|---|---|
|
varchar2 |
|
— |
Sim |
O nome do trabalho a ser modificado. notaNo momento, só é possível modificar os trabalhos |
|
varchar2 |
|
– |
Sim |
Atributo a ser modificado. Para modificar o intervalo de repetição do trabalho, especifique Para modificar o nome da programação do trabalho, especifique |
|
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_SCHEDULER
Para modificar determinados componentes do Oracle Scheduler, use o procedimento dbms_scheduler.set_attribute
do Oracle. Para obter mais informações, consulte DBMS_SCHEDULER
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
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 comoFORCE:
. 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
-
Conecte ao banco de dados usando um cliente Oracle SQL.
-
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
-
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
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_SCHEDULER
Como modificar a configuração atual de fuso horário
-
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.
-
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.
Desativar trabalhos do Oracle Scheduler de propriedade do SYS
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.
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
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.
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
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.
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
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.
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
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