Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1c607f3f72 |
@@ -153,7 +153,16 @@ WHERE principal = 'AMPMINSIGHTS';
|
|||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- A partir daqui, conecte-se como o usuario AMPMINSIGHTS (nao mais como ADMIN)
|
-- A partir daqui, conecte-se como o usuario AMPMINSIGHTS (nao mais como ADMIN)
|
||||||
--------------------------------------------------------------------------------</code></pre>
|
--------------------------------------------------------------------------------
|
||||||
|
--
|
||||||
|
-- VALIDACAO (rode antes de continuar - erro mais comum deste script):
|
||||||
|
SELECT USER FROM DUAL;
|
||||||
|
-- Tem que retornar AMPMINSIGHTS. Se retornar ADMIN, voce ainda nao trocou de
|
||||||
|
-- usuario/sessao - troque agora, senao a SECAO 2 (e tudo depois) vai falhar
|
||||||
|
-- com ORA-00942 (table or view "ADMIN"."TB_26AI_TECH_PARAMS" does not exist).
|
||||||
|
-- No Database Actions/SQL Developer Web, trocar o "schema" num seletor do
|
||||||
|
-- Worksheet NAO basta - precisa fazer login de novo com o usuario/senha do
|
||||||
|
-- AMPMINSIGHTS.</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<h2>Seção 2 · Tabela de configuracao (preencha os valores UMA UNICA VEZ aqui)</h2>
|
<h2>Seção 2 · Tabela de configuracao (preencha os valores UMA UNICA VEZ aqui)</h2>
|
||||||
<p>Agora conecte como o usuário <strong>AMPMINSIGHTS</strong> que você acabou de criar (não mais
|
<p>Agora conecte como o usuário <strong>AMPMINSIGHTS</strong> que você acabou de criar (não mais
|
||||||
@@ -235,7 +244,26 @@ COMMIT;
|
|||||||
|
|
||||||
-- Confira: nenhuma linha abaixo deve ainda mostrar um valor "<SUBSTITUA...>"
|
-- Confira: nenhuma linha abaixo deve ainda mostrar um valor "<SUBSTITUA...>"
|
||||||
-- antes de voce seguir para a SECAO 3.
|
-- antes de voce seguir para a SECAO 3.
|
||||||
SELECT param_name, param_value, description FROM TB_26AI_TECH_PARAMS ORDER BY param_name;</code></pre>
|
SELECT param_name, param_value, description FROM TB_26AI_TECH_PARAMS ORDER BY param_name;
|
||||||
|
|
||||||
|
-- VALIDACAO EXTRA: confere que cada OCID e do TIPO certo, nao so que foi
|
||||||
|
-- preenchido. Ja aconteceu de EMBEDDING_COMPARTMENT ser preenchido com o
|
||||||
|
-- OCID do proprio Autonomous Database (ocid1.autonomousdatabase...) em vez
|
||||||
|
-- do compartimento (ocid1.compartment...) - o valor "parece" um OCID valido
|
||||||
|
-- e passa despercebido, mas quebra silenciosamente mais tarde (Generative AI
|
||||||
|
-- retorna ORA-20404 "Object not found", dificil de associar a este campo).
|
||||||
|
SELECT param_name, param_value,
|
||||||
|
CASE
|
||||||
|
WHEN param_name = 'EMBEDDING_COMPARTMENT' AND param_value NOT LIKE 'ocid1.compartment.%'
|
||||||
|
THEN 'ERRO: deveria comecar com ocid1.compartment. - confira se nao colou o OCID do banco/Autonomous Database por engano'
|
||||||
|
WHEN param_name = 'OCI_TENANCY_OCID' AND param_value NOT LIKE 'ocid1.tenancy.%'
|
||||||
|
THEN 'ERRO: deveria comecar com ocid1.tenancy.'
|
||||||
|
WHEN param_name = 'OCI_USER_OCID' AND param_value NOT LIKE 'ocid1.user.%'
|
||||||
|
THEN 'ERRO: deveria comecar com ocid1.user.'
|
||||||
|
ELSE 'OK'
|
||||||
|
END AS validacao
|
||||||
|
FROM TB_26AI_TECH_PARAMS
|
||||||
|
WHERE param_name IN ('EMBEDDING_COMPARTMENT', 'OCI_TENANCY_OCID', 'OCI_USER_OCID');</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<h2>Seção 3 · Credencial de acesso a OCI (Generative AI + Object Storage)</h2>
|
<h2>Seção 3 · Credencial de acesso a OCI (Generative AI + Object Storage)</h2>
|
||||||
<p>Cria a credencial <code>OCI_CRED</code>, usada pelo banco para chamar o OCI Generative AI e o
|
<p>Cria a credencial <code>OCI_CRED</code>, usada pelo banco para chamar o OCI Generative AI e o
|
||||||
@@ -311,7 +339,16 @@ END;
|
|||||||
-- Conferir que a credencial foi criada (nao mostra a chave privada)
|
-- Conferir que a credencial foi criada (nao mostra a chave privada)
|
||||||
SELECT credential_name, username, comments
|
SELECT credential_name, username, comments
|
||||||
FROM user_credentials
|
FROM user_credentials
|
||||||
WHERE credential_name = 'OCI_CRED';</code></pre>
|
WHERE credential_name = 'OCI_CRED';
|
||||||
|
|
||||||
|
-- VALIDACAO/LEMBRETE: esta credencial grava tenancy/user/compartment por
|
||||||
|
-- dentro, NO MOMENTO em que e criada. Se voce corrigir qualquer valor da
|
||||||
|
-- SECAO 2 (principalmente EMBEDDING_COMPARTMENT) DEPOIS de ja ter rodado
|
||||||
|
-- este bloco, a credencial antiga continua com o valor velho - corrigir a
|
||||||
|
-- tabela sozinho NAO conserta. Nesse caso, rode:
|
||||||
|
-- BEGIN DBMS_VECTOR_CHAIN.DROP_CREDENTIAL(credential_name => 'OCI_CRED'); END;
|
||||||
|
-- /
|
||||||
|
-- e este bloco de novo, nesta ordem.</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<h2>Seção 4 · Modelo de embeddings ONNX</h2>
|
<h2>Seção 4 · Modelo de embeddings ONNX</h2>
|
||||||
<p>Opcional — só necessária se você for usar embeddings de imagem/texto combinados (CLIP). O
|
<p>Opcional — só necessária se você for usar embeddings de imagem/texto combinados (CLIP). O
|
||||||
@@ -1789,7 +1826,22 @@ EXCEPTION
|
|||||||
END IF;
|
END IF;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
END;
|
END;
|
||||||
/</code></pre>
|
/
|
||||||
|
|
||||||
|
-- VALIDACAO: confere que todos os objetos desta secao compilaram sem erro
|
||||||
|
-- antes de seguir para a instalacao do APEX. Nao vale so olhar se o CREATE
|
||||||
|
-- "rodou sem erro na tela" - PL/SQL pode compilar um objeto que chama outro
|
||||||
|
-- ainda inexistente sem acusar erro na hora (resolucao adiada de nomes); o
|
||||||
|
-- STATUS aqui e a fonte de verdade.
|
||||||
|
SELECT object_name, object_type, status
|
||||||
|
FROM user_objects
|
||||||
|
WHERE object_name IN ('TB_26AI_TECH_LOG','PRC_26AI_TECH_LOG','FNC_26AI_EMBED',
|
||||||
|
'FNC_26AI_TECH_RAG','FNC_26AI_RAG','PRC_26AI_TECH')
|
||||||
|
ORDER BY object_name;
|
||||||
|
-- As 6 linhas tem que aparecer com STATUS = VALID. Se alguma faltar, o
|
||||||
|
-- CREATE dela nao rodou (role a secao de novo); se aparecer INVALID, rode
|
||||||
|
-- para descobrir o motivo:
|
||||||
|
-- SELECT line, position, text FROM user_errors WHERE name = '<NOME_DO_OBJETO>' ORDER BY sequence;</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<h2>Seção 8 · Instalar a aplicacao APEX (ampmInsights)</h2>
|
<h2>Seção 8 · Instalar a aplicacao APEX (ampmInsights)</h2>
|
||||||
<p>Últimos passos, agora fora do SQL Worksheet: instalar a aplicação APEX. Detalhado em
|
<p>Últimos passos, agora fora do SQL Worksheet: instalar a aplicação APEX. Detalhado em
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ rapidamente qualquer problema, e o checklist abaixo para os casos mais comuns.</
|
|||||||
<tr><td>Erro de rede/timeout ao chamar o Generative AI</td><td>ACL de rede (Seção 1.6) não cobre o host correto.</td><td><code>SELECT host, privilege FROM dba_host_aces WHERE principal = 'AMPMINSIGHTS';</code> — deve listar <code>inference.generativeai.us-chicago-1.oci.oraclecloud.com</code> com <code>RESOLVE</code> e <code>CONNECT</code>.</td></tr>
|
<tr><td>Erro de rede/timeout ao chamar o Generative AI</td><td>ACL de rede (Seção 1.6) não cobre o host correto.</td><td><code>SELECT host, privilege FROM dba_host_aces WHERE principal = 'AMPMINSIGHTS';</code> — deve listar <code>inference.generativeai.us-chicago-1.oci.oraclecloud.com</code> com <code>RESOLVE</code> e <code>CONNECT</code>.</td></tr>
|
||||||
<tr><td><code>ORA-20404</code> ("Object not found", domínio <code>oci.my$cloud_domain</code>)</td><td>Perfil de SELECT AI usando a região "de casa" do tenancy (<code>OCI_REGION</code>) em vez da região do Generative AI.</td><td>Use o valor de <code>GENAI_REGION</code> (Seção 2), não <code>OCI_REGION</code> — ver Seção 5.3 do <a href="04-passo-a-passo-banco.html">Passo a passo: banco de dados</a>.</td></tr>
|
<tr><td><code>ORA-20404</code> ("Object not found", domínio <code>oci.my$cloud_domain</code>)</td><td>Perfil de SELECT AI usando a região "de casa" do tenancy (<code>OCI_REGION</code>) em vez da região do Generative AI.</td><td>Use o valor de <code>GENAI_REGION</code> (Seção 2), não <code>OCI_REGION</code> — ver Seção 5.3 do <a href="04-passo-a-passo-banco.html">Passo a passo: banco de dados</a>.</td></tr>
|
||||||
<tr><td><code>ORA-20404</code> com URL bem formada (região correta no domínio)</td><td>A tenancy não alcança a região configurada em <code>GENAI_REGION</code>, ou o modelo não está mais disponível para uso on-demand nessa região (a disponibilidade de modelos varia por região e muda com o tempo).</td><td>Rode <code>oci generative-ai model-collection list-models --compartment-id <seu-compartimento> --region <regiao-candidata> --capability CHAT --all</code> (ou o Console OCI) e confirme que o modelo usado está <code>ACTIVE</code> e sem <code>time-on-demand-retired</code> preenchido nessa região; ajuste <code>GENAI_REGION</code> (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.</td></tr>
|
<tr><td><code>ORA-20404</code> com URL bem formada (região correta no domínio)</td><td>A tenancy não alcança a região configurada em <code>GENAI_REGION</code>, ou o modelo não está mais disponível para uso on-demand nessa região (a disponibilidade de modelos varia por região e muda com o tempo).</td><td>Rode <code>oci generative-ai model-collection list-models --compartment-id <seu-compartimento> --region <regiao-candidata> --capability CHAT --all</code> (ou o Console OCI) e confirme que o modelo usado está <code>ACTIVE</code> e sem <code>time-on-demand-retired</code> preenchido nessa região; ajuste <code>GENAI_REGION</code> (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.</td></tr>
|
||||||
|
<tr><td><code>ORA-20404</code> mesmo com credencial/ACL/região corretos</td><td><code>EMBEDDING_COMPARTMENT</code> preenchido com o OCID errado (ex.: do Autonomous Database em vez do compartimento — os dois "parecem" um OCID válido).</td><td>Confira o prefixo: tem que ser <code>ocid1.compartment....</code>, nunca <code>ocid1.autonomousdatabase....</code>. Se corrigir, recrie a credencial (<code>OCI_CRED</code>) — ela grava o compartimento internamente na criação.</td></tr>
|
||||||
|
<tr><td>Lupa do "AI Insight" falha mesmo com tudo certo em <code>TB_26AI_TECH_PARAMS</code></td><td><code>COMPARTMENT_ID</code>/<code>OCI_CREDENTIAL</code>/<code>REGION</code> nas Application Settings do APEX (config separada, ver seção abaixo) desatualizados em relação à tabela.</td><td>App Builder → Shared Components → Application Settings — compare com <code>TB_26AI_TECH_PARAMS</code>.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -127,6 +129,27 @@ END;
|
|||||||
/</code></pre>
|
/</code></pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h2>Application Settings do APEX — uma segunda fonte de configuração</h2>
|
||||||
|
<p>A funcionalidade "AI Insight" (lupa na lista de vulnerabilidades) não lê
|
||||||
|
<code>EMBEDDING_COMPARTMENT</code> direto de <code>TB_26AI_TECH_PARAMS</code> — o processo da página
|
||||||
|
usa <code>apex_app_setting.get_value('OCI_CREDENTIAL')</code> e
|
||||||
|
<code>apex_app_setting.get_value('COMPARTMENT_ID')</code>, valores configurados dentro do próprio
|
||||||
|
APEX (App Builder → Shared Components → Application Settings), separados da tabela de configuração
|
||||||
|
do banco.</p>
|
||||||
|
<div class="table-wrap">
|
||||||
|
<table>
|
||||||
|
<tr><th>Application Setting (APEX)</th><th>Deve bater com</th></tr>
|
||||||
|
<tr><td><code>OCI_CREDENTIAL</code></td><td><code>OCI_CRED</code> (nome da credencial da Seção 3)</td></tr>
|
||||||
|
<tr><td><code>COMPARTMENT_ID</code></td><td>o mesmo valor de <code>EMBEDDING_COMPARTMENT</code> em <code>TB_26AI_TECH_PARAMS</code></td></tr>
|
||||||
|
<tr><td><code>REGION</code></td><td>o mesmo valor de <code>GENAI_REGION</code> em <code>TB_26AI_TECH_PARAMS</code></td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<p>Confira direto no App Builder: abra a aplicação → <strong>Shared Components</strong> →
|
||||||
|
<strong>Application Settings</strong>, e compare os três valores acima com a
|
||||||
|
<code>TB_26AI_TECH_PARAMS</code> atual. Sempre que corrigir <code>EMBEDDING_COMPARTMENT</code> ou
|
||||||
|
<code>GENAI_REGION</code> no banco, atualize também aqui — são dois lugares de armazenamento
|
||||||
|
independentes, corrigir um não corrige o outro.</p>
|
||||||
|
|
||||||
<h2>Ferramentas nativas — sem código novo</h2>
|
<h2>Ferramentas nativas — sem código novo</h2>
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
<div class="card"><h4>ADB Performance Hub</h4><p>Saúde do banco (CPU, I/O, sessões, SQL Monitor) direto no Console OCI, sem instrumentação extra.</p></div>
|
<div class="card"><h4>ADB Performance Hub</h4><p>Saúde do banco (CPU, I/O, sessões, SQL Monitor) direto no Console OCI, sem instrumentação extra.</p></div>
|
||||||
|
|||||||
@@ -145,6 +145,15 @@ WHERE principal = 'AMPMINSIGHTS';
|
|||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- A partir daqui, conecte-se como o usuario AMPMINSIGHTS (nao mais como ADMIN)
|
-- A partir daqui, conecte-se como o usuario AMPMINSIGHTS (nao mais como ADMIN)
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
--
|
||||||
|
-- VALIDACAO (rode antes de continuar - erro mais comum deste script):
|
||||||
|
SELECT USER FROM DUAL;
|
||||||
|
-- Tem que retornar AMPMINSIGHTS. Se retornar ADMIN, voce ainda nao trocou de
|
||||||
|
-- usuario/sessao - troque agora, senao a SECAO 2 (e tudo depois) vai falhar
|
||||||
|
-- com ORA-00942 (table or view "ADMIN"."TB_26AI_TECH_PARAMS" does not exist).
|
||||||
|
-- No Database Actions/SQL Developer Web, trocar o "schema" num seletor do
|
||||||
|
-- Worksheet NAO basta - precisa fazer login de novo com o usuario/senha do
|
||||||
|
-- AMPMINSIGHTS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -217,6 +226,25 @@ COMMIT;
|
|||||||
-- antes de voce seguir para a SECAO 3.
|
-- antes de voce seguir para a SECAO 3.
|
||||||
SELECT param_name, param_value, description FROM TB_26AI_TECH_PARAMS ORDER BY param_name;
|
SELECT param_name, param_value, description FROM TB_26AI_TECH_PARAMS ORDER BY param_name;
|
||||||
|
|
||||||
|
-- VALIDACAO EXTRA: confere que cada OCID e do TIPO certo, nao so que foi
|
||||||
|
-- preenchido. Ja aconteceu de EMBEDDING_COMPARTMENT ser preenchido com o
|
||||||
|
-- OCID do proprio Autonomous Database (ocid1.autonomousdatabase...) em vez
|
||||||
|
-- do compartimento (ocid1.compartment...) - o valor "parece" um OCID valido
|
||||||
|
-- e passa despercebido, mas quebra silenciosamente mais tarde (Generative AI
|
||||||
|
-- retorna ORA-20404 "Object not found", dificil de associar a este campo).
|
||||||
|
SELECT param_name, param_value,
|
||||||
|
CASE
|
||||||
|
WHEN param_name = 'EMBEDDING_COMPARTMENT' AND param_value NOT LIKE 'ocid1.compartment.%'
|
||||||
|
THEN 'ERRO: deveria comecar com ocid1.compartment. - confira se nao colou o OCID do banco/Autonomous Database por engano'
|
||||||
|
WHEN param_name = 'OCI_TENANCY_OCID' AND param_value NOT LIKE 'ocid1.tenancy.%'
|
||||||
|
THEN 'ERRO: deveria comecar com ocid1.tenancy.'
|
||||||
|
WHEN param_name = 'OCI_USER_OCID' AND param_value NOT LIKE 'ocid1.user.%'
|
||||||
|
THEN 'ERRO: deveria comecar com ocid1.user.'
|
||||||
|
ELSE 'OK'
|
||||||
|
END AS validacao
|
||||||
|
FROM TB_26AI_TECH_PARAMS
|
||||||
|
WHERE param_name IN ('EMBEDDING_COMPARTMENT', 'OCI_TENANCY_OCID', 'OCI_USER_OCID');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
@@ -281,6 +309,15 @@ SELECT credential_name, username, comments
|
|||||||
FROM user_credentials
|
FROM user_credentials
|
||||||
WHERE credential_name = 'OCI_CRED';
|
WHERE credential_name = 'OCI_CRED';
|
||||||
|
|
||||||
|
-- VALIDACAO/LEMBRETE: esta credencial grava tenancy/user/compartment por
|
||||||
|
-- dentro, NO MOMENTO em que e criada. Se voce corrigir qualquer valor da
|
||||||
|
-- SECAO 2 (principalmente EMBEDDING_COMPARTMENT) DEPOIS de ja ter rodado
|
||||||
|
-- este bloco, a credencial antiga continua com o valor velho - corrigir a
|
||||||
|
-- tabela sozinho NAO conserta. Nesse caso, rode:
|
||||||
|
-- BEGIN DBMS_VECTOR_CHAIN.DROP_CREDENTIAL(credential_name => 'OCI_CRED'); END;
|
||||||
|
-- /
|
||||||
|
-- e este bloco de novo, nesta ordem.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
@@ -1578,6 +1615,21 @@ EXCEPTION
|
|||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
|
-- VALIDACAO: confere que todos os objetos desta secao compilaram sem erro
|
||||||
|
-- antes de seguir para a instalacao do APEX. Nao vale so olhar se o CREATE
|
||||||
|
-- "rodou sem erro na tela" - PL/SQL pode compilar um objeto que chama outro
|
||||||
|
-- ainda inexistente sem acusar erro na hora (resolucao adiada de nomes); o
|
||||||
|
-- STATUS aqui e a fonte de verdade.
|
||||||
|
SELECT object_name, object_type, status
|
||||||
|
FROM user_objects
|
||||||
|
WHERE object_name IN ('TB_26AI_TECH_LOG','PRC_26AI_TECH_LOG','FNC_26AI_EMBED',
|
||||||
|
'FNC_26AI_TECH_RAG','FNC_26AI_RAG','PRC_26AI_TECH')
|
||||||
|
ORDER BY object_name;
|
||||||
|
-- As 6 linhas tem que aparecer com STATUS = VALID. Se alguma faltar, o
|
||||||
|
-- CREATE dela nao rodou (role a secao de novo); se aparecer INVALID, rode
|
||||||
|
-- para descobrir o motivo:
|
||||||
|
-- SELECT line, position, text FROM user_errors WHERE name = '<NOME_DO_OBJETO>' ORDER BY sequence;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user