Mam bazę oracle 10g. Potrzebuję dynamicznie nasłuchiwać zmiany na tabelach i kolumnach. To znaczy jeśli zdefiniuję sobie że będę słuchał tabeli A i jej kolumny A.id, A.name, to po każdej operacji w tej tabeli zmieniającej wartości w danych kolumnach to będę odkładał wpisy o nowych wartościach do mojej kolejki/tabeli.
Wiem, że mogę to zrobić na wyzwalaczach, ale czy jest jakiś generyczny sposób bo tych tabel które chciałbym nasłuchiwać mogę mieć ok 100? Zapoznaje się w oraclu z Database Change Notification, ale nie używałem tego i nie wiem czy to spełni moje wymaganie.
Do tego właśnie służą triggery.
Jaki problem chcesz rozwiązać przez wyłapywanie zmian?
Techniczny klient chce mieć konfigurowalną kolejkę gdzie będzie otrzymywał tylko to co sobie skonfigurował. Interesują go operacje typu update na tabeli, ale tylko wtedy gdy wyznaczone przez niego pola się zmieniają, a nie za każdym updatem. Tabel jest dosyć dużo i będzie on chciał sobie zmieniać konfigurację. Dopisywanie/Zmienianie wyzwalaczy za każdym razem jak on coś pozmienia mnie zniechęca.
Jest coś takiego jak Oracle Streams. Co prawda Oracle 18c to ostatni realease, w któym streamsy jako ficzer są dostępne, ale skoro używasz Oracle 10g, które jest przestarzałe, to nie powinno robić Ci to różnicy.
Steramsy potrafią wyłapać zmiany z redo logów i wpychać do kolejki. Za duży temat na forum. Slideware -> http://nocoug.org/download/2007-08/NoCOUG_Aug_16_2007_Presentation_Oracle_Streams.pdf
Pod spodem streamsy korzystają z Oracle Advanced Queuing, więc możesz sobie skonfigurować streamsowy proces capture i powiedzieć ziomkowi "tu masz kolejke AQ i bierz z niej eventy".
O sprawach licencyjnych nie piszę, bo to ciężki temat. Zazwyczaj klient ma podpisane lepsze umowy z Oraclem niż dostawca i koszty licencji na różne funkcjonalności mogą się znacznie różnić.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.