Synchronizowanie baz danych SQL Server’a między różnymi zdalnymi lokalizacjami

Scenariusz

Aplikacja używana przez podróżujących przedstawicieli handlowych, lub innych pracowników działających w terenie, np. dostawców, pielęgniarki środowiskowe itp. jest zaprojektowana tak aby zbierać dane z różnych lokalizacji i następnie wysyłać je do centrum danych. Dodatkowo, od czasu do czasu dane z centrum danych muszą zostać wysłane do innych lokalizacji, aby zaktualizować te lokalizacje.

Na przykład kiedy pielęgniarka składa wizytę pacjentowi, to posługując się urządzeniem mobilnym wstawia do bazy danych informacje o wizycie. Na koniec dnia wszystkie utworzone rekordy są wysyłane do centralnej bazy danych. Dodatkowo, pielęgniarka synchronizuje urządzenie mobilne z centralną bazą danych w szpitalu, aby otrzymać nowe informacje o swoich pacjentach oraz o wizytach do złożenia następnego dnia.

W scenariuszu opisanym powyżej, istnieje ciągła konieczność synchronizowania danych między urządzeniem mobilnym a centralną bazą danych.

Rozwiązania

1. Użyj replikacji SQL Server’a. Replikacja pozwala synchronizować bazy danych przez kopiowanie i dystrybuowanie rekordów z jednej bazy do innej, jeśli bazy danych są w różnych lokalizacjach.

Replikacja baz danych posiada jednak pewne ograniczenia:

  • Tylko w edycji Standard i Enterprise, SQL Server może działać jako Wydawca, więc jeśli używasz wersji SQL Server Express musisz kupić wyższą edycję.
  • Nie można użyć SQL Server’a 2005 jako Wydawcy i jednocześnie SQL Server’a 2008 jako Subskrybenta w przypadku replikacji przez web.
  • Wersja Dystrybutora musi być wyższa lub taka sama, jak wersja Wydawcy.
  • Wersja Subskrybenta w replikacji transakcyjnej nie może różnić się o więcej niż 2 wersje od wersji Wydawcy, np. SQL Server 2000, będący wydawcą, nie może działać z Subskrybentami na SQL Server’rze 2012.
  • Wersja Subskrybenta w replikacji scalanej (merge) musi być o jedną niższa lub równa wersji Wydawcy, np. SQL Server 2012, będący Subskrybentem, nie może korzystać z SQL Server’a 2008, jeśli pełni on rolę Wydawcy.

2. Użyj framework’a Sync, API które umożliwi napisanie własnej aplikacji do synchronizowania danych między bazami danych. API daje dużo możliwości, ale wymaga umiejętności programistycznych, testowania aplikacji, co zwiększa zarówno czas niezbędny do otrzymania gotowego rozwiązania jak i podnosi koszt jego wytworzenia.

3. Użyj ApexSQL Data Diff, narzędzia na SQL Server do porównywania i synchronizacji baz danych, wykrywania różnic między danymi oraz do bezbłędnego uzgadniania danych. Narzędzie pozwala porównywać i synchronizować bazy online, kopie zapasowe baz danych (także te skompresowane), generować raporty wynikowe o wykrytych różnicach, tworzyć plik synchronizujący i wykonać ten plik.

Jak to zrobić

