Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Auditoria em Oracle


Se você tiver a edição empresarial 10g, deve consultar a Auditoria Refinada da Oracle. É definitivamente melhor do que rolar o seu próprio.

Mas se você tem uma versão menor ou por algum motivo FGA não é do seu gosto, aqui está como fazê-lo. O principal é:criar uma tabela de auditoria separada para cada tabela de aplicativos .

Eu sei que isso não é o que você quer ouvir porque não corresponde à estrutura da tabela descrita acima. Mas armazenar uma linha com valores OLD e NEW para cada coluna afetada por uma atualização é uma péssima ideia:
  1. Não é dimensionado (uma única atualização tocando dez colunas gera dez inserções)
  2. E quando você insere um registro?
  3. É muito chato reunir o estado de um registro a qualquer momento

Portanto, tenha uma tabela de auditoria para cada tabela de aplicação, com uma estrutura idêntica. Isso significa incluir CHANGED_TIMESTAMP e CHANGED_USER na tabela de aplicativos, mas isso não é ruim.

Finalmente, e você sabe onde isso está levando, tenha um gatilho em cada tabela que insira um registro inteiro com apenas os valores :NEW na tabela de auditoria. O gatilho deve ser acionado em INSERT e UPDATE. Isso dá a história completa, é fácil diferenciar duas versões do registro. Para um DELETE, você inserirá um registro de auditoria apenas com a chave primária preenchida e todas as outras colunas vazias.

Sua objeção será que você tem muitas tabelas e colunas demais para implementar todos esses objetos. Mas é bastante simples gerar a tabela e acionar instruções DDL do dicionário de dados (user_tables, user_tab_columns).