Replikacja SQL Server do bazy danych Azure

12 Gru

Od czasu wydania edycji SQL Server 2012 i SQL Azure V12 pojawiła się możliwość replikowania baz danych SQL Server do Azure. Mechanizm wykorzystywany do replikacji to dobrze znana wszystkim DBA replikacja tranzakcyjna (transactional replication) w której wykonywany jest obraz bazy danych a następnie kolejne zmiany są wgrywane do docelowej bazy prawie od razu w wyniku czego otrzymujemy wierną, aktualną replikę źródła. Tabele które mają być replikowane muszą zawierać klucz główny – więcej informacji tutaj.

De facto konfiguracja tego procesu nie zmienia się w porównaniu z jego dotychczasowym zastosowaniem między dwoma instancjami SQL Server więc dla kogoś kto już konfigurował wcześniej coś podobnego ten wpis wiele nie wniesie. Całość robi się przez SQL Server Management Studio z wykorzystaniem kreatora replikacji.

Konfiguracja publikacji replikacji przez SSMS

Na początek polecam zainstalować najnowszą wersję SQL Server Management Studio choć funkcjonalność replikacji tranzakcyjnej do baz danych Azure’a powinna działać od wersji 2012. Poniższe kroki wykonam z wykorzystaniem SSMS 2014, zakładam również że dysponujesz już bazą danych w Azure do której będziesz replikować dane z SQL Server.

Poniżej struktura prostej bazy danych, którą będę replikował do chmury. Zauważ że jedna tabela ma klucz główny (kolumna 3 w Tabeli1) natomiast druga nie.

on-premdb-diagram

W SSMS klikam prawym przyciskiem myszy na Replication, wybieram New – Publication…

SQLServer-new-publication

Na pierwszym ekranie kreatora klikam Next >, następnie zaznaczam bazę danych którą chcę migrować (u mnie on-premdb) i ponownie klikam Next >. Jako typ publikacji wybieram Transactional publication i klikam Next >.

SQLServer-publication-type

Teraz mogę wybrać które tabele bazy danych chcę zreplikować do Azure. Powodem dla którego nie mogę wybrać Tabeli2 jest to że nie ma ona skonfigurowanego klucza głównego. Klikam Next >.

SQLServer-articles

Nie chcę dodawać żadnych filtrów, ponieważ mam zamiar zreplikować całą tabelę więc na następnym ekranie klikam Next >. W kolejnym kroku zaznaczam Create a snapshot immediately… i klikam Next >.

SQLServer-snapshot-agent

Kolejny krok to konfiguracja zabezpieczeń. Dla ułatwienia i przyśpieszenia całego procesu ustawię całość tak by działała z wykorzystaniem wbudowanego konta usługi SQL Server Agent. Nie jest to najbezpieczniejsze podejście ale za to najszybsze.

Klikam Security Settings… i zaznaczam opcje Run under the SQL Server Agent… oraz By impersonating the process account. Klikam OK, następnie Next >.

SQLServer-snapshot-security

W kolejnym okienku upewniam się, że Create the publication jest zaznaczone i klikam Next >, następnie nadaję nazwę tworzonej publikacji i klikam Finish. Czekam aż kreator ukończy tworzenie publikacji i wystartuje wymagane usługi, jeśli wszystko jest na zielono to możemy przejść do utworzenia subskrypcji, w przeciwnym wypadku sprawdzamy błędy i je usuwamy. Możesz ewentualnie przejść do utworzenia subskrypcji a ewentualne błędy wyeliminować później – decyzję pozostawiam Tobie.

Najczęściej występujące błędy po konfiguracji publikacji

Na tym etapie (czyli po utworzeniu publikacji) mogą pojawić się dwa błędy. Pierwszy związany jest z brakiem uprawnień do wystartowania usługi SQL Server Agent – w takim wypadku odpalamy services.msc i przestawiamy usługę SQL Server Agent w automatyczny tryb uruchamiania oraz upewniamy się że jest ona aktualnie uruchomiona.

sql-server-agent-service-config

