Só quero destacar alguns pontos:
Usar geradores de código Você não pode ter um único procedimento para rastrear todas as tabelas, você precisará gerar gatilhos semelhantes, mas distintos em cada tabela rastreada. Esse tipo de trabalho é mais adequado para geração automatizada de código. No seu lugar eu usaria uma transformação XSLT para gerar o código do XML, e o XML pode ser gerado automaticamente a partir dos metadados. Isso permite que você mantenha facilmente os gatilhos regenerando-os sempre que fizer uma alteração na lógica/estrutura de auditoria ou uma tabela de destino for adicionada/alterada.
Considere o planejamento de capacidade para a auditoria. Uma tabela de auditoria que rastreie todas as alterações de valor será, de longe, a maior tabela do banco de dados:conterá todos os dados atuais e todo o histórico dos dados atuais. Essa tabela aumentará o tamanho do banco de dados em 2-3 ordens de magnitude (x10, x100). E a tabela de auditoria rapidamente se tornará o gargalo de tudo:
- toda operação DML exigirá bloqueios na tabela de auditoria
- todas as operações administrativas e de manutenção terão que acomodar o tamanho do banco de dados devido à auditoria
Leve em consideração as alterações de esquema . Uma tabela chamada 'Foo' pode ser eliminada e, posteriormente, uma tabela diferente chamada 'Foo' pode ser criada. A trilha de auditoria deve ser capaz de distinguir os dois objetos diferentes. É melhor usar uma abordagem de dimensão de mudança lenta.
Considere a necessidade de excluir com eficiência registros de auditoria. Quando o período de retenção determinado pelas políticas de assunto do seu aplicativo estiver vencido, você precisará excluir os registros de auditoria devidos. Pode não parecer grande coisa agora, mas 5 anos depois, quando os primeiros registros são devidos, a tabela de auditoria cresceu para 9,5 TB, pode ser um problema.
Considere a necessidade de consultar a auditoria . A estrutura da tabela de auditoria deve ser preparada para responder com eficiência às consultas de auditoria. Se sua auditoria não puder ser consultada, ela não terá valor. As consultas serão totalmente orientadas por seus requisitos e somente você os conhece, mas a maioria dos registros de auditoria são consultados por intervalos de tempo ('que mudanças ocorreram entre 19h e 20h de ontem?'), por objeto ('quais mudanças ocorreram neste registro neste table?') ou por autor ('que mudanças Bob fez no banco de dados?').