sql >> Databáze >  >> RDS >> Oracle

Jak rozšířit Liquibase o generování protokolů změn s uloženými procedurami, funkcemi a spouštěči?

Máte pravdu, že obecnou strategií je vytvořit novou třídu, která implementuje SnapshotGenerator, ale musíte udělat také několik dalších kroků. Obecný proces pořízení snímku je:

  1. Liquibase vyhledává implementace SnapshotGenerator a volá addTo() pro každý objekt, který najde v databázi. Pro vaše typy pravděpodobně budete chtít rychlou „jestliže předán objekt instanceof Schema“, protože jsou to typy, které jsou součástí schématu.
  2. Budete muset vytvořit nové objekty Package, StoredProcedure atd., které implementují DatabaseObject. Budou jako třída ehte liquibase.structure.core.Table a zachycují stav objektu. Jsou vytvořeny ve vaší metodě SnapshotGenerator.addsTo() do té míry, že je lze identifikovat (sada názvu, schématu atd.)
  3. Všechny objekty, které jsou přidány metodou addTo() jsou poté spuštěny vaší metodou SnapshotGenerator.snapshotObject(), která stáhne všechna další metadata, která jste původně nezískali, jako je text uložené procedury atd.
  4. Jakmile má liquibase snímek obsahující vaše objekty, porovná snímek s jiným (v případě generationChangeLog prázdný snímek), aby určil, které objekty na druhém snímku chybí, neočekávané a změněné. Poté hledá implementace MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator a ChangedObjectChangeGenerator. Pro createChangeLog budou pouze "chybějící" objekty, takže byste implementovali MissingTriggerChangeGenerator, MissingPackagedChangeGenerator atd. Jejich úkolem je vytvořit instance změn a vytvořit chybějící objekty
  5. Třídy Msising*ChangeGenerator mohou vracet instance RawSqlChange nebo můžete vytvořit nové implementace změny, jako je CreateTriggerChange.



  1. PHP ORA-01745:neplatný název proměnné hostitele/vazby Varování

  2. Oprava „Aritmetická chyba přetečení při převodu výrazu na datový typ int“ v SQL Server

  3. JDBC:cizí klíč na PK vytvořený ve stejné transakci

  4. Odeslání formuláře pomocí <typ vstupu =tlačítko>