Chamar Funções da Nuvem e Procedimentos Externos
Em um Oracle Database local (Enterprise, Standard, Express, Personal Editions), você pode criar funções definidas pelo usuário em PL/SQL, Java ou C para fornecer uma funcionalidade que não está disponível em funções incorporadas SQL ou SQL. Você pode chamar essas funções definidas pelo usuário em uma instrução SQL sempre que uma expressão puder ocorrer. Consulte Sobre Funções Definidas pelo Usuário.
A partir do Oracle Database 19c, você pode criar, armazenar e executar scripts Python usando o recurso de execução Python Embedded no SQL. Consulte Execução de Python Incorporada usando OML4Py.
O Autonomous AI Database on Dedicated Exadata Infrastructure da Oracle estende o recurso de funções definidas pelo usuário para a nuvem, permitindo que você grave Funções SQL que chamem serviços de computação sem servidor na nuvem, como a OCI Functions e AWS Lambda Functions ou External Procedures - que incluem rotinas C/C++, scripts Shell ou Python - em execução em uma VM de computação do OCI externa ao Autonomous AI Database.
Tópicos Relacionados
Sobre o Serviço Cloud Functions e External Procedures
As funções definidas pelo usuário permitem chamar funções disponíveis externamente do código PL/SQL ou SQL no banco de dados. Você pode chamar as seguintes funções externas usando funções definidas pelo usuário:
- Oracle Cloud Infrastructure Functions: O Oracle Cloud Infrastructure Functions é uma plataforma Functions-as-a-Service totalmente gerenciada, multitenant, altamente escalável e sob demanda. O Oracle Cloud Infrastructure Functions é criado no Oracle Cloud Infrastructure de nível corporativo e com tecnologia pelo mecanismo de código aberto do Projeto Fn. Consulte Visão Geral do Serviço OCI Functions para obter mais informações.
- Funções AWS Lambda: O AWS Lambda é um serviço de computação orientado a eventos e sem servidor que permite executar código para praticamente qualquer aplicativo ou serviço de backend sem provisionar ou gerenciar servidores. Consulte AWS Lambda para obter mais informações.
- Procedimentos Externos: OS procedimentos externos são funções escritas em uma linguagem de terceira geração (C, por exemplo), scripts de shell do SO ou scripts Python que podem ser chamados como funções SQL ou procedimentos ou funções PL/SQL. Consulte O que é um Procedimento Externo para obter mais informações.
Chamar o OCI Cloud Functions como Funções SQL
Mostra as etapas para chamar funções de nuvem do OCI como funções SQL em seu Autonomous AI Database on Dedicated Exadata Infrastructure.
Antes de prosseguir com essas etapas, supõe-se que você tenha criado e implantado o OCI Functions em uma tenancy e compartimento do OCI. Consulte Funções do OCI para obter detalhes.
Depois de trabalhar com as Funções do OCI, você usará as APIs PL/SQL DBMS_CLOUD e DBMS_CLOUD_FUNCTION para criar um catálogo de funções de encapsulador SQL no Autonomous AI Database que fazem referência e chamam sua respectiva função de nuvem por meio de seus pontos finais de API. Você usará a API DBMS_CLOUD_FUNCTION para gerenciar as funções do seu aplicativo de banco de dados.
-
Crie credenciais usando o Procedimento DBMS_CLOUD.CREATE_CREDENTIAL.
Informe a chave Privada da API do usuário da tenancy do OCI (conteúdo do arquivo dot-pem que você fez download ao criar a chave de API) como o objeto de credencial, a impressão digital da chave, o OCID da tenancy e o OCID do usuário. Consulte Chaves e OCIDs Obrigatórios.
SET DEFINE OFF BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'OCI_CRED', -- provide a string as the name user_ocid => 'user_ocid', -- provide the OCID string for the user, obtained from OCI Console User Profile tenancy_ocid => 'tenancy_ocid', -- provide the OCID string for the tenancy, obtained from OCI Console User Profile private_key => 'private_key', -- provide the content of the dot-pem file that you downloaded when you created the API Key fingerprint => 'fingerprint' -- provide the fingerprint string for the API key ); END; /Isso cria o objeto de credencial OCI_CRED.
Consulte CREATE_CREDENTIAL Procedures para obter mais informações.
-
Crie um objeto Catálogo usando o Procedimento DBMS_CLOUD_FUNCTION.CREATE_CATALOG.
Um catálogo é uma coleção de funções wrapper que fazem referência e chamam suas respectivas funções de nuvem por meio de seus pontos finais de API. Forneça o objeto de credencial, o nome do provedor de serviços em nuvem - neste caso, o OCI e o ID da Região do OCI (PHX neste exemplo) e o ID do Compartimento do OCI no qual as Funções do OCI estão localizadas.
BEGIN DBMS_CLOUD_FUNCTION.CREATE_CATALOG ( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', service_provider => 'OCI', cloud_params => '{"region_id":"phx", "compartment_id":"compartment_id"}' ); END; /Isso cria o objeto de catálogo OCI_DEMO_CATALOG.
Consulte CREATE_CATALOG Procedures para obter mais informações. Você pode consultar DBA_CLOUD_FUNCTION_CATALOG View e USER_CLOUD_FUNCTION_CATALOG View para recuperar a lista de todos os catálogos de funções na nuvem no seu banco de dados.
-
Você pode listar todas as funções de nuvem no catálogo usando o Procedimento DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS.
SET PAGESIZE 1000 VAR function_list CLOB; BEGIN DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS ( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', function_list => :function_list ); END; / PL/SQL procedure successfully completed. SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual; SEARCH_RESULTS ------------------------------------------------------------------------------------------------ [ { "functionName" : "create_par", "functionId" : "ocid.funfc.oc1.phx.aaaa_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" }, { "functionName" : "fintech", "functionId" : "ocid.funfc.oc1.phx.bbbb_example" "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud.com_example" }, { "functionName" : "jwt_codec", "functionId" : "ocid.funfc.oc1.phx.jwt_code_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" }, { "functionName" : "oci-objectstorage-create-par-python", "functionId" : "ocid.funfc.oc1.phx.aaaaaaaas_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" }, { "functionName" : "run_dbt", "functionId" : "ocid.funfc.oc1.phx.aaaaaaaav_example", "invokeEndpoint" : "https://dw.us.func.oci.oraclecloud_example.com" } ]Consulte LIST_FUNCTIONS Procedures para obter mais informações.
-
Crie a Função SQL Wrapper. Você pode usar um dos dois métodos a seguir para criar as funções SQL wrapper do catálogo, que chamam suas respectivas funções de nuvem:
- Você pode usar o DBMS_CLOUD_FUNCTION. SYNC_FUNCTIONS Procedimento para gerar wrappers SQL do objeto do catálogo.
- Você pode criar manualmente funções de encapsulador individuais usando DBMS_CLOUD_FUNCTION. CREATE_FUNCTION Procedimento.
- SYNC_FUNCTIONS: SYNC_FUNCTIONS sincroniza automaticamente (cria e/ou atualiza) funções de encapsulador no catálogo com a lista completa de funções de nuvem definidas na região, no compartimento e na tenancy com as quais o catálogo foi criado.
BEGIN DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS ( catalog_name => 'OCI_DEMO_CATALOG' ); END; /Isso cria um encapsulador PL/SQL para adicionar novas funções ao catálogo e remover encapsuladores para funções que foram excluídas do catálogo.
Você pode verificar os resultados da sincronização usando a consulta a seguir para um determinado usuário atual.
SHOW user TEST_USER SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION'; OBJECT_NAME -------------------------------------------------------------------------------- CREATE_PAR FINTECH JWT_CODEC OCI-OBJECTSTORAGE-CREATE-PAR-PYTHON RUN_DBTConsulte SYNC_FUNCTIONS Procedures para obter mais informações.
-
CREATE_FUNCTION: Você pode criar manualmente uma Função SQL no seu catálogo que chame sua respectiva função de nuvem usando DBMS_CLOUD.CREATE_FUNCTION.
VAR function_args CLOB; EXEC :function_args := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}'); BEGIN DBMS_CLOUD_FUNCTION.CREATE_FUNCTION ( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', function_name => 'FINTECH_FUNCTION', function_id => 'ocid1.fnfunc.oc1.phx.aaabbbcccc_example', input_args => :function_args ); END; /Isso cria a função FINTECH_FUN no catálogo OCI_DEMO_CATALOG, como referência à respectiva função de nuvem cujo ponto final é referenciado pelo parâmetro FUNCTION_ID. Chamar a função no catálogo junto com seus argumentos executa a função de nuvem correspondente no OCI e fornece a saída retornada pela função de nuvem.
Observação:
O nome da Função do OCI pode ser totalmente diferente de FINTECH_FUNCTION. Somente o OCID da Função do OCI que você fornece como entrada para o parâmetro function_id é levado em consideração para criar essa referência. -
CREATE_FUNCTION com tipos de retorno personalizados e handlers de resposta: A criação manual de funções permite que você crie tipos de retorno personalizados e handlers de resposta, e mostrados no exemplo a seguir.
Primeiro, crie um tipo de retorno e o handler de resposta da função.
CREATE OR REPLACE TYPE fintech_rt AS OBJECT ( status VARCHAR2(1000), output CLOB ); / Type created. CREATE OR REPLACE FUNCTION fintech_response_handler(function_response IN CLOB) RETURN fintech_rt IS l_comp fintech_rt; l_json_obj JSON_OBJECT_T; status VARCHAR2(1000); output CLOB; BEGIN l_json_obj := JSON_OBJECT_T.parse(function_response); status := l_json_obj.get('STATUS').to_string; output := l_json_obj.get('RESPONSE_BODY').to_string; l_comp := fintech_rt(status,output); RETURN l_comp; END; / Function created.Em seguida, use esse tipo e handler de resposta durante a criação manual da Função SQL Wrapper.
VAR input_param CLOB; VAR l_return_type VARCHAR2(100); VAR l_response_handler VARCHAR2(1000); -- Define function parameters exec :input_param := TO_CLOB('{"command": "VARCHAR2", "value": "VARCHAR2"}'); PL/SQL procedure successfully completed. exec :l_return_type := 'fintech_rt'; PL/SQL procedure successfully completed. exec :l_response_handler := 'fintech_response_handler'; PL/SQL procedure successfully completed. BEGIN DBMS_CLOUD_FUNCTION.CREATE_FUNCTION ( credential_name => 'OCI_CRED', catalog_name => 'OCI_DEMO_CATALOG', function_name => 'FINTECH_FUNCTION', function_id => 'ocid1.fnfunc.oc1.phx.aaabbbcccc_example', input_args => :input_param, return_type => :l_return_type, response_handler => :l_response_handler ); END; /Você pode consultar as exibições DBA_CLOUD_FUNCTION View e USER_CLOUD_FUNCTION View para recuperar a lista de todas as funções do seu banco de dados.
Consulte CREATE_FUNCTION Procedures para obter mais informações.
Assim que a função é criada, você pode DESCRIBE para obter os detalhes de retorno dela.
DESC fintech_fun COLUMN STATUS format a30 COLUMN OUTPUT format a30Você pode então chamar a função, fornecendo os valores para parâmetros de entrada.
SET SERVEROUTPUT ON DECLARE l_comp fintech_rt; BEGIN l_comp := fintech_fun(command=>'tokenize',value => 'PHI_INFORMATION'); DBMS_OUTPUT.put_line ('Status of the function = '|| l_comp.status); DBMS_OUTPUT.put_line ('Response of the function = '|| l_comp.output); END; /Isso chama a função de nuvem
fintech_funchamando a referência de funçãooocid1.funfn.oci.phx.aaaaaa_exampleno catálogoOCI_DEMO_CATALOG.
-
Você pode eliminar uma função existente usando o procedimento DROP_FUNCTION.
BEGIN DBMS_CLOUD_FUNCTION.DROP_FUNCTION ( catalog_name => 'OCI_DEMO_CATALOG', function_name => 'fintech_fun'); END; /Isso elimina a função
FINTECH_FUNdo catálogoOCI_DEMO_CATALOG.Consulte DROP_FUNCTION Procedures para obter mais informações.
-
Você pode eliminar um catálogo existente usando o procedimento DROP_CATALOG.
BEGIN DBMS_CLOUD_FUNCTION.DROP_CATALOG ( catalog_name => 'OCI_DEMO_CATALOG' ); END; /Isso elimina o
OCI_DEMO_CATALOGdo seu banco de dados.Consulte DROP_CATALOG Procedures para obter mais informações.
Chamar Funções do AWS Lambda como Funções SQL
Mostra as etapas para chamar funções remotas da AWS como funções SQL no Autonomous AI Database on Dedicated Exadata Infrastructure.
Antes de prosseguir com essas etapas, presume-se que você tenha criado e implantado o AWS Lambda Functions em uma tenancy da AWS. Consulte AWS Lambda para obter detalhes.
Para acessar as funções do AWS lambda, você precisa configurar as políticas necessárias no Oracle Cloud Infrastructure. Consulte Criando uma política do serviço IAM para acessar recursos do AWS Lambda e Usando políticas baseadas em recursos para o Lambda para obter mais informações.
Após trabalhar nas funções do AWS Lambda, você usará as APIs PL/SQL DBMS_CLOUD e DBMS_CLOUD_FUNCTION para criar um catálogo de funções de encapsulador SQL no Autonomous AI Database que fazem referência e chamam sua respectiva função de nuvem por meio de seus pontos finais de API. Você usará a API DBMS_CLOUD_FUNCTION para gerenciar as funções do seu aplicativo de banco de dados.
- Crie uma credencial usando o procedimento DBMS_CLOUD.CREATE_CREDENTIAL usando a Chave Secreta da AWS como objeto de credencial.
SET DEFINE OFF BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'AWS_CRED', username => 'access_key_ID', -- ID of Secret Key password => 'secret_access_key' -- Secret Key password ); END; /Isso cria o objeto de credencial
AWS_CRED.Consulte CREATE_CREDENTIAL Procedures para obter mais informações.
-
Crie um objeto Catálogo usando o Procedimento DBMS_CLOUD_FUNCTION.CREATE_CATALOG.
Um catálogo é uma coleção de funções wrapper que fazem referência e chamam suas respectivas funções de nuvem por meio de seus pontos finais de API. Forneça o objeto de credencial, o nome do provedor de serviços em nuvem - neste caso, a AWS e o ID da Região da AWS (
ap-northeast-1neste exemplo) no qual as Funções do AWS Lambda estão localizadas.BEGIN DBMS_CLOUD_FUNCTION.CREATE_CATALOG ( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', service_provider => 'AWS', cloud_params => '{"region_id":"ap-northeast-1"}' ); END; /Isso cria o objeto de catálogo
AWS_DEMO_CATALOG.Consulte CREATE_CATALOG Procedures para obter mais informações. Você pode consultar DBA_CLOUD_FUNCTION_CATALOG View e USER_CLOUD_FUNCTION_CATALOG View para recuperar a lista de todos os catálogos do seu banco de dados.
O restante das etapas/operações - ou seja, Procedimento LIST_FUNCTIONS, Procedimento SYNC_FUNCTIONS, Procedimento CREATE_FUNCTION, Procedimento DROP_FUNCTION e Procedimento DROP_CATALOG - têm o mesmo uso descrito para funções de nuvem do OCI. Consulte Chamar OCI Cloud Functions como SQL Functions.
Visão geral de procedimentos externos
Fornece uma visão geral de Procedimentos Externos e seu uso em aplicativos Autonomous AI Database on Dedicated Infrastructure.
procedures externos são funções escritas em uma linguagem de terceira geração e chamadas como funções SQL ou procedimentos ou funções PL/SQL. O SQL e o PL/SQL são adequados para um processamento rápido e eficiente de dados e transações no banco de dados. Os procedimentos externos podem complementar SQL e PL/SQL executando tarefas de computação e memória intensiva em uma VM externa dedicada e fornecendo os resultados de volta ao banco de dados. Exemplos típicos de tais tarefas são problemas científicos e de engenharia cujas bibliotecas computacionais existem no sistema operacional Linux (e não são facilmente portáveis para uma plataforma de dados), análise de dados off-line, controle de dispositivos e processos em tempo real e assim por diante.
Você pode chamar e usar procedimentos externos no seu Autonomous AI Database com funções definidas pelo usuário. Em vez de executar esses procedimentos no banco de dados, você colocará o código executável em uma VM dedicada e personalizada do OCI Linux que é provisionada com um contêiner e runtime para executar programas C, scripts Shell e scripts Python, juntamente com bibliotecas Oracle SQL*Net para permitir a execução remota de SQL do banco de dados.
Observação:
O host remoto para procedimentos externos deve ser uma VM EXTPROC do OCI Linux provisionada pelo OCI Marketplace e configurada em uma VCN (Virtual Cloud Network) do OCI adequada. Consulte Configuração do Sistema no OCI para Scripts e Procedimentos Externos para obter detalhes.
A execução remota na VM EXTPROC do OCI Linux só é suportada pelo Autonomous AI Database on Dedicated Exadata Infrastructure no Oracle Public Cloud a partir da versão 19.30 e no Oracle Database 26ai, começando pela versão 23.26.1. Esse recurso ainda não é suportado pelo banco de dados Autonomous AI Database on Dedicated Exadata Infrastructure no Exadata Cloud@Customer (ExaCC).
Configuração do sistema para scripts e procedimentos externos
Mostra as etapas para provisionar a VM EXTPROC e as etapas para configurar a rede e a computação do OCI para executar procedimentos externos.
Minimamente, a arquitetura consiste nos seguintes recursos:
- Rede Virtual na Nuvem do OCI provisionada em um Compartimento do OCI na tenancy do OCI.
- Um Autonomous AI Database, criado como uma instância em um ACD (Autonomous Container Database), que é provisionado de um AVMC (Autonomous Exadata VM Cluster), criado no Exadata Infrastructure no Oracle Public Cloud.
- Uma VM EXTPROC provisionada como parte de uma Pilha EXTPROC do OCI Marketplace.
Como prática recomendada, o cluster AVM será colocado em uma sub-rede privada em uma VCN. A tabela de roteamento Padrão e as Listas de Segurança da VCN serão configuradas de acordo com os requisitos do Autonomous AI Database na tenancy do OCI. A VCN pode ter uma tabela de Roteamento Padrão e uma Lista de Segurança Padrão, na qual você pode definir todas as regras de roteamento e segurança. Opcionalmente, a VCN poderá ser configurada com um gateway NAT se os aplicativos do Autonomous AI Database e outros recursos na sub-rede privada precisarem de acesso de Saída à Internet.
Siga estas etapas mínimas de configuração do OCI Networking ao introduzir a VM ExtProc nesta topologia.
- Você deve poder fazer log-in na sua VM ExtProc para criar a biblioteca compartilhada (dot-so) com os procedimentos externos implementados em C/C++, inspecionar e configurar a VM e o contêiner e executar outras operações desse tipo.
- A prática típica é configurar a VM EXTPROC para estar em uma sub-rede pública na VCN. Nesse caso, você deverá criar um Gateway de Internet na VCN (se ainda não tiver sido configurado pelo administrador).
Observação:
A VM EXTPROC NÃO deve estar em uma sub-rede cujo intervalo de CIDRs seja 10.x.x.x. Se o endereço IP da VM EXPROC for 10.x.x.x, ele não poderá se comunicar com o Autonomous AI Database.
- Você deve definir uma regra de Entrada na Lista de Segurança da VCN para permitir acesso de log-in SSH à VM por meio da Porta 22. Você também deve definir uma regra de Saída na Lista de Segurança da VCN para permitir que o ADBD acesse a Porta de Destino 16000 para ser específica, ou todas as portas de destino, em geral. Consulte Acesso e Segurança de Rede do OCI.
- Como parte do provisionamento da Pilha de VMs EXTPROC, você fornecerá todos os endereços IP do Cliente do AVMC. Você obterá esses endereços IP de Cliente IPv4 no Painel de Controle do OCI para o Cluster de AVM.
- Posteriormente, a ferramenta de provisionamento criará automaticamente um grupo de segurança de rede (NSG) - chamado nsg_acl. Esse NSG terá uma Regra de Entrada que permite aos endereços IP do Cliente Dedicado do Autonomous Database serem as únicas origens que podem acessar o destino da Porta 16000.
Tópicos Avançados
- Se as sub-redes que hospedam a VM ExtProc e o Autonomous AI Database estiverem na mesma VCN, não será necessário especificar nenhuma regra de roteamento especial na tabela de roteamento da VCN. Se as sub-redes que hospedam a VM ExtProc e o ADBD estiverem em VCNs diferentes, você deverá implementar o pareamento de VCN. Consulte Pareamento de VCN.
- Se você optar por configurar a VM ExtProc para estar em uma sub-rede privada, poderá fazer log-in na VM por meio de um servidor bastion/jump-off e ativar a Entrada somente na VM ExtProc e proteger o acesso aos outros recursos na sub-rede privada, como o Autonomous AI Database. Consulte os Guias de Rede do OCI para obter detalhes.
Implementar Funções Definidas pelo Usuário com Procedimentos Externos
-
Provisionar e Configurar a VM EXTPROC no OCI MarketPlace
- Acesse a Console do OCI em http://cloud.oracle.com. Consulte Acessar a Console do Oracle Cloud Infrastructure para mais informações.
- No menu de navegação esquerdo do Oracle Cloud Infrastructure, acesse o Marketplace e, em Marketplace, clique em Todos os Aplicativos.
- Insira "EXTPROC" na barra de pesquisa e clique em Pesquisar. Você verá dois widgets - um com label Stack e outro com label Image.
- Escolha o widget chamado Pilha (isso é importante). Isso levará você à página de detalhes do Oracle Autonomous Database EXTPROC Agent, fornecendo a versão da pilha, a data da release e as notas da release sobre a Pilha. Nesta página, clique no botão Iniciar Pilha. Isso o levará à próxima página Iniciar Pilha.
-
Na página Ativar Pilha:
- Na lista drop-down Versão, escolha a versão do pacote da pilha.
- Na lista drop-down Compartimento, selecione o nome do compartimento no qual você deseja provisionar a VM EXTPROC. A menos que você tenha motivos específicos para não fazer isso, escolha o mesmo compartimento do ADBD (como prática recomendada, evite o compartimento raiz de qualquer recurso). Revise Configuração do Sistema para Scripts e Procedimentos Externos para fazer a escolha apropriada para o compartimento.
- Aceite os termos e condições e clique em Iniciar Pilha.
Isso o levará à próxima página - o assistente Criar Pilha.
- Nesta página, forneça um nome, uma descrição, um nome doCompartimento, a versão do Terraform e qualquer informação de Tag. O nome do compartimento é uma entrada obrigatória e mais importante para o assistente nesta página. Clique em Próximo.
- Isso leva você à página de variáveis de configuração da VM EXTPROC (também chamada de Agente EXTPROC). A primeira parte desta página reúne as informações sobre as bibliotecas EXTPROC e uma senha de wallet.
- Para Bibliotecas Externas, forneça uma lista de bibliotecas, separadas por vírgula (,), que você deseja permitir que sejam chamadas do seu Autonomous AI Database on Dedicated Infrastructure. Essas bibliotecas compartilhadas conterão os procedimentos externos escritos em C/C++, que são compilados e construídos idealmente na própria VM (para combinar com a arquitetura e o ambiente).
Observação:
Como você ainda está no processo de criação da VM EXTPROC, anote os nomes das bibliotecas compartilhadas que você fornece aqui. Quando a VM estiver disponível e você desenvolver seus procedimentos externos em C/C++, lembre-se de compilar e criar a biblioteca/bibliotecas com o(s) nome(s) exato(s) fornecido(s) acima. - Para Senha da Wallet, forneça uma senha para o arquivo da wallet que será criado na VM ExtProc. A wallet e um certificado autoassinado são gerados para autenticação TLS mútua entre o Autonomous AI Database on Dedicated Infrastructure e a VM do Agente EXTPROC.
- Para Bibliotecas Externas, forneça uma lista de bibliotecas, separadas por vírgula (,), que você deseja permitir que sejam chamadas do seu Autonomous AI Database on Dedicated Infrastructure. Essas bibliotecas compartilhadas conterão os procedimentos externos escritos em C/C++, que são compilados e construídos idealmente na própria VM (para combinar com a arquitetura e o ambiente).
- A segunda parte da página de variáveis de configuração envolve a configuração de rede para a VM EXTPROC.
- Para Compartimento, escolha no menu pull-down o nome do compartimento da VCN. No exemplo acima, ele é mostrado como adbd. Idealmente, o Autonomous AI Database e a VM EXTPROC serão co-localizados na mesma VCN, mesmo que em sub-redes diferentes (privadas e públicas).
- Para Estratégia de Rede, escolha "Usar VCN e Sub-rede Existentes". Conforme mencionado em uma seção anterior, nesse estágio do seu esforço de desenvolvimento do ExtProc, você pode ter a arquitetura do sistema em vigor com uma VCN, AVMC e Autonomous AI Database.
Observação:
A outra opção é criar uma nova VCN e Sub-rede com sua própria estratégia de configuração para o Agente de VM EXTPROC. Conforme declarado na Configuração do Sistema para Procedimentos e Scripts Externos, se você optar por colocar a VM EXTPROC em uma VCN diferente da do Autonomous AI Database, deverá parear as VCNs. - Ignore a próxima entrada para Tipo de Acesso do Agente EXTPROC. Este campo não se aplica ao Autonomous AI Database on Dedicated Exadata Infrastructure.
- Em seguida, no campo rotulado "Endereços IP de Ponto Final Privado", insira TODOS os endereços IP do Cliente do AVMC no qual o banco de dados está configurado. Você pode obter esses endereços IP do Cliente no Painel de Controle da Console do OCI para o AVMC.
- Para Rede Virtual na Nuvem, forneça o nome da VCN na qual você deseja criar o Agente de VMs EXTPROC. Revise Configuração do Sistema para Scripts e Procedimentos Externos para fazer a escolha apropriada para a VCN.
- Para Sub-rede EXTPROC, forneça o nome da sub-rede na qual você deseja criar o Agente de VM EXTPROC. Revise Configuração do sistema para scripts e procedimentos externos para fazer a escolha apropriada para a sub-rede.
- Em seguida, forneça os detalhes da VCN e da Sub-rede.
Observação:
A VM EXTPROC NÃO deve estar em uma sub-rede cujo intervalo de CIDRs seja 10.x.x.x. Se o endereço IP da VM EXPROC for 10.x.x.x, ele não poderá se comunicar com o Autonomous AI Database. - A parte final da página de configuração envolve a configuração de computação do Agente de VM EXTPROC.
- Para Compartimento, escolha o nome do compartimento no menu pull-down. É recomendável colocar a VM no mesmo compartimento do Autonomous AI Database on Dedicated Infrastructure, da VCN e da sub-rede para minimizar a solução de problemas.
- Para Forma, Número de OCPUs e Tamanho da memória (GBs), informe valores com base nas características da carga de trabalho de seus procedimentos externos.
- Para Adicionar chaves SSH, gere OS arquivos de chave pública e privada SSH no sistema Linux OS, MacOS ou Windows. Abra uma janela de terminal e execute um dos seguintes comandos (ED25519 é o algoritmo moderno e mais seguro; sistemas mais antigos suportam o algoritmo de criptografia RSA):
ssh-keygen -t ed25519 -C "your_email@example.com" (OR) ssh-keygen -t rsa -b 4096 -C "your_email@example.com"Isso gerará um arquivo de chave privada ssh-key-<date-time-id>.key e um arquivo de chave pública ssh-key-<date-time-id>.key.pub. Copie e cole o conteúdo da chave pública SSH na janela ou arraste e solte o arquivo .pub na janela.
- Clique em Próximo.
-
Isso o levará à página de revisão. Verifique todas as entradas, marque a caixa de seleção Executar Aplicação e clique em Criar.
Isso iniciará o OCI Resource Manager para criar a Pilha de VMs EXTPROC. Depois que o Job ORM for concluído com sucesso, a VM EXTPROC será criada e executada.
- Reunir informações do sistema de VM EXTPROC para entrada da API DBMS_CLOUD_FUNCTION
Forneça informações do sistema de VMs EXTPROC como entradas para as APIs DBMS_CLOUD_FUNCTION no Autonomous AI Database para permitir a chamada de procedimentos externos do banco de dados.
- No menu de navegação esquerdo do Oracle Cloud Infrastructure, drop-down para Compute, escolha o compartimento especificado para o provisionamento de VMs EXTPROC e revise o painel de controle que lista todas as VMs no compartimento. O Job ORM terá criado a VM EXTPROC com um nome canônico EXTPROC-agent ou EXTPROC-agent-<setofnumbers>. Este será o nome do host da sua instância de VM EXTPROC. Clicar nessa entrada o levará à página que mostra os detalhes do sistema - os Endereços Públicos e Privados IPV4 (IPv4 e IPv6), a sub-rede e os detalhes da imagem.
- Faça log-in na VM ExtProc usando a chave SSH que você forneceu durante a criação da Pilha ExtProc e o endereço IP. O usuário padrão na VM é opc. sudo para se tornar usuário oracle.
➜ ~ ssh -i ssh-key-<date-time-id>.key opc@<Public-IP-Address> Wed Nov 19 10:46:25 GMT 2025: EXTPROC Agent intialization completed. Activate the web console with: systemctl enable --now cockpit.socket Last login: Thu Nov 20 20:10:54 2025 from <client-IP-address> [opc@extproc-agent-170798 ~]$ whoami opc [opc@extproc-agent-170798 ~]$ sudo su - oracle Last login: Wed Nov 19 19:07:24 GMT 2025 on pts/0A VM EXTPROC terá um contêiner Podman em execução com um listener do Oracle SQL*Net. No contêiner, um ambiente cliente Oracle com os arquivos de configuração necessários, como sqlnet.ora, listener.ora, estará disponível, juntamente com um arquivo de wallet para comunicação segura com o Autonomous AI Database.
- Colete as informações do sistema necessárias para as APIs PL/SQL - no nível do sistema operacional e, em seguida, no contêiner do Podman configurado na VM. O contêiner executa o Oracle Listener para receber solicitações de execução remota do aplicativo SQL e PL/SQL no Autonomous AI Database e é o mecanismo de execução de runtime para o procedimento externo.
- No sistema operacional Linux, o FQDN (nome de domínio totalmente qualificado) do host de VM EXTPROC.
- No contêiner Podman, no status do listener, a Porta na VM EXTPROC na qual o banco de dados se conecta à VM.
- No contêiner do Podman, na especificação sqlnet.ora, a localização do arquivo da wallet.
- Em uma inspeção do arquivo da wallet usando a ferramenta orapki, o valor do parâmetro DN (Distinguished Name) do certificado da wallet.
[oracle@extproc-agent-170798 ~]$ hostname -f extproc-agent-170798.subnet-name.vcn-name.oraclevcn.com [oracle@extproc-agent-170798 ~]$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 86d81c4df6ff ghcr.io/oracle/adb-extproc:latest 23 hours ago Up 23 hours (healthy) adb-extproc [oracle@extproc-agent-170798 ~]$ podman exec -it 86d81c4df6ff bash (base) [oracle@extproc-agent-170798 admin]$ lsnrctl status LSNRCTL for Linux: Version 23.26.0.0.0 - for Oracle Cloud and Engineered Systems on 20-NOV-2025 09:25:54 Copyright (c) 1991, 2025, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 23.26.0.0.0 - for Oracle Cloud and Engineered Systems Start Date 19-NOV-2025 17:19:58 Uptime 0 days 16 hr. 5 min. 55 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/23.0.0.0/client_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/extproc-agent-170798/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=0.0.0.0)(PORT=16000))) Services Summary... Service "extproccontainer.com" has 1 instance(s). Instance "extproccontainer", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully (base) [oracle@extproc-agent-170798 /]$ cd $ORACLE_HOME/network/admin (base) [oracle@extproc-agent-170798 admin]$ cat sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) WALLET_LOCATION =(SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallets/extproc_wallet))) tcp.invited_nodes=(20.63.19.141,20.63.19.141,20.63.19.143,20.63.19.144) tcp.validnode_checking=yes (base) [oracle@extproc-agent-170798 admin]$ orapki wallet display -wallet /u01/app/oracle/wallets/extproc_wallet/cwallet.sso Oracle PKI Tool Release 23.0.0.0.0 - Production Version 23.0.0.0.0 Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved. Requested Certificates: User Certificates: Subject: CN=extproc-agent-170798 Trusted Certificates: Subject: CN=extproc-agent-170798 (base) [oracle@extproc-agent-170798 admin]$ exit exitNo exemplo acima, coletamos as entradas a seguir para a API DBMS_CLOUD_FUNCTION.CREATE_CATALOG.- A string formada por FQDN + Número da Porta será a entrada para o parâmetro
library_listener_url. Neste exemplo, é 'extproc-agent-170798.subnet-name.vcn-name.oraclevcn.com:16000'. - sqlnet.ora contém o local do arquivo da wallet na VM: /u01/app/oracle/wallets/extproc_wallet/cwallet.sso. Observe a lista de endereços IP para
tcp.invited_nodes. Ele deve conter a lista de endereços IP do Cliente que você forneceu como entrada para a configuração de rede ao criar a Pilha de VMs EXTPROC. - O DN (Certificate Distinguished Name) será a entrada do parâmetro
library_ssl_server_cert_dn: 'CN=extproc-agent-170798'.
- Criar a Biblioteca C e colocá-la no local especificado no Sistema de Arquivos EXTPROC VM
Codifique as Funções C, crie-as e coloque a biblioteca no diretório designado no sistema de arquivos da VM do Agente ExtProc.
O nome da biblioteca deve corresponder exatamente ao(s) nome(s) que você forneceu durante a criação da Pilha ExtProc. Caso você o tenha colocado incorretamente, poderá encontrá-lo na entrada EXTPROC_DLLS do arquivo initextproccontainer.ora do contêiner ExtProc, conforme mostrado abaixo, ou na seção "Variáveis" do Job do ORM (Oracle Resource Manager) que criou a Pilha ExtProc. Você deve copiar as bibliotecas para o diretório/u01/app/oracle/extproc_libsna VM do agente EXTPROC.- O nome completo do caminho do arquivo (neste exemplo "/u01/app/oracle/extproc_libs/helloCextproc.so") será a entrada para o parâmetro library_remote_path de DBMS_CLOUD_FUNCTION.CREATE_CATALOG().
(base) [oracle@extproc-agent-170798 client_1]$ cat $ORACLE_HOME/hs/admin/initextproccontainer.ora SET TRACE_LEVEL=ON SET _EXTPROC_REMOTE=TRUE SET WHOAMI=FROMDOCKER SET LD_LIBRARY_PATH=/u01/app/oracle/product/23.0.0.0/client_1/lib:/u01/app/oracle/extproc_libs:/opt/conda/lib SET EXTPROC_DLLS=ONLY:/u01/app/oracle/product/extprocutils.so:/u01/app/oracle/product/23.0.0.0/client_1/lib/libgsfextproc.so:/u01/app/oracle/extproc_libs/helloCextproc.so SET PYTHONHOME=/opt/conda SET SCRIPTS_FOLDER_LOC_ENV=/u01/app/oracle/extproc_scripts SET TRACE_FILE_LOC_ENV=/u01/app/oracle/extproc_logs SET PYTHONPATH=/tmp:/u01/app/oracle/extproc_scripts (base) [oracle@extproc-agent-170798 client_1]$ exit [oracle@extproc-agent-170798 ~]$ cat > helloCextproc.c #include <stdio.h> const char* helloCextproc() { return ("\nHello C Extproc from FQDN: extproc-agent-170798.subnet-name.vcn-name.oraclevcn.com\n"); } ^D [oracle@extproc-agent-170798 ~]$ gcc -shared -fPIC -o /u01/app/oracle/extproc_libs/helloCextproc.so helloCextproc.c [oracle@extproc-agent-170798 ~]$ ls -al /u01/app/oracle/extproc_libs/ total 8 drwxr-xr-x. 2 oracle oinstall 30 Nov 19 11:14 . drwxr-xr-x. 6 root root 91 Nov 14 02:19 .. -rwxr-xr-x. 1 oracle oinstall 8184 Nov 19 11:14 helloCextproc.so [oracle@extproc-agent-170798 ~]$Isso concluirá todas as entradas de parâmetro necessárias para criar o objeto Catálogo/Biblioteca no aplicativo de banco de dados.
- Faça upload do arquivo da wallet da VM ExtProc para o OCI Object Storage
Uma wallet autoassinada é criada como parte da criação do aplicativo do agente EXTPROC. Essa wallet permite que você acesse a instância do agente
Extproc.Para executar procedimentos remotos na instância do agente EXTPROC, o Autonomous AI Database e o agente EXTPROC se conectam usando o mTLS (Mutual Transport Layer Security). Ao usar o mTLS (Mutual Transport Layer Security), os clientes se conectam por meio de uma conexão do banco de Dados TCPS (Secure TCP) usando o TLS 1.2 padrão com um certificado da autoridade de certificado (CA) do cliente confiável.Observação:
Você também pode obter e usar um certificado público emitido por uma Autoridade de Certificação (CA).Como pré-requisito, você deve exportar a wallet do diretório
/u01/app/oracle/extproc_walletna VM em que o EXTPROC é executado para o OCI Object Storage.Observação:
- Proteja o arquivo da wallet. O arquivo da wallet, juntamente com o ID do usuário e a senha do Banco de Dados, fornecem acesso à instância do agente EXTPROC. Armazene os arquivos da wallet em um local seguro e compartilhe-os somente com usuários autorizados.
- Não renomeie o arquivo da wallet. O arquivo da wallet no serviço Object Storage deve ser nomeado
cwallet.sso.
- Criar o catálogo, definir Funções SQL e Chamar Procedimentos Externos como Funções SQL
Nas etapas anteriores, temos todas as entradas necessárias para que as APIs DBMS_CLOUD_FUNCTION executem procedimentos remotos de aplicativos de banco de dados SQL ou PL/SQL.
Em seguida, importe a wallet,
cwallet.sso, que contém os certificados da instância do agente EXTPROC do serviço Object Storage para um DIRECTORY no seu Autonomous AI Database.Crie uma credencial para acessar o Object Storage no qual você armazenou o arquivo de wallet cwallet.sso. Consulte Procedimento CREATE_CREDENTIAL para obter informações sobre os parâmetros de nome de usuário e senha para diferentes serviços de armazenamento de objetos.
Crie um objeto DIRECTORY no banco de dados e faça download da wallet no diretório usando a API DBMS_CLOUD.GET_OBJECT.
SQL> SET DEFINE OFF SQL> BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'OCI_CREDENTIAL', user_ocid => '<oci_user_ocid>', tenancy_ocid => '<oci_tenancy_ocid>', private_key => '<API-key-dot-pem-file-contents>', fingerprint => '<fingerprint-created-with-API-key>'); END; / SQL> CREATE DIRECTORY extprocwalletdir AS 'extprocwalletdir'; Directory created. SQL> SELECT directory_name, directory_path FROM dba_directories WHERE directory_name LIKE '%EXTPROC%'; DIRECTORY_NAME DIRECTORY_PATH ---------------- ------------------------------------------------------------------------- EXTPROCWALLETDIR /u02/data/dbfs/<adbd-name>/42E945D608E16DF9E0630301000AF88D/extprocwalletdir SQL> BEGIN DBMS_CLOUD.GET_OBJECT ( credential_name => 'OCI_CREDENTIAL', object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/p/aN.../n/zr.../b/bucket-name-20260129/o/cwallet.sso', directory_name => 'EXTPROCWALLETDIR' ); END; /Em seguida, crie o Objeto da Biblioteca no banco de dados que representa a Biblioteca C no ExtProc, com os parâmetros de entrada que você reuniu na etapa anterior.
SQL> BEGIN DBMS_CLOUD_FUNCTION.CREATE_CATALOG ( library_name => 'EXTPROC_LIBRARY', library_listener_url => 'extproc-agent-170798.subnet-name.vcn-name.oraclevcn.com:16000', library_wallet_dir_name => 'EXTPROCWALLETDIR', library_ssl_server_cert_dn => 'CN=extproc-agent-170798', library_remote_path => '/u01/app/oracle/extproc_libs/helloCextproc.so' ); END; / PL/SQL procedure successfully completed. SQL> SELECT catalog_name from DBA_CLOUD_FUNCTION_CATALOG WHERE catalog_name LIKE '%EXTPROC%'; CATALOG_NAME --------------- EXTPROC_LIBRARYCrie a função SQL mapeada para a função ExtProc C. Veja o nome da função C do programa escrito acima.
SQL> CREATE OR REPLACE FUNCTION HELLOCEXTPROC RETURN VARCHAR2 AS LANGUAGE C LIBRARY EXTPROC_LIBRARY NAME "helloCextproc"; / Function created. SQL>Chamar a Função SQL. É uma execução bem sucedida (veja o corpo da Função C da rotina C acima).
SQL> SELECT HELLOCEXTPROC() FROM dual; HELLOCEXTPROC() ---------------------------------------------------------------------------------- Hello C Extproc from FQDN: extproc-agent-170798.subnet-name.vcn-name.oraclevcn.com
For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
Acesso ao Suporte Técnico da Oracle
O acesso do cliente Oracle aos serviços de suporte Oracle e sua respectiva utilização ocorrerão de acordo com os termos e condições especificados no pedido de compra Oracle por ele firmado para os serviços Oracle aplicáveis.