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

Como estender o Liquibase para gerar logs de alterações com procedimentos armazenados, funções e gatilhos?


Você está certo de que a estratégia geral é criar uma nova classe que implemente SnapshotGenerator, mas há algumas outras etapas que você precisa fazer também. O processo geral de instantâneo é:
  1. O Liquibase procura implementações do SnapshotGenerator e chama o addTo() para cada objeto que encontra no banco de dados. Para seus tipos, você provavelmente deseja uma rápida "instância de objeto se passada de Schema" porque eles são tipos que fazem parte de um esquema.
  2. Você precisará criar novos objetos Package, StoredProcedure, etc. que implementem DatabaseObject. Eles serão como a classe liquibase.structure.core.Table e capturarão o estado do objeto. Eles são criados em seu método SnapshotGenerator.addsTo() a ponto de serem identificáveis ​​(nome, esquema, etc)
  3. Todos os objetos que são adicionados pelo método addTo() são então executados através do seu método SnapshotGenerator.snapshotObject(), que irá extrair quaisquer metadados adicionais que você não obteve originalmente, como texto de procedimento armazenado, etc.
  4. >
  5. Uma vez que o liquibase tem um instantâneo contendo seus objetos, ele compara o instantâneo com outro (no caso generateChangeLog, um instantâneo vazio) para determinar quais objetos estão ausentes, inesperados e alterados no segundo instantâneo. Em seguida, ele procura implementações de MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator e ChangedObjectChangeGenerator. Para generateChangeLog, haverá apenas objetos "ausentes", então você implementaria MissingTriggerChangeGenerator, MissingPackagedChangeGenerator etc. O trabalho deles é criar instâncias de Change para criar os objetos ausentes
  6. As classes Msising*ChangeGenerator podem retornar instâncias RawSqlChange ou você pode criar novas implementações de Change, como CreateTriggerChange.