Porównywanie danych – cz. I (struktura i metadane)

Czasami zachodzi potrzeba porównania danych pochodzących z dwóch różnych źródeł. Jako przykładowe scenariusze potrzeby porównania danych można wskazać:

  • integracja danych pochodzących z różnych źródeł: porównanie danych pochodzących z pierwotnego systemu do danych w systemie wtórnym
  • migracja systemu do nowszej wersji – porównanie danych w starym i nowym systemie
  • porównanie danych w obszarze przejściowym (tzw. stage) z danymi w systemie źródłowym
  • porównanie danych źródłowych z danymi po transformacjach
  • porównanie danych znajdujących się w różnych środowiskach (np. deweloperskie i produkcyjne albo testowe i produkcyjne)

Porównanie danych może dotyczyć dwóch kluczowych zagadnień:

  • porównywanie struktury i metadanych (tabele, kolumny, klucze, indeksy, opisy, itd.)
  • porównywanie zawartości tabel

Firma Microsoft dostarcza narzędzi, które w bardzo przyjazny sposób pozwala na dokonanie obu tych porównań na swoich bazach. Narzędziem tym jest Data Tools for Microsoft Visual Studio i projekt typu Database project. Wpis ten jest zatem kolejnym wpisem z serii Narzędnik.

W celu dokonania porównania porównania struktury należy utworzyć nowy projekt typu Database project a następnie skorzystać z opcji Schema compare. Należy wybrać bazę źródłową i docelową. Skorzystajmy z przygotowanego skryptu tworzącego dwie bazy: Source_DB oraz Destination_DB.

Porównanie nastąpi dokładnie w tym kierunku, jaki zadeklarowaliśmy, tzn. zostanie wygenerowany skrypt różnicowy, którego zadaniem będzie doprowadzenie bazy docelowej do takiego stanu jak baza źródłowa na podstawie przekształceń struktury. Należy zdefiniować połączenia, a następnie skorzystać z przycisku Compare, który wyzwoli wykonanie porównania.

Narzędzie jest przyjazne graficznie i każdy rodzaj rozbieżności prezentowany jest pośrednictwem innej ikony. Na zrzucie widać trzy ikonki:

  • czerwony krzyżyk oznacza, że obiekt bazodanowy nie istnieje w źródle, a tylko w miejscu docelowym i zostanie usunięty za pomocą skryptu różnicowego;
  • zielony plusik oznacza, że obiekt bazodanowy istnieje w źródle, ale nie istnieje w miejscu docelowym i zostanie dodany za pomocą skryptu różnicowego;
  • ołówek oznacza, że definicja obiektu w źródle jest różna od definicji w bazie docelowej.

Uwaga! Należy mieć na uwadze, że skrypt dokonuje wielu operacji i NIGDY nie należy go wykonywać bezmyślnie. W przypadku dużych wolumenów danych może dochodzić do poważnych problemów wydajnościowych, co w przypadku warunków produkcyjnych może być niedopuszczalne. Wygenerowany skrypt różnicowy dla dwóch przykładowych baz wygląda następująco:

Ilość wygenerowanego kodu może być zaskakująca, a wykonywane polecenia mogą wprawić w osłupienie. Przykładowo, przy wykorzystaniu opcji Upgrade script bez jego przeglądania moglibyśmy nie zauważyć tworzenia tabeli tymczasowej tmp_ms_xx_TableToCompare, której nazwa podmieniana jest na TableToCompare tuż po USUNIĘCIU tabeli TableToCompare. Trudno sobie wyobrazić przeprowadzenie takiej operacji w warunkach produkcyjnych dla tabeli, która ma setki milionów rekordów :).

Warto zwrócić uwagę, że istnieje także możliwość poprawy wyboru bazy źródłowej i docelowej za pośrednictwem przycisku, który zamieni lewą stronę na prawą.

One Comment Add yours

  1. Adrian Chodkowski napisał(a):

    Z tymi dropami to można nieźle się wkopać 🙂 Naprawdę trzeba uważać na to co się robi

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *