segunda-feira, 7 de outubro de 2024

Migração de uma Instância de Oracle Apex

O Apex é uma ferramenta low-code muito interessante e conveniente. Infelizmente, é oferecida pela Oracle.

Como tudo é que é produzido pela empresa, ela oferece muitas facilidades para os programadores, mas é deficiente na administração.

Por algum motivo misterioso, ou talvez simplesmente fruto da complexidade desnecessária que a Oracle julga interessante aplicar a tudo, não é possível usar o Data Pump para exportar e importar os schemas do Apex.

O zip de instalação oferece um par de classes para exportar partes do Apex: oracle.apex.APEXExport.class e oracle.apex.APEXExportSplitter.class

Ele oferece várias opções, mas não uma maneira de exportar tudo de uma vez e, o mais curioso, não oferece uma maneira de exportar as configurações da instância. É preciso exportar primeiro os workspaces e então as aplicações:


java -cp .:ojdbc8.jar oracle.apex.APEXExport  \
  -db mydb.mycompany.com:1521/apex.mydb.mycompany.com \
  -user system \
  -password hard2crack \
  -expWorkspace

java -cp .:ojdbc8.jar oracle.apex.APEXExport  \
  -db mydb.mycompany.com:1521/apex.mydb.mycompany.com \
  -user system \
  -password hard2crack \
  -instance
  

Isso vai gerar um arquivo w123.sql para cada workspace e um arquivo f123.sql para cada aplicação.

Enquanto isso, recomendo guardar cópias das páginas de configuração da instância.

Então, no servidor destino, é preciso rodar uns comandos.

Em primeiro lugar, se já existe uma instância do Apex, é preciso remover todos os workspaces antes de carregar os novos:


begin
  -- Verifique os ids das aplicações a serem exportadas
  for w in (select * from  apex_workspaces where workspace_id>1000) loop
    APEX_INSTANCE_ADMIN.REMOVE_WORKSPACE(p_workspace=>w.workspace);  
  end loop;
end;

Depois, pode-se carregar os workspaces e as aplicações:


. ./mynewdb.env

ls -1a  w*sql | xargs -I{} sqlplus / as sysdba @{}
ls -1a  f*sql | xargs -I{} sqlplus / as sysdba @{}

Conforme o tamanho de sua instância, isso pode demorar.

Como nem as menores coisas da Oracle estão livre de bugs, problemas, e poréns, a configuração de autenticações com Web Credentials, não funciona e o campo client-id não foi copiado.


update wwv_credentials
set client_id='my-id'
where client_id is null

Como prêmio final, os nomes das aplicações saíram com erro de codificação e precisaram ser corrigidos manualmente.

Nenhum comentário:

Postar um comentário