Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разширя Liquibase за генериране на журнали за промени със съхранени процедури, функции и тригери?

Вие сте прав, че общата стратегия е да се създаде нов клас, който имплементира SnapshotGenerator, но има още няколко стъпки, които също трябва да направите. Общият процес на моментна снимка е:

  1. Liquibase търси реализации на SnapshotGenerator и извиква addsTo() за всеки обект, който намира в базата данни. За вашите типове вероятно искате бързо „ако е предаден обект instanceof Schema“, защото те са типове, които са част от схема.
  2. Ще трябва да създадете нови обекти Package, StoredProcedure и т.н., които имплементират DatabaseObject. Те ще бъдат като клас liquibase.structure.core.Table и ще улавят състоянието на обекта. Те се създават във вашия метод SnapshotGenerator.addsTo() до точката, в която могат да бъдат идентифицирани (набор име, схема и т.н.)
  3. Всички обекти, които се добавят от метода addsTo(), след това се изпълняват през вашия метод SnapshotGenerator.snapshotObject(), който ще изтегли всички допълнителни метаданни, които не сте получили първоначално, като например текст на съхранена процедура и т.н.
  4. След като liquibase има моментна снимка, съдържаща вашите обекти, тя сравнява моментната снимка с друга (в случай на generateChangeLog празна моментна снимка), за да определи кои обекти липсват, неочаквани и променени във втората моментна снимка. След това търси реализации на MissingObjectChangeGenerator, UnexpectedObjectChangeGenerator и ChangedObjectChangeGenerator. За generateChangeLog ще има само „липсващи“ обекти, така че ще приложите MissingTriggerChangeGenerator, MissingPackagedChangeGenerator и т.н. Тяхната работа е да създават екземпляри на Change за създаване на липсващите обекти
  5. Класовете Msising*ChangeGenerator могат да върнат екземпляри на RawSqlChange или можете да създадете нови реализации на Change, като CreateTriggerChange.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Свързване чрез цикъл в потребителските данни

  2. PL/SQL съхранена процедура извежда курсора към VBA ADODB.RecordSet?

  3. Entity Framework &Oracle:Не може да се вмъкне VARCHAR2> 1999 знака

  4. ODP.Net - OracleDataReader.Чете много бавно

  5. Как да премахнете повтарящи се редове в Oracle SQL заявка