Operação
Operação & observabilidade
Checklist de erros comuns, consultas prontas de troubleshooting/consumo de IA, e onde olhar ferramentas nativas que já vêm sem custo de desenvolvimento.
Esta seção nasceu de um incidente real: o recurso "AI Insight" ficava sempre retornando o texto
genérico de fallback, e não havia nenhum log que revelasse o motivo. Investigando, encontramos duas
causas encadeadas — a Seção 3 (credencial OCI_CRED) tinha sido rodada conectado como
ADMIN em vez de AMPMINSIGHTS (por isso a credencial nunca existiu), e a
função que chama o LLM engolia qualquer erro silenciosamente, sem logar nada. As duas coisas foram
corrigidas: a função agora loga cada chamada (sucesso ou erro) em TB_26AI_TECH_LOG, e
esta página documenta como usar esse log — junto com um checklist dos erros mais comuns — para
nunca mais operar "às cegas".
Checklist de erros comuns
| Sintoma | Causa provável | Como confirmar/corrigir |
|---|---|---|
ORA-00942 em qualquer objeto TB_26AI_TECH_* | Conectado como ADMIN em vez de AMPMINSIGHTS (aconteceu neste ambiente em 2026-07-24). | Rode SELECT USER FROM DUAL; — tem que voltar AMPMINSIGHTS. Reconecte e repita a seção que falhou. |
| "AI Insight"/chat sempre retorna o texto genérico de fallback | Credencial OCI_CRED ausente ou quebrada (é o sintoma exato do incidente que originou esta página). | 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 AI | ACL 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 (OCI_REGION) em vez da região do Generative AI. | Use o valor de GENAI_REGION (Seção 2), não OCI_REGION — ver Seção 5.3 do Passo a passo: banco de dados. |
ORA-20404 com URL bem formada (região correta no domínio, ex. inference.generativeai.us-chicago-1.oci.oraclecloud.com) | A tenancy não alcança essa região do Generative AI (comum em tenancies com escopo regional restrito, ex. América Latina), ou o modelo configurado não está mais ativo para uso on-demand nessa região — descoberto em 2026-07-24 com meta.llama-4-maverick-17b-128e-instruct-fp8, que estava aposentado on-demand em sa-saopaulo-1 desde maio/2025 apesar de ainda aparecer no catálogo. | Rode oci generative-ai model-collection list-models --compartment-id <seu-compartimento> --region <regiao-candidata> --capability CHAT --all (ou o Console OCI) e confirme que o modelo usado em GENAI_REGION está ACTIVE e sem time-on-demand-retired preenchido; ajuste GENAI_REGION (e a ACL da Seção 1.6 para o novo host) para uma região que sua tenancy alcance e que ainda sirva o modelo on-demand. |
ORA-20404 mesmo com credencial/ACL/região corretos | EMBEDDING_COMPARTMENT preenchido com o OCID errado (ex.: do Autonomous Database em vez do compartimento — os dois "parecem" um OCID válido). | Confira o prefixo: tem que ser ocid1.compartment...., nunca ocid1.autonomousdatabase..... Se corrigir, recrie a credencial (OCI_CRED) — ela grava o compartimento internamente na criação. |
Lupa do "AI Insight" falha mesmo com tudo certo em TB_26AI_TECH_PARAMS | COMPARTMENT_ID/OCI_CREDENTIAL/REGION nas Application Settings do APEX (config separada, ver seção abaixo) desatualizados em relação à tabela. | App Builder → Shared Components → Application Settings — compare com TB_26AI_TECH_PARAMS. |
O que TB_26AI_TECH_LOG guarda
Toda chamada a Generative AI/embeddings feita pelas funções FNC_26ai_rag,
fnc_26ai_tech_rag, fnc_26ai_embed e PRC_26AI_TECH grava uma
linha nesta tabela — sucesso ou erro, sem exceção. Guarda metadados de uso (objeto/função de
origem, provider, modelo, duração, tamanho do prompt/resposta em caracteres, usuário, e o
SQLCODE/SQLERRM completo 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
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;
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;
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;
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;
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;
/
Application Settings do APEX — uma segunda fonte de configuração
A funcionalidade "AI Insight" (lupa na lista de vulnerabilidades) não lê
EMBEDDING_COMPARTMENT direto de TB_26AI_TECH_PARAMS — o processo da página
81 chama apex_app_setting.get_value('OCI_CREDENTIAL') e
apex_app_setting.get_value('COMPARTMENT_ID'), valores configurados
dentro do próprio APEX (App Builder → Shared Components → Application Settings),
totalmente separados da tabela de configuração do banco. Descobrimos isso em 2026-07-24 depois de
corrigir tudo no banco e a lupa continuar falhando — os dois lugares tinham valores diferentes.
| Application Setting (APEX) | Deve bater com |
|---|---|
OCI_CREDENTIAL | OCI_CRED (nome da credencial da Seção 3) |
COMPARTMENT_ID | o mesmo valor de EMBEDDING_COMPARTMENT em TB_26AI_TECH_PARAMS |
REGION | o mesmo valor de GENAI_REGION em TB_26AI_TECH_PARAMS |
Não há uma view SQL simples e confiável pra conferir isso via Database Actions (evite adivinhar o
nome — já tentamos apex_application_settings com colunas erradas e perdemos tempo);
confira direto no App Builder: abra a aplicação → Shared Components →
Application Settings, e compare os três valores acima com a
TB_26AI_TECH_PARAMS atual. Sempre que corrigir EMBEDDING_COMPARTMENT ou
GENAI_REGION no banco, atualize também aqui — são dois lugares de armazenamento
independentes, corrigir um não corrige o outro.
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).
O botão "Gerar Insights em Lote" cria um job que roda a cada 20 segundos. Antes desta versão,
ele nunca se auto-encerrava — ficava rodando indefinidamente até alguém clicar em "parar",
consumindo chamadas de IA mesmo sem linhas pendentes. Agora 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.
Confirme isso rodando SELECT job_name, state FROM dba_scheduler_jobs WHERE job_name = 'JOB_26AI_TECH_VULNERABILIDADE';
depois de um lote — não deve mais retornar linha quando o processamento terminar.