Cześć,
Mam do wykonania jedno zadanie i nie wiem jak się za to zabrać.
Mam bazę danych Microsoftu do niej muszę podpiąć bazę danych oracle - z tym sobię raczej poradzę. W bazie oracle będę miał wystawiony widok. Tabela 3 kolumny(do ~10000 rekordów).
Przekopiuję sobię tabelę z widoku do swojej, ale ten widok może być edytowany. Zmieni się np. wartość w jakieś komórce, dojdzie jakiś wiersz albo coś zostanie usunięte.
I tu jest moje pytanie w jaki sposób wykryć zmiany w tym widoku?
LEFT JOIN po trzech (wszystkich) kolumnach z NULLem.
Masz jeszcze takie operatory jak: MINUS/EXCEPT, INTERSECT, UNION.
Możesz zrobić różnice symetryczną i ją jakoś przetworzyć.
A MINUS (A INTERSECT B)
UNION ALL
B MINUS (A INTERSECT B)
Jeśli chcesz wykrywać zmiany i wprowadzać je do siebie to możesz dane:
a) ciągnać
b) pchać.
:)
Wyciąganie co się zmieniło w całym zbiorze jest kosztowne, chyba że robisz to relatywnie rzadko (np. raz na dzień/tydzień/miesiąc). Lepiej wypychać informacje z bazy źródłowej, o tym co się zmieniło, czyli taki klasyczny mechanizm różnicowego zasilania hurtowni danych czy czegoś w tym rodzaju.
Jeśli masz możliwość utworzenia triggera w bazie źródłowej to skorzystaj z tego. Stwórz tabelę interfejsową w bazie źródłowej, do której trigger będzie zapisywać zmiany (z oznaczeniem czy jest to nowy rekord, zmiana czy usunięcie). Potem pobieraj te dane i aktualizuj swoją tabelę.
Możesz też w bazie docelowej utworzyć widok zmaterializowany pobierający dane ze zdalnej tabeli (zakładając, że baza pozwala na takie rozwiązanie). Wtedy odświeżając go regularnie masz zapewnioną aktualizację... ale raczej nie zmienisz w nim danych.