Wyobraź sobie, ze masz w szpitalu bazę danych o nazwie Central, a pielęgniarka na swoim urządzeniu mobilnym ma bazę danych o nazwie Visits. Szpital dodaje nowe rekordy, informujące o wizytach do tablicy Visits, pielęgniarki codziennie rano synchronizują swoje urządzenia mobilne, aby otrzymać najnowsze dane o zaplanowanych dla nich wizytach. Rekordy wstawiane przez pielęgniarki w trakcie dnia zapisywane są w tablicy VisitReports.

  1. Uruchom ApexSQL Data Diff
  2. W sekcji Source, wybierz typ źródła Database, jako serwer wybierz serwer zainstalowany w centrum danych, jako bazę, wybierz bazę Central.
  3. W sekcji Destination, wybierz typ źródła Database, urządzenie zdalne jako serwer (urządzenie mobilne pielęgniarki), i bazę, która będzie synchronizowana .

    Datasources type and details selection in ApexSQL Data Diff

  4. Kliknij przycisk Compare

    Wszystkie tablice w bazie danych zostaną porównane i pokazane w głównym oknie narzędzia.

    Main grid after SQL Server database comparison

    Rekordy wstawione do tablicy Visits w szpitalu wyświetlone są w zakładce Missing.

  5. Zaznacz tablicę, którą chcesz zsynchronizować.

    Checking the tables for database synchronization

  6. Kliknij Synchronize w zakładce Home.

    Synchronize button in ApexSQL Data Diff

  7. Kliknij Next w kroku Synchronization direction w Synchronization wizard.
  8. W kroku Output options w Synchronization wizard, wybierz Synchronize a database jako końcową akcję.

    Choosing output action in Synchronization wizard

  9. Kliknij Next
  10. Sprawdź podsumowanie działań, które będą wykonane oraz przeanalizuj wszystkie ostrzeżenia.

    Summary of the actions and warnings preview

  11. Kliknij przycisk Synchronize w zakładce Home.
  12. Kliknij OK, aby potwierdzić wykonanie skryptu.

    SQL Server database change notification dialogue

    Gdy zostanie zakończona synchronizacja docelowej bazy danych, zostanie wyświetlony poniższy komunikat:

    Script execution results message

  13. Kliknij przycisk Save w zakładce Home projektu, aby zapamiętać ustawienia w projekcie i wykonać synchronizację każdego następnego dnia, przy pomocy tych samych ustawień.

Podobne kroki należy wykonać, jeżeli chcesz zsynchronizować rekordy dodane w ciągu dnia przez pielęgniarkę z centralną bazą danych.

  1. Wybierz bazę na urządzeniu mobilnym w sekcji Source a bazę Central jako bazę docelową (sekcja Destination).

    Selecting the SQL Server database Source and Destination

  2. Kliknij Compare
  3. Wybierz tablicę, do której dodano rekordy w ciągu dnia. Rekordy zostaną wyświetlone z zakładce Missing.

    Comparison and synchronization of the Source and Destination databases

  4. Kliknij przycisk Synchronize w menu.
  5. Przejdź przez kreatora Synchronization wizard i dodaj brakujące rekordy do bazy danych Central.
  6. Kliknij Save w zakładce Home projektu, aby zapamiętać ustawienia synchronizacji w projekcie i wykonać kolejną synchronizację przy pomocy tych samych ustawień.

Po zachowaniu projektu można zautomatyzować proces synchronizacji.

    1. Zapamiętaj poniższą komendę jako plik wsadowy E:\Test\Morning.bat, który wykona utworzony projekt Morning_Central_Nurse.axdd:

      "C:\Program files 
      (x86)\ApexSQL\ApexSQLDataDiff2014\ApexSQLDataDiff.com" /
      pf:D: \Test\Morning_Central_Nurse.axdd /
      of:D: \Test\MorningSync.sql / sync / bu:D: \Test / v / f
      

      Komenda utworzy skrypt MorningSync.sql w folderze D:\Test, który doda dane z bazy danych Central do bazy danych pielęgniarki, utworzy pełną kopię zapasową bazy danych pielęgniarki w folderze D:\Test, oraz wstawi brakujące rekordy do bazy danych pielęgniarki.

    2. Uruchom SQL Server Management Studio
    3. W Object Explorer rozwiń SQL Server Agent, kliknij prawym przyciskiem myszy na Jobs i wybierz New job.

    4. Określ nazwę zadania.

    5. Kliknij New w zakładce Steps, aby dodać nowy krok do zadania.
    6. Wybierz ”Operating system (CmdExec)” jako typ zadania, dodaj nazwę kroku, kliknij Open.
    7. Wybierz zapisany plik wsadowy D:\Test\MorningSync.bat.

      SQL Server job steps

    8. Kliknij przycisk OK
    9. Otwórz harmonogram w zakładce Schedules i zdecyduj kiedy należy uruchomić zadanie synchronizacji bazy danych.

      Scheduling a SQL Server job

Powtórz kroki 3 do 9, aby uruchomić zadanie synchronizacji SQL Server’a dla synchronizacji wieczornej.

Porównywanie i synchronizowanie baz danych SQL Server’a między różnymi lokalizacjami przy pomocy ApexSQL Data Diff, może być wykonywane bez względu na wersje SQL Server’a w lokalizacji centralnej i zdalnej, do poziomu poszczególnych rekordów i nie wymaga wiedzy programistycznej.

Tłumacz: Anna Lesniak

November 4, 2015