Solução de problemas de tarefas

Esta seção descreve uma abordagem metódica para solucionar problemas de tarefas que não funcionam como esperado.

Neste tópico:

A tarefa não foi executada

Etapa 1: verificar se a tarefa não foi executada

Consulte a função de tabela TASK_HISTORY para verificar se a tarefa não foi executada. É possível que a tarefa tenha sido executada com sucesso, mas a instrução SQL na definição da tarefa falhou. Em particular, observe os horários de agendamento e conclusão, assim como qualquer código e mensagem de erro.

Se a tarefa tiver uma tarefa anterior (em um gráfico de tarefas), verifique se a tarefa anterior foi concluída com sucesso.

Etapa 2: verificar se a tarefa foi retomada

Verifique se o estado da tarefa (ou cada tarefa em um gráfico de tarefas) é RESUMED (usando DESCRIBE TASK ou SHOW TASKS).

Para retomar uma tarefa individual, execute ALTER TASK … RESUME. Para habilitar recursivamente todas as tarefas dependentes vinculadas a uma tarefa raiz, consulte a função SYSTEM$TASK_DEPENDENTS_ENABLE em vez de habilitar cada tarefa individualmente.

Enquanto você estiver revisando os detalhes da tarefa, se a tarefa tiver um cronograma, verifique também a expressão cron. Verifique se pelo menos uma ocorrência do horário agendado passou.

Etapa 3: verificar as permissões concedidas ao proprietário da tarefa

Verifique se o proprietário da tarefa (ou seja, a função que tem o privilégio OWNERSHIP na tarefa) tem os seguintes privilégios, que são necessários para que a tarefa seja executada:

Objeto

Privilégio

Notas

Conta

EXECUTE TASK

Requerido para executar quaisquer tarefas que a função possua. A revogação do privilégio EXECUTE TASK em uma função impede que todas as tarefas subsequentes sejam iniciadas sob essa função.

Banco de dados

USAGE

Esquema

USAGE

Tarefa

OWNERSHIP

Warehouse

USAGE

Verifique os privilégios concedidos à função usando SHOW GRANTS TO ROLE role_name.

Etapa 4: verificar a condição

Se a tarefa incluir uma cláusula WHEN com uma condição SYSTEM$STREAM_HAS_DATA, verifique se o fluxo especificado continha registros de captura de dados de modificação (CDC) quando a tarefa foi agendada pela última vez para ser executada. Os dados históricos de um fluxo podem ser consultados usando uma cláusula AT | BEFORE.

A tarefa expirou ou excedeu a janela do cronograma

Há um limite padrão de 60 minutos para uma única execução de uma tarefa. Esta limitação foi implementada como uma proteção contra tarefas não terminadas. Consulte a função de tabela TASK_HISTORY. Se a tarefa foi cancelada ou excedeu a janela programada, a causa é muitas vezes um warehouse de tamanho inferior ao previsto. Revise o tamanho do warehouse e considere aumentá-lo para caber dentro da janela programada ou do limite de uma hora.

Alternativamente, considere aumentar o tempo limite para a tarefa, executando ALTER TASK … SET USER_TASK_TIMEOUT_MS = <num>. Para determinar se o parâmetro USER_TASK_TIMEOUT_MS foi definido para uma tarefa específica, execute a seguinte instrução:

SHOW PARAMETERS LIKE 'USER_TASK_TIMEOUT_MS' IN TASK <task_name>;
Copy

Onde <task_name> é o nome da tarefa cujo limite de tempo você está ajustando. Se a instrução não retornar nenhum registro, a tarefa atualmente tem o tempo limite padrão de 3600000 milissegundos (60 minutos).

Observe que nem aumentar o tamanho do warehouse nem aumentar o tempo limite podem ajudar se houver problemas de paralelização de consulta. Considere formas alternativas de reescrever a instrução SQL executada pela tarefa.