Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann Liquibase erweitert werden, um Änderungsprotokolle mit gespeicherten Prozeduren, Funktionen und Triggern zu generieren?

Sie haben Recht, dass die allgemeine Strategie darin besteht, eine neue Klasse zu erstellen, die SnapshotGenerator implementiert, aber es gibt noch ein paar andere Schritte, die Sie ausführen müssen. Der allgemeine Snapshot-Prozess ist:

  1. Liquibase sucht nach SnapshotGenerator-Implementierungen und ruft addTo() für jedes Objekt auf, das es in der Datenbank findet. Für Ihre Typen möchten Sie wahrscheinlich eine schnelle "falls übergebene Objektinstanz des Schemas", da es sich um Typen handelt, die Teil eines Schemas sind.
  2. Sie müssen neue Package-, StoredProcedure- usw. Objekte erstellen, die DatabaseObject implementieren. Sie sind wie die Klasse liquibase.structure.core.Table und erfassen den Zustand des Objekts. Sie werden in Ihrer SnapshotGenerator.addsTo()-Methode erstellt, bis sie identifizierbar sind (Name, Schema usw. festgelegt)
  3. Alle Objekte, die von der Methode „addsTo()“ hinzugefügt werden, werden dann durch Ihre Methode „SnapshotGenerator.snapshotObject()“ geleitet, die alle zusätzlichen Metadaten abruft, die Sie ursprünglich nicht erhalten haben, wie z. B. gespeicherter Prozedurtext usw.
  4. Sobald liquibase einen Schnappschuss hat, der Ihre Objekte enthält, vergleicht es den Schnappschuss mit einem anderen (im Fall von generateChangeLog ein leerer Schnappschuss), um festzustellen, welche Objekte im zweiten Schnappschuss fehlen, unerwartet sind und geändert wurden. Es sucht dann nach Implementierungen von MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator und ChangedObjectChangeGenerator. Für generateChangeLog gibt es nur "fehlende" Objekte, also würden Sie MissingTriggerChangeGenerator, MissingPackagedChangeGenerator usw. implementieren. Ihre Aufgabe ist es, Änderungsinstanzen zu erstellen, um die fehlenden Objekte zu erstellen
  5. Die Msising*ChangeGenerator-Klassen könnten RawSqlChange-Instanzen zurückgeben oder Sie könnten neue Implementierungen von Change wie CreateTriggerChange erstellen.