Operação

Operação & observabilidade

Checklist de erros comuns, consultas prontas para troubleshooting e consumo de IA, e onde acompanhar custo/saúde do ambiente sem precisar de nenhuma ferramenta extra.

O ambiente registra, em TB_26AI_TECH_LOG, cada chamada feita ao Generative AI e aos embeddings — sucesso ou erro — para que a operação do dia a dia não dependa de abrir um chamado toda vez que algo não funcionar de primeira. Use as consultas desta página para diagnosticar rapidamente qualquer problema, e o checklist abaixo para os casos mais comuns.

Checklist de erros comuns

SintomaCausa provávelComo confirmar/corrigir
ORA-00942 em qualquer objeto TB_26AI_TECH_*Conectado como ADMIN em vez de AMPMINSIGHTS.Rode SELECT USER FROM DUAL; — tem que voltar AMPMINSIGHTS. Reconecte e repita a seção que falhou.
"AI Insight"/chat sempre retorna um texto genérico de indisponibilidadeCredencial OCI_CRED ausente ou quebrada.SELECT credential_name FROM user_credentials WHERE credential_name = 'OCI_CRED'; — se não retornar linha, refaça a Seção 3 conectado como AMPMINSIGHTS. Depois, confira o motivo exato na consulta de "Erros recentes" abaixo.
Erro de rede/timeout ao chamar o Generative AIACL de rede (Seção 1.6) não cobre o host correto.SELECT host, privilege FROM dba_host_aces WHERE principal = 'AMPMINSIGHTS'; — deve listar inference.generativeai.us-chicago-1.oci.oraclecloud.com com RESOLVE e CONNECT.
ORA-20404 ("Object not found", domínio oci.my$cloud_domain)Perfil de SELECT AI usando a região "de casa" do tenancy em vez da região do Generative AI.A região do Generative AI já vem fixa (us-chicago-1) na Seção 5.3 do Passo a passo: banco de dados — não troque pelo valor de OCI_REGION.

O que TB_26AI_TECH_LOG guarda

Toda chamada a Generative AI/embeddings feita pelas funções internas do ampmInsights grava uma linha nesta tabela — sucesso ou erro, sem exceção. Guarda metadados de uso (função de origem, provider, modelo, duração, tamanho do prompt/resposta em caracteres, usuário, e o SQLCODE/SQLERRM quando há erro) — deliberadamente não guarda o prompt ou a resposta completos, só o tamanho, por privacidade e para não inchar a tabela.

Consultas prontas

Erros recentes (últimas 24h)
SELECT log_ts, calling_object, operation, provider, model_name,
       error_code, error_message
FROM   TB_26AI_TECH_LOG
WHERE  status = 'ERROR'
AND    log_ts >= SYSTIMESTAMP - INTERVAL '24' HOUR
ORDER  BY log_ts DESC;
Taxa de erro por dia e por função/modelo
SELECT TRUNC(log_ts) AS dia, calling_object, model_name,
       COUNT(*) AS total,
       SUM(CASE WHEN status = 'ERROR' THEN 1 ELSE 0 END) AS erros,
       ROUND(100 * SUM(CASE WHEN status = 'ERROR' THEN 1 ELSE 0 END) / COUNT(*), 1) AS pct_erro
FROM   TB_26AI_TECH_LOG
GROUP  BY TRUNC(log_ts), calling_object, model_name
ORDER  BY dia DESC, pct_erro DESC;
Chamadas mais lentas
SELECT log_ts, calling_object, operation, model_name, duration_ms, status
FROM   TB_26AI_TECH_LOG
WHERE  duration_ms IS NOT NULL
ORDER  BY duration_ms DESC
FETCH FIRST 20 ROWS ONLY;
Qual registro de negócio está falhando
SELECT l.log_ts, l.source_type, l.source_id, l.error_message,
       v.asset_name, v.definition_name
FROM   TB_26AI_TECH_LOG l
LEFT JOIN TB_26AI_TECH_v2 v ON v.rowid = CHARTOROWID(l.source_id)
WHERE  l.status = 'ERROR'
AND    l.source_id IS NOT NULL
ORDER  BY l.log_ts DESC;
Purga do log (usa AI_LOG_RETENTION_DAYS)
DECLARE
  v_days TB_26AI_TECH_PARAMS.PARAM_VALUE%TYPE;
BEGIN
  SELECT param_value INTO v_days FROM TB_26AI_TECH_PARAMS WHERE param_name = 'AI_LOG_RETENTION_DAYS';
  DELETE FROM TB_26AI_TECH_LOG WHERE log_ts < SYSTIMESTAMP - NUMTODSINTERVAL(v_days, 'DAY');
  COMMIT;
END;
/

Ferramentas nativas — sem código novo

ADB Performance Hub

Saúde do banco (CPU, I/O, sessões, SQL Monitor) direto no Console OCI, sem instrumentação extra.

OCI Cost Analysis

Custo real do Generative AI, filtrado por serviço/compartimento — complementa o TB_26AI_TECH_LOG (que dá contagem/latência, não valor faturado).

Activity Reports (páginas 10020-10026)

Atividade de usuário/sessão e erros não tratados do APEX, já vêm prontas na aplicação (apex_activity_log).

Job de geração em lote (JOB_26AI_TECH_VULNERABILIDADE)

O botão "Gerar Insights em Lote" cria um job que roda a cada 20 segundos processando os registros pendentes. Ele mesmo verifica, a cada execução, se ainda há registros com insight_report nulo e se auto-remove (DBMS_SCHEDULER.stop_job/drop_job) quando não sobra nada para processar — não é necessário clicar em "parar" manualmente ao final de um lote. Para confirmar, rode SELECT job_name, state FROM dba_scheduler_jobs WHERE job_name = 'JOB_26AI_TECH_VULNERABILIDADE'; — não deve retornar linha depois que o processamento terminar.