Prezados,
hoje vamos falar sobre como ativar e consultar o log de atividades no APEX.
Como tudo no APEX, é muito fácil!
Você pode ativar o log de atividades do usuário no nível da sua instância do APEX ou da sua aplicação.
Para ativar o log no nível da instância, acesse com seu login e senha de administrador de instância o ambiente de administração usando a URL: https://seudomíniodoapex/ords/apex_admin ou digitando INTERNAL como o workspace na tela de login do ambiente de desenvolvimento do APEX.
Após isso, acesse: Gerenciar Instância > Configuração de Recursos e na seção Monitoramento, defina a propriedade "Log de Atividades do Aplicativo" com o valor desejado.
Por padrão, o APEX deixa que cada aplicativo defina se vai gerar o log de atividades, mas caso queira que todas as aplicações gerem log (o desenvolvedor não consegue desativar a nível de aplicação), você pode definir a propriedade como "
Sempre".
Outras opções são definir como "Nunca" gerar log ou para que ao criar uma aplicação, inicialmente a aplicação não gere log a não ser que o desenvolvedor ative o log ("Inicialmente Desativado para Novos Aplicativos").
Portanto, ao definir a propriedade como "Sempre" ou deixar como padrão ("Usar Definições do Aplicativo"), a sua aplicação poderá gerar log de atividades.
Caso no nível de instância seja definido como "Padrão", o desenvolvedor pode ativar a geração de log de atividades no nível da aplicação.
Obs: O APEX antes chamava de "aplicação", mas as novas versões estão chamando de "aplicativo".
Para definir no nível da aplicação, o desenvolvedor deve logar no espaço de trabalho, acessar a aplicação no AppBuilder, nos Componentes Compartilhados, acessar "Atributos de Definição do Aplicativo" na seção Propriedades, você pode ativar a opção "Log" (conforme imagem abaixo).
Isso faz com que os logs de atividades sejam gerados pelo APEX.
E como posso acessar essa informação?
O log é salvo internamente e fica acessível por meio da view APEX_WORKSPACE_ACTIVITY_LOG quando consultada no esquema APEX correspondente.
Vamos fazer uma consulta no SQL Workshop de exemplo.
select * from apex_workspace_activity_log
O log do APEX registra as
visualizações e
submissões de página, além de chamadas
ajax (normalmente ações dinâmicas) e contém diversas informações interessantes, tais como: workspace, usuário logado, id e nome da aplicação, id e nome da página, data de visualização, tempo de execução, IP, Agent (Browser), Sessão APEX, mensagens de erro etc.
Caso tenha dúvidas do que alguma coluna significa, você pode consultar o comentário de cada coluna usando o dicionário do APEX usando a seguinte consulta:
select * from apex_dictionary
where apex_view_name = 'APEX_WORKSPACE_ACTIVITY_LOG'
E quais são os pontos negativos desse log de atividades?
Na minha opinião os principais pontos negativos são:
1) O log é armazenado por padrão apenas por duas semanas.
2) Não armazena informações do estado da sessão. Por exemplo, a gente sabe que um usuário acessou uma página de uma aplicação em determinado dia/hora, mas não sabemos que informações estavam nos itens da página.
3) Aplicações com muitos acessos vão gerar logs gigantescos que ocupam muito espaço.
Como minimizar estes pontos negativos?
1) Criar alguma job para armazenar em tabela o log.
2) Criar algum mecanismo para salvar o valor dos itens das páginas críticas em relação a segurança em alguma tabela (Muito cuidado ao fazer isso, pois poderá estar expondo dados sigilosos)
3) Desligar o log em aplicações com muitos acessos caso não seja necessário. (Não recomendo muito)
Antes de finalizar, vale lembrar que esse log NÃO salva informações de alterações em tabelas. O melhor mecanismo para isso no Oracle provavelmente será o FDA (Flashback Data Archive).
Se seu interesse é em log de alterações de tabelas, segue um vídeo interessante sobre FDA:
Vídeo do Connor McDonald (inglês): https://youtu.be/FpRAc-FEWbE
Espero que tenha gostado.
Até a próxima!