Drugi błąd związany jest z brakiem odpowiednich uprawnień dla konta skonfigurowanego na potrzeby replikacji do folderu w którym będą przechowywane snapshoty bazy danych. Domyślnie lokalizacja tego folderu to C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\repldata\unc. Jeśli skonfigurowałeś publikację tak jak opisałem powyżej czyli z wykorzystaniem wbudowanego konta usługi SQL Server Agent to musisz nadać uprawnienia do zapisu w tym folderze dla konta NT SERVICE\SQLSERVERAGENT lub NT SERVICE\SQLAGENT$nazwa_instancji w zależności od tego czy SQL Server jest zainstalowany pod domyślną nazwą instancji (MSSQLSERVER) lub inną nazwą. Ten błąd jak i wszystkie inne związane z replikacją można sprawdzić klikając prawym przyciskiem na skonfigurowanej publikacji i wybierając Launch Replication Monitor.

SQLServer-launch-replication-monitor

Konfiguracja subskrypcji replikacji przez SSMS

Subskrypcję dla wcześniej skonfigurowanej publikacji skonfigurujemy w modelu push czyli replikacja do bazy danych Azure będzie wypychana z serwera ze źródłową bazą danych. Dla nas oznacza to że subskrypcję konfigurujemy na tym samym serwerze co publikację, dzięki czemu całą konfigurację replikacji będziemy mieli w jednym miejscu.

W SSMS klikam prawym przyciskiem na Replication – New – Subscriptions…

SQLServer-new-subscription

 

Na ekranie powitalnym kreatora klikam Next >, następnie wybieram publikację dla której będę konfigurował subskrypcję, klikam Next > i wybieram metodę push dla subskrypcji. Klikam Next >.

SQLServer-distr-agent-location

Teraz mogę skonfigurować subskrybenta czyli naszą docelową bazę danych Azure. W tym celu klikam przycisk Add Subscriber – Add SQL Server Subscriber…

SQLServer-add-subscriber

Pojawi się standardowe okienko do konfigurowania połączenia do bazy danych SQL. Jako Server name podaję adres serwera SQL w Azure (można go sprawdzić na karcie właściwości bazy danych lub serwera SQL w portalu Azure), ustawiam sposób autoryzacji na SQL Server Authentication i podaję login i hasło (konto administratora podaje się przy tworzeniu serwera SQL w Azure) i klikam Connect.

SQLServer-connect-to-Azuredb

Znów pojawi się okienko konfiguracji subskrybenta, teraz wybieram bazę danych w Azure do której chcę wrzucić replikę i klikam Next >.

Teraz muszę skonfigurować ustawienia bezpieczeństwa dla subskrypcji. Klikam przycisk …. po prawej stronie i znów ustawiam całość w niekoniecznie bezpiecznie ale szybki sposób. Zaznaczam od góry:

  • Run under the SQL Server Agent…
  • By impersonating the process account
  • Using the following SQL Server login:

Zaznaczając trzecią opcję trzeba podać login i hasło właściciela bazy danych w Azure. Na koniec klikam OK.

SQLServer-distribution-agent-security

Po powrocie do okna konfiguracji bezpieczeństwa subskrypcji klikam Next >. W nowo otwartym okienku mam możliwość ustawienia harmonogramu synchronizacji repliki, ewentualnie ustawić synchronizację jednorazowo. Ponieważ chcę aby wszelkie zmiany w źródłowej bazie danych były natychmiast replikowane do Azure’a wybieram opcję Run continuously i klikam Next >. Na następnym ekranie również inicjalizację ustawiam na Immediately i klikam Next >. Zostawiam zaznaczone Create the subscription(s) i klikam Next >, następnie Finish. Teraz czekam aż subskrypcja zostanie utworzona i klikam Close.

SQLServer-subscription-created

W zależności od ilości danych do zreplikowania cały proces może chwilę potrwać, jednak w moim przypadku trwało to około minuty 😉 Tak jak pisałem wcześniej wszelkie komunikaty związane z replikacją mogę sprawdzić w Replication Monitor.

Po zalogowaniu się do bazy danych w Azure widać zreplikowane dane z SQL Server 🙂

SQLServer-SSMS-AzureDb-replica

Dodaj komentarz