background image

Katedra Baz Danych

        Dawid Borek

nr albumu s3188/M

Synchronizacja i replikacja danych,

z zastosowanie do studiów 

internetowych PJWSTK.

Praca napisana pod kierunkiem

Prof. dr Lecha Banachowskiego

WARSZAWA 2004

background image

Synchronizacja i replikacja danych,.........................................................................1
z zastosowanie do studiów internetowych PJWSTK...............................................1
1.Wstęp.....................................................................................................................3
1.Opis dziedziny i problemu....................................................................................5
2.Replikacja danych.................................................................................................6
3.Zastosowanie replikacji i synchronizacji..............................................................8
4.Role serwera w środowisku replikacji danych......................................................9

5.1Replikowane dane.........................................................................................10
5.2Filtrowanie danych........................................................................................11

5.Środowiska replikacji..........................................................................................13

6.1Centralny publikator......................................................................................13
6.2Centralny publikator ze zdalnym dystrybutorem..........................................14
6.3Publikujący subskrybent...............................................................................15
6.4Centralny subskrybent...................................................................................16
6.5 Wiele publikatorów lub wiele subskrybentów.............................................17
6.6 Modyfikujący subskrybent...........................................................................17

Typy replikacji.......................................................................................................19
Subskrypcja – metody realizacji............................................................................22
Synchronizacja danych...........................................................................................23
9 Agenci replikacji.................................................................................................24

9.1 Agent odczytu dziennika transakcji (Log Leader Agent)............................25
9.2 Agent migawki (Snapshot Agent)................................................................26
9.3 Agent dystrybucji (Distribution Agent).......................................................27
9.4 Agent scalający (Merge Agent)...................................................................27

Projektowanie replikacji.........................................................................................28
9. EDU@PJWSTK.................................................................................................30
Testowanie replikacji danych.................................................................................36

Przebieg procesu testowania..............................................................................37

Microsoft SQL Server 2000...................................................................................56
Bibliografia............................................................................................................57

background image

1. Wstęp.

Nieustanny   rozwój   ludzkości   generuje   ogromną   ilość   informacji.   Wiek 

XIX   i   XX   były   nazywane   złotymi   wiekami   rozwoju   i   nauki,   zaś   wiek   XXI 
nazywany jest wiekiem informacji.

Każde nowe osiągniecie ludzkości, wynalazek, nowe prawo naukowe traktujemy 
jako nową informację, która jeszcze dokładniej opisuje nasz świat i pozwala lepiej 

go   zrozumieć.   Właśnie   dzięki   natychmiastowej   wiedzy   na   temat   najnowszych 
osiągnięć   ludzkości,   jesteśmy   w   stanie   tak   szybko   i   właściwie   reagować   na 

zmiany, które nie zawsze blisko nas zachodzą. To dzięki Internetowi – ogromnej 
bazie danych  – możemy  natychmiast  korzystać  z wiedzy innych  ludzi.  Nigdy 

jeszcze   w   historii   ludzkości   nie   mieliśmy   tak   wielkich   możliwości.   Jednak 
problem   pojawia   się,   kiedy   informacji   jest   za   dużo   i   nie   jesteśmy   w   stanie 

przyswoić wszystkich danych dotyczących poszukiwanych informacji. Powód jest 
prosty – informacji jest za wiele, są mało konkretne, lub są one zbyt obszerne, 

często zdarza się tak, że dostępne informacje w momencie swojej publikacji są już 
przestarzałe. Dlatego ważne dla funkcjonowania ludzkości dane są cenniejsze niż 

wszelkie bogactwa, to one opisują nasze życie i wytyczają nowe szlaki w naszym 
rozwoju.

Nie   jest   możliwe   wypisanie   wszystkich   kluczowych   informacji   potrzebnych 
ludzkości. Każdy człowiek potrzebuje do swojej pracy, rozwoju, informacji na 

dany, konkretny temat.

Dlatego   coraz   częściej   spotykamy   się   z   handlem   informacją,   sprzedawaniem 

konkretnych danych.

Dzisiejszy   świat   nie   istniałby   bez   informacji,   które   zmieniają   się   cały   czas. 

Przykładem mogą być notowania giełdowe, kursy walut, wiadomości kluczowe 
dla działania instytucji, itp..

Te i wiele innych newralgicznych informacji musimy posiadać a co najważniejsze 
musimy posiadać je jak najbardziej aktualne. W wielu przypadkach nie możemy 

pozwolić sobie na używanie danych, co do których nie jesteśmy pewni, że są 
aktualne i konkretne.

I  tu   właśnie  przychodzą  na  z   pomocą  ogromne  bazy  danych,  które   cały  czas 
ewoluują, setki tysięcy ludzi pracują tylko nad tym,  aby dane te były trafne i 

background image

aktualne, a informacje jakie niosą konkretne. Dane, które są kluczowe musza być 

dostępne w każdym miejscu na ziemi i w każdej chwili.

Dlatego   tak   ważne   jest   ich   poprawne   rozpropagowywanie,   natychmiastowe 

kopiowanie ich do węzłów, z których będą dostępne dla wszystkich, którzy chcą 
je otrzymać. Same dane są nic nie warte, jeśli nie można z nich skorzystać, wiec 

najważniejsze jest udostępnienie ich zainteresowanym ludziom.

Informacje bez konkretnego przeznaczenia nie są wykorzystywane i tracą swoja 

wartość, więc tak ważne jest, aby informacja zawsze była dostępna i aktualna.

Do tego właśnie celu służy replikacja, dzięki tej funkcji dostajemy możliwość 

dowolnego   kopiowania   danych   ze   źródła   posiadającego   aktualne   dane,   dzięki 
czemu możemy na bieżąco wiedzieć, co dzieje się w około nas.

Dzięki zastosowaniu replikacji informacje zostają przesłane do dowolnej ilości 
subskrybentów   (serwerów   podległych),   dzięki   czemu   dostęp   do   nich   staje   się 

szybszy i łatwiejszy.

Funkcjonowanie   wielu   dziedzin   życia   jest   zależne   od   sprawnego   przepływu 

danych.   Dzięki   ciągłości   i   niezawodności   w   przepływie   informacji   mogliśmy 
wyprzedzić setki lat ewolucji, zyskaliśmy ogromna wygodę i bezpieczeństwo. 

Głównym   celem   mojej   pracy   jest   zaprojektowanie   systemu   replikacji   i 

synchronizacji   danych   dla   bazy   danych   EDU@PJWSTK.   System   Studiów 
Internetowych   EDU@PJWSTK   jest   przeznaczony   do   prowadzenia   nauczania 

przez Internet. Wraz z powstaniem nowych placówek naszej uczelni w Polsce jak 
i   w   Europie   istnieje   potrzeba   zaprojektowania   systemu   wymiany   danych 

pomiędzy   różnymi   filiami   szkoły.   Praca   moja   ma   na   celu   analizę   danych 
EDU@PJWSTK oraz przedstawienie konkretnych rozwiązań, które w przyszłości 

mogą zostać zrealizowane. 

W pracy przedstawię najważniejsze zagadnienia związane z dystrybucją 

danych bazy EDU@PJWSTK. Praca będzie miała na celu przedstawienie procesu 
synchronizacji   danych   z   jednego   lub   wielu   źródeł.   Wskaże   jak   ważne   jest 

właściwe zarządzanie danymi, kiedy i jak należy uaktualniać informacje. Będę 
starał   się   przedstawić   przypadki,   w   których   natychmiastowe   aktualizowanie 

danych   jest   niezbędne   dla   poprawnego   działania   systemu,   jak   również   takie 
przypadki, kiedy dane z wielu źródeł będą scalane i aktualizowane w jednym 

background image

centralnym głównym źródle. W pracy pokaże jak ważna może być pojedyncza 

zmiana informacji dla utrzymania  spójności złożonego systemu. Wskaże dane, 
które są newralgiczne i które nie mogą zostać przekłamane jak i takie, których 

zmiana nie ma skutku natychmiastowego w całym systemie.

Replikacja  jest  to  proces  kopiowania  i  utrzymywania  obiektów  (np.  tabel) w 

połączonych bazach danych, tworzących jedno środowisko.

W pracy przedstawię różne typy  środowisk replikacji (replikacja transakcyjna, 

replikacja, migawkowa, replikacja scalająca), przebieg propagacji zmian, obiekty 
wspomagające   replikację,   a   także   metody   wykrywania   i   rozwiązywania 

konfliktów replikacji.

1.Opis dziedziny i problemu.

Głównym   problemem   mojej   pracy   jest   analiza   danych   bazy   danych 

EDU@PJWSTK   i   na   podstawie   przeprowadzonej   analizy   dobór   odpowiedniej 

metody replikacji i synchronizacji danych. 

Baza   danych   EDU@PJWSTK   jest   integralną   częścią   systemu   Studiów 

Internetowych   Polsko-Japońskiej   Wyższej   Szkoły   Technik   Komputerowych   w 
Warszawie. Ten nowatorski system Studiów Internetowych EDU@PJWSTK daje 

studentom możliwość uczenia się w dowolnym momencie, całą dobę, 7 dni w 
tygodniu,   przez   cały   semestr.   Umożliwia   studentom   pozyskiwanie   informacji 

potrzebnych   w   celach   nauki,   oferuje   możliwość   przeprowadzania   testów, 
egzaminów,   kontaktu   z   wykładowcami,   wymiany   informacji   pomiędzy 

studentami   oraz   wiele   innych   .   System   EDU@PJWSTK   przygotowany   jest   z 
myślą   o   ludziach   którzy   nie   mogą   pozwolić   sobie   na   normalny   system 

studiowania.

Sercem systemu EDU@PJWSTK jest baza danych w której zapisane są 

wszystkie informacje odnośnie działania systemu, studentów zarejestrowanych w 
systemie,   wyników   ich   nauki   oraz   materiałów   z   których   powinni   korzystać. 

System   posiada   wiele   funkcji   przydatnych   wykładowcom   do   analizy   pracy 
studentów.   Szersze   informacje   na   temat   danych   w   systemie   EDU@PJWSTK 

przedstawię w 

rozdziale.

background image

Wraz   z   powstaniem   nowych   fili   Polsko-Japońskiej   Wyższej   Szkoły   Technik 

Komputerowych zaistniała potrzeba synchronizacji i replikacji danych z różnych 
źródeł do centrali uczelni w Warszawie. W kolejnych  rozdziałach przedstawię 

dokładnie   zasadę   działania   systemu   replikacji   danych   jak   również   wskaże 
argumenty   przemawiające   za   konkretnymi   rozwiązaniami   replikacji   i 

synchronizacji danych.

Replikacja i synchronizacja danych to procesy których nie da się wdrożyć nie 

wykonując analizy danych dla których będą przeprowadzane. Proces replikowania 
danych jest autonomiczną sprawą każdej bazy danych. To jakie dane i w jakim 

środowisku te dane działają ma podstawowe  znaczenia  na proces konfiguracji 
replikacji.   Synchronizacja   danych   jest   zaś   procesem   wymagającym   bardzo 

dokładnej   analizy   danych,   odpowiednia   analiza   danych   w   tym   przypadku   jest 
kluczową sprawą. 

Nie można założyć że odpowiedni proces replikacji bądź synchronizacji danych 
będzie właściwy nie wykonując testów i pomiarów, jak również nie biorąc pod 

uwagę   zagrożeń   które   mogą   wyniknąć   z   niewłaściwego   doboru   metody 
propagacji danych do innych źródeł.

Moja praca jest pewnym rozpoczęciem problemu replikacji danych, gdyż proces 
replikacji i synchronizacji danych ewoluuje wraz ze zmianą bądź rozszerzeniem 

bazy   danych   o   nowe   funkcje.   Replikacja   zmienia   się   również   jeśli   zachodzi 
potrzeba zmiany środowiska w jakim pracują dane bądź zastosowań danych.

System   EDU@PJWSTK   jest   cały   czas   poszerzany   o   nowe   funkcje, 

moduły. Polsko-Japońska Wyższa Szkoła Technik Komputerowych tworzy nowe 

filie. Program nauczania studentów też zmienia się co jakiś czas. Te zmiany będą 
powodować ciągłą ewolucje systemów replikacji i synchronizacji danych, które w 

przyszłości będą tworzone dla potrzeb naszej uczelni.

Praca moja jest więc tylko wstępem, fundamentem na którym w przyszłości może 

powstać  skomplikowany  system  wymiany   informacji,   który  będzie  obejmował 
kilka europejskich stolic. 

2. Replikacja danych.

background image

W sposób bardziej zrozumiały można przestawić replikację jako lustrzane odbicie 

pewnych  wartości w dowolnym  innym  miejscu.  Replikowane dane zachowują 
podstawowe wartości ACID. Mówiąc o replikacji mamy na myśli  kopiowanie 

pewnego zbioru danych z pewnego miejsca czyli źródła, do miejsca docelowego. 
Źródłem danych może być pojedyncza tabela, baza lub wiele baz danych, to samo 

tyczy się miejsca docelowego, które nazywamy repliką.

Replikację danych najczęściej wykorzystuje się w systemach rozproszonych baz 

danych, gdzie z jednego zdalnego węzła kopiuje się dane do innych zdalnych 
węzłów. Celem replikacji w tych systemach jest, po pierwsze, skrócenie czasu 

dostępu do danych. W tym przypadku uniezależniamy się od przepustowości i 
aktualnego   obciążenia   sieci,   oraz   od   wydajności   zdalnych   węzłów   i   ich 

aktualnego   obciążenia.   Po   drugie,   dzięki   replikacji   uniezależniamy   się   od 
czasowej niedostępności węzłów i awarii sieci.

Wadą   replikacji   jest   konieczność   uaktualniania   repliki   w   przypadku   zmian   w 
tabelach   źródłowych.   Taki   proces   uaktualniania   będę   również   nazywał 

synchronizacją (ang. synchronization) lub odświeżaniem (ang. refreshing) repliki.

Replikacja wymaga utrzymywania połączeń pomiędzy węzłami. Węzeł kontaktuje 

się   z   innymi   węzłami   przy  pomocy   specjalnego   obiektu   schematu,   noszącego 
nazwę łącznika bazy danych.

W większości opracowań podstawowa definicja replikacji przedstawiana jest jako 

model   dystrybucji   danych   „przechowaj   i   wyślij”,   czyli   dane   wprowadzone   w 
jednym miejscu są automatycznie przesyłane dalej.

Rysunek 3.1. Schemat „przechowaj i wyślij”.

Prześlij dane.

Przechowaj dane

B

D

B

D

B

D

B

D

background image

3. Zastosowanie replikacji i synchronizacji.

Replikacja i synchronizacja jest problemem bardzo złożonym i ciężko jest 

zdefiniować   jej   wszystkie   zastosowania.   Jednakże   można   przedstawić 

podstawowe, szablonowe zastosowania tych technik w informatyce. W literaturze 
dotyczącej   replikacji   danych   można   wyróżnić   trzy   podstawowe   zastosowania 

replikacji i synchronizacji danych. Rozwiązania te przedstawiam jako pojedyncze 
problemy,   chociaż   mogą   one   być   zastosowane   wszystkie   naraz   lub   jako 

kombinacja poszczególnych rozwiązań w zależności od środowiska replikacji i 
potrzeb.

Wyróżniamy trzy podstawowe zastosowania replikacji:

1. Dostarczanie danych do różnych miejsc w sieci w celu ograniczenia ruchu, 

obciążenia i niepotrzebnego ładowania danych na pojedynczy (najczęściej 
główny) serwer.

Rysunek 4.1. Przykład zastosowania replikacji 1.

Podstawowa baza danych. 
Wszystkie dane.

Replika z częścią danych.

B
D

B
D

background image

2. Rozsyłanie   danych   do   wielu   serwerów   w   celu   zwiększenia   stopnia 

niezawodności i decentralizacji lub partycjonowania danych.

Rysunek 4.2. Przykład zastosowania replikacji 2.

3. Przesyłanie  wszystkich  danych  do serwera pełniącego role zapasowego 

(backup) w celu zastąpienia serwera podstawowego podczas awarii.

Rysunek 4.3. Przykład zastosowania replikacji 3.

4. Role serwera w środowisku replikacji danych.

SQL Server może pełnić jedną z trzech ról w środowisku replikacji:

Główna baza danych 
EDU@PJWSTK.

Baza danych w 
Polsce.

Baza danych na 
Ukrainie.

B
D

B
D

B
D

Podstawowy serwer.

Zapasowy (backup).

B
D

B
D

background image

Publikator

Publikator   jest   to   serwer   na   którym   przechowywana   jest   publikacja   lub 
publikacje   które   zamierzamy   rozpropagować.   Publikacją   nazywamy   bazę 

danych, która została udostępniona do replikacji.

Dystrybutor

Dystrybutor   jest   to   serwer   na   którym   została   zlokalizowana   baza   danych 

przeznaczona   do   dystrybucji.   Jest   serwerem   dystrybucyjny.   Może   być 
zlokalizowany   na   serwerze   publikacji   lub   na   innym   serwerze   typu   „stand 

alone”. Baza dystrybutora zawiera wszystkie zmienione dane które oczekują 
na   rozpropagowanie.   Dystrybutor   może   obsługiwać   wiele   publikatorów   i 

rozsyłać dane do wielu subskrybentów. Jest głównym serwerem w środowisku 
replikacji.

Subskrybent

Subskrybent   jest   serwerem   przechowywującym   całą   lub   fragment 

publikowanej bazy danych. Serwer dystrybucyjny przesyła wszystkie zmiany 
zachodzące   w   publikowanej   bazie   do   kopii   tej   bazy   utrzymywanej   na 

subskrybencie lub subskrybentach.
W Microsoft SQL Server 2000 subskrybent jest w stanie wprowadzać zmiany 

w danych które otrzymuje po czym odesłać je do publikatora. Subskrybent 
taki jest nazywany również „modyfikującym subskrybentem”, którego jednak 

nie możemy uważać za publikatora.

Te trzy podstawowe role serwera współpracują ze sobą wymieniając dane. Dane 
takie nazywamy publikacjami lub artykułami.

5.1

Replikowane dane.

background image

Używając   mechanizmów   replikacji   i   synchronizacji   MS   SQL   Server   możemy 

publikować   dane   z   tabel,   obiektów   bazy,   wyniki   działania   procedur 
zapamiętanych, obiekty schematu bazy, indeksy, wyzwalacze.

W   pracy   replikowane   dane   będę   nazywał   publikacją,   która   jest   podstawową 

jednostką publikowanych danych.

Publikacja jest to zbiór złożony z jednego lub kilku artykułów.
Artykuł  jest to pojedyncza tabela przeznaczona do replikacji lub przefiltrowany 

zbiór jej wierszy albo kolumn.

Pojedyncza baza danych może zawierać więcej niż jedną publikację. MS 

SQL automatycznie aktualizuje wszystkie artykuły w publikacji w tym samym 
czasie,   dane   te   są   zsynchronizowane,   niezależnie   od   tego   czy   planujemy   je 

replikować   teraz   czy   w   późniejszym   czasie.   Takie   działanie   zapobiega 
replikowaniu   danych   różnych   danych   na   serwery   mające   posiadać   taką   samą 

replikę.   Można   sobie   wyobrazić,   że   dwa   serwery   pobierają   dane   z   tej   samej 
publikacji w różnym czasie. Serwer pierwszy   pobiera publikacje o 2 godziny 

wcześniej niż drugi. Jednak dane które pobrały te serwery są zsynchronizowane 
względem   siebie.   Dzięki   możliwości   zablokowania   aktualizacji   publikacji   do 

czasu   replikacji   do   wszystkich   subskrybentów,   dane   na   wszystkich 
subskrybentach   są   zsynchronizowane.   Istnieje   oczywiście   możliwość 

natychmiastowej   aktualizacji   publikacji   jednak   stosuje   się   ją   w   konkretnych 
przypadkach o których w dalszej części pracy.

5.2

Filtrowanie danych.

Publikacja składa się z artykułów, artykuły zaś z konkretnych danych. Istnieje 
wiele   sposobów   na   stworzenie   artykułów.   Najprostszą   jest   opublikowanie 

wszystkich   wierszy   i   kolumn   danej   tabeli.   Jednak   w   bazie   danych 

background image

EDU@PJWSTK istnieją dane podlegające szczególnej ochronie tj. dane osobowe, 

oceny, numery indeksów, itd. Dlatego podczas replikowania tabel zawierających 
takie dane możemy wykluczyć ich replikowanie do konkretnych subskrybentów 

za   pomocą   zastosowania   filtrów.   Innym   przykładem   zastosowania   filtrów   dla 
bazy   danych   EDU@PJWSTK   jest   publikacja   danych   dotyczących   tylko 

konkretnego regionu np. fili uczelni na Ukrainie.
W   niektórych   opracowaniach   można   spotkać   się   z   terminami   fragmentacji 

poziomej i pionowej, która zamiennie występuje z terminem filtrowania danych.

W   Microsoft   SQL   Server   2000   wyróżniamy   dwa   rodzaje   filtrowania, 
fragmentacji:

poziome (horizontal) – dotyczy wierszy tabeli

pionowe (vertical) – dotyczy kolumn tabeli

Filtrowanie poziome i pionowe możemy stosować jako połączenie obu sposobów 
filtracji.

Istnieją również możliwość używania filtrów złączeniowych lub dynamicznych.

Filtry złączeniowe pozwalają na wybieranie konkretnych informacji z kilku tabel.

DOPISAC

Jak   wcześniej   wspomniałem   publikować   możemy   również   zapamiętane 

procedury. Dzięki takiej opcji możemy przesłać do subskrybenta dane i nakazać 
mu   wykonanie   odpowiedniej   procedury.   Mówimy   tu   o   publikacji   „wykonania 

procedury zapamiętanej”. Po przez zastosowanie tej metody zyskujemy ogromne 
zmniejszenie liczby przenoszonych przez sieć poleceń SQL, ponieważ procedura 

wykonywana jest na serwerze subskrybenta. Trzeba jednak pamiętać o tym aby 
„przeniesiona procedura” wykonała się identycznie jak na publikatorze.

background image

5. Środowiska replikacji.

W   zależności   od   potrzeb,   wymagań   można   przyjąć   jedno   z   kilku   środowisk 
replikacji:

Centralny publikator.

Centralny subskrybent.

Centralny publikator ze zdalnym dystrybutorem.

Publikujący subskrybent.

Wiele publikatorów lub subskrybentów.

Subskrybent wprowadzający zmiany.

6.1

Centralny publikator.

Podstawowym   środowiskiem   replikacji   według   Microsoftu   jest   model 

centralnego publikatora, rysunek 6.1. Jest to pojedynczy serwer Microsoft SQL 
Server, który pełni rolę publikatora oraz jest jednocześnie dystrybutorem, może 

posiadać   wiele   różnych   subskrybentów   np.   MS   SQL   Server   2000,   MS   SQL 
Server 7.0, Oracle, IBM DB2, Sybase.

Rysunek 6.1 Centralny publikator.

Ms SQL Server

Publikator i

Dystrybutor

Subskrybent

Oracle

Subskrybent

SQL Server

Subskrybent

DB2

background image

Środowisko centralnego publikatora można stosować w następujących sytuacjach:

Tworzenie   kopii   bazy   danych   do   szybkiego   generowania   raportów 

(klasyczne rozwiązanie).

Publikowanie   informacji   nadrzędnych,   takich   jak   listy   studentów   czy 

aktualnych ocen, do innych miejsc w sieci.

Pielęgnowanie   zdalnych   kopii   baz   OLTP,  które   mogą   być   użyte   przez 

zdalne serwery w razie przerw komunikacyjnych.

Pielęgnowanie kopii zapasowej bazy OLTP, która może być użyta podczas 

awarii głównego serwera.

Microsoft zastrzega, że nie wolno wykorzystywać tego środowiska jeśli:

Zmiany na serwerze OLTP dotyczą więcej niż 10% ogólnej liczby danych.

Jeśli pamięć, CPU, dyski twarde na serwerze są wykorzystywane w więcej 

niż 70%

Jeżeli nie jest to serwer typu „stand alone” czyli nie jest dedykowany tylko 

do działania jako serwer SZBD.

W takim przypadku należy wybrać jedno z pozostałych rozwiązań.

6.2

Centralny publikator ze zdalnym dystrybutorem.

Środowisko centralnego publikatora ze zdalnym dystrybutorem, rysunek 6.2,  nie 

różni się znacząco od środowiska centralnego publikatora, jedyną różnicą jest to 
że serwer dystrybucyjny znajduje się na oddzielnym komputerze. Dzięki czemu 

publikator zostaje odciążony i nie prowadzi zadań dystrybucyjnych. Zastosowanie 
to ma również duże znaczenie w sytuacji kiedy mamy wiele publikatorów gdyż 

mogą one wykorzystywać jeden dystrybutor. Głównym wymaganiem dotyczącym 
tego   środowiska   jest   zapewnienie   dystrybutorowi   szybkiego   i   niezawodnego 

łącza. Dzięki zastosowaniu zdalnego dystrybutora, możemy zastosować większą 
liczbę   subskrybentów   i   publikatorów.   Zdalny   dystrybutor   może   być 

umiejscowiony   w   dowolnym   miejscu   (np.   w   centrum   kraju,   lub   Europy) 
oczywiście jeśli pozwala na to przepustowość łączy.

background image

Rysunek 6.2 Centralny publikator ze zdalnym dystrybutorem.

Zastosowanie   środowiska   centralnego   publikatora   ze   zdalnym   dystrybutorem 
może   być   użyte   w   identycznych   sytuacjach   jak   dla   środowiska   centralnego 

publikatora. Koszty tego rozwiązania będą wyższe o cenę dodatkowego serwera 
dystrybucyjnego lecz obciążenia publikatora będą minimalne.

Microsoft zapewnia, że jeżeli aktywność serwera OLTP wynosi dziennie więcej 
niż   10%   i   zasoby   publikatora   są   wykorzystywane   w   znacznym   stopniu   to 

zastosowanie tego środowiska powinno się sprawdzić.

6.3

Publikujący subskrybent.

W   środowisku   publikującego   subskrybenta,   rysunek   6.3,   serwer   publikujący 
spełnia   jednocześnie   rolę   dystrybutora   dla   pojedynczego   subskrybenta. 

Subskrybent   ten   publikuje   otrzymane   dane   do   innych   subskrybentów. 
Przedstawione   środowisko   nie   wykorzystuje   opcji   zdalnej   dystrybucji,   lecz 

spełnia jej wszystkie warunki. Środowisko takie sprawdza się najlepiej w sytuacji, 
kiedy   połączenia   pomiędzy   serwerem   publikującym   a   odbiorcami   mają   małą 

przepustowość   lub   ich   utrzymanie   jest   kosztowne.   Zamiast   wielu   łącz 
utrzymywane jest jedno do publikującego subskrybenta znajdującego się na tyle 

blisko potencjalnych odbiorców, że mogą oni zostać przyłączeni do niego poprzez 
szybszą   i   tańszą   sieć   lokalną.   Środowisko   to   można   również   z   powodzeniem 

stosować   używając   szyfrowanego,   bezpiecznego   łącza   do   filii   szkoły   a   dalej 
dzięki zastosowaniu sieci LAN przesyłać do konkretnych subskrybentów.

Ms SQL Server

Dystrybutor

Subskrybent

Oracle

Subskrybent

SQL Server

Ms SQL Server

Publikator

background image

Rysunek 6.3 Publikujący subskrybent.

6.4

Centralny subskrybent.

W   środowisku   centralnego   subskrybenta,   rysunek   6.4,   wiele   serwerów 

publikujących replikuje dane do pojedynczego, centralnego subskrybenta. Model 
ten wspiera  koncepcje utrzymywania  centralnej bazy danych  i jest najbardziej 

adekwatnym   środowiskiem   do   zastosowania   w   przyszłym   modelu 
EDU@PJWSKT. Przykładem może być zastosowanie centralnej bazy danych w 

PJWSTK   w   Warszawie   i   konsolidowanie   danych   pochodzących   z   różnych 
placówek uczelni. W tej sytuacji pojedyncza tabela np. studenci jest przesyłana 

przez wielu nadawców, zatem przed jej scaleniem trzeba będzie poczynić pewne 
kroki   zapobiegające   nakładaniu   się   danych,   jak   choćby   filtrowanie   według 

kryterium regionu.

Rysunek 6.4 Centralny subskrybent.

Ms SQL Server

Subskrybent

Publikator

i

Dystrybutor

Subskrybent

Oracle

Subskrybent

SQL Server

Ms SQL Server

Główny

Publikator

i

Dystrybutor

Ms SQL Server

Centralny

Subskrybent

Ms SQL Server

Publikator

i

Dystrybutor

Ms SQL Server

Publikator

i

Dystrybutor

Ms SQL Server

Publikator

i

Dystrybutor

background image

6.5

Wiele publikatorów lub wiele subskrybentów.

W   środowisku   wiele   publikatorów   i   subskrybentów,   rysunek   6.5,   pojedyncza 
tabela   (np.   studenci)   jest   wspólna   i   może   być   modyfikowana   przez   każdy   z 

serwerów.   Każdy   z   nich   jest   publikatorem   określonego   zbioru   rekordów,   a 
jednocześnie subskrybentem całej tabeli. Inaczej mówiąc, każdy serwer posiada 

dostęp  do  aktualnej  tabeli  i  prawo wprowadzania  zmian   w  pewnej  jej   części. 
Przed   zastosowaniem   tego   scenariusza   należy   upewnić   się,   czy   zmiany 

wprowadzane   przez   poszczególne   serwery   mają   charakter   lokalny.   Przykład 
zastosowania   to   lokalne   przetwarzanie   ocen   studentów.   Kontrolę   lokalności 

wprowadzanych   zmian   może   zapewnić   wykorzystywanie   procedur 
zapamiętanych, ograniczonych widoków lub kontrola zakresu.

Rysunek 6.5 Wiele publikatorów lub wiele subskrybentów.

6.6

Modyfikujący subskrybent.

SQL Server 2000 dzięki zastosowaniu wbudowanych mechanizmów subskrybent 

ma   możliwość   wprowadzenia   zmian   w   subskrybowanej   tabeli   oraz   ich 
automatyczne przesłanie z powrotem do publikatora jako zmiany natychmiastowe 

lub kolejkowane. Model ten wykorzystuje proces dwustopniowego zatwierdzania 
zmian na serwerze publikującym.

Dwu   fazowe   zatwierdzenie   wykorzystuje   protokół   2PC   (Two-Phase   Commit). 
Polega   ono   na   tym,   że   serwer   chcący   wprowadzić   zmiany   w   swoich   danych 

Ms SQL Server

Subskrybent

Publikator

Dystrybutor

Ms SQL Server

Subskrybent

Publikator

Dystrybutor

background image

zgłasza   chęć   modyfikacji   do   innych   serwerów   z   którymi   wymienia   dane.   Po 

otrzymaniu   sygnału   gotowości   do   modyfikacji   serwery   otrzymują   dane   które 
muszą   wprowadzić.   Serwer   główny   który   zażądał   zmiany   danych   czeka   na 

serwery aby wysłały potwierdzenia zmiany danych, jeśli od wszystkich serwerów 
otrzyma  sygnał  o zatwierdzeniu transakcji (commit)  wtedy zmodyfikuje  swoje 

dane. Jeśli chociaż jeden z serwerów zwróci błąd wszystkie transakcje zostają 
zerwane. System ten gwarantuje bardzo dużą spójność wszystkich połączonych 

baz danych. Wadą jest to że jeden serwer który ulegnie awarii blokuje wszystkie z 
nim połączone.

  Modyfikacje są replikowane do wszystkich subskrybentów, z wyjątkiem tego, 

który je wprowadził.

Rysunek 6.6 Modyfikujący subskrybent.

Zmiany   natychmiastowe   są   rozsyłane   do   subskrybentów   po   zatwierdzeniu   ich 

przez serwer publikujący. Subskrybenci muszą być połączeni do niego na stałe 
on-line przez niezawodne łącze.

Zmiany kolejkowane są przechowywane w kolejce zmian na czas odłączania od 

publikatora.   Przy   ponownym   połączeniu   są   do   niego   przesyłane.   Metoda   ta 
wykorzystuje   kolejkę   SQL   Server   2000   i   Queue   Leader   Agent   lub   Microsoft 

Message Queuing.

Dzięki zastosowaniu obu tych metod przesyłania zmian pozwala subskrybentowi 
wykorzystywać   modyfikacje   natychmiastowe,   a   przełączać   się   do   trybu 

kolejkowego   w   wypadku   braku   połączenia.   Po   przywróceniu   połączenia   i 
poróżnieniu bufora kolejki subskrybent może przejść do trybu natychmiastowego.

Ms SQL Server

Publikator

Dystrybutor

Ms SQL Server

Modyfikujący

Subskrybent

Ms SQL Server

Subskrybent

background image

7. Typy replikacji

W SQL Server 2000 istnieją trzy rodzaje replikacji:

migawkowa (snapshot)

transakcyjna (transactional)

scalająca (merge)

Rysunek 7.1 Typy replikacji

Każdy   z   rodzajów   replikacji   odnosi   się   do   pojedynczej   publikacji.   Jednak 
możliwe jest stosowanie różnych kombinacji tych metod dla pojedynczej bazy 

danych.

background image

Replikacja migawkowa  jest najprostszym typem replikacji. Tworzy ona obraz 

(migawkę) wszystkich tabel przeznaczonych do publikacji i wysyła je w całości 
do subskrybentów. Wadą tego rozwiązania jest to, że każda nowa migawka jest 

tworzona   w   całości   od   początku,   replikacja   migawkowa   nie   analizuje 
wprowadzonych   zmian.   Trzeba   również   zauważyć,   że   każdy   rodzaj   replikacji 

zaczyna   się   od   stworzenia   pojedynczej   migawki   i   rozpropagowania   jej   do 
subskrybentów.   Ten   typ   replikacji   wymaga   dużej   przepustowości   sieci   gdyż 

rozmiary   przesyłanej   migawki   mogą   być   znaczne.   Replikację   tą   możemy 
stosować w przypadkach niezbyt dużych tabel w których subskrybenci nie będą 

wprowadzać   zmian,   oraz   kiedy   częstotliwość   replikacji   danych   nie   musi   być 
bardzo częsta (raz na dzień lub rzadziej).

Wadą replikacji migawkowej jest to że baza subskrybenta jest aktualna tylko do 

momentu pobrania migawki, wszelkie zmiany u dystrybutora które następują po 
zrobieniu migawki będą aktualne po sporządzeniu następnej.

Zastosowanie – systemy nie wymagające natychmiastowych aktualizacji danych 

np. replika książki telefonicznej, replika pracowników uczelni.

Replikacja   transakcyjna  polega   na   śledzeniu   i   przechwytywaniu   przez   SQL 

Server wszelkich zmian typu INSERT, UPDATE, DELETE i zachowywaniu ich 
w dystrybucyjnej bazie danych. Polecenia typu CREATE będą aktywne dopiero 

po   zatwierdzeniu   ich   jako   artykuły   publikacji!   Zmiany   z   dystrybucyjnej   bazy 
danych są natychmiast przesyłane do subskrybentów z zachowaniem kolejności 

wprowadzenia.   Dzięki   stałemu   śledzeniu   zmian   w   dzienniku   transakcji   SQL 
Server   umożliwia   publikowanie   za   pomocą   replikacji   transakcyjnej   tabel, 

widoków,   procedur   przechowywanych.   Jak   już   wcześniej   wspomniałem 
rozpoczęcie   działania   replikacji   transakcyjnej   powoduje   stworzenie   migawki 

publikacji i zapisaniu jej na dystrybutorze. Od tego momentu SQL Server zajmuje 
się   tylko   analizą   dziennika   transakcji.   Czynności   te   wykonywane   są   bardzo 

efektywnie   i   nie   jest   potrzebne   odczytywanie   zawartości   tabel   źródłowych, 
oczywiści   pomijając   stworzenie   początkowej   migawki   danych.   Liczba 

przenoszonych danych w replikacji transakcyjnej jest minimalna w porównaniu z 
replikacją   migawkową.   Wprowadzenie   zmian   powoduje   automatyczne 

background image

przeniesienie   ich   do   odbiorców   prawie   w   tym   samym   czasie.   Standardowe 

środowisko   replikacji   transakcyjnej   polega   na   wprowadzaniu   zmian   tylko   na 
jednym   głównym   publikatorze   co   eliminuje   konflikty.   Stosowanie   replikacji 

transakcyjnej pozwala na uzyskanie tak zwanej luźnej lub opóźnionej spójności 
transakcyjnej. Dane wprowadzone na publikatorze mają pewne opóźnienie, gdyż 

proces ten nie przebiega w tym samym czasie na publikatorze i subskrybencie. 
Jednakże   opóźnienie   takie   nie   przekracza   zazwyczaj   minuty.   Możemy   więc 

mówić   o   synchronizacji   danych   z   niewielkim   opóźnieniem.   O   pełnej 
synchronizacji danych opisze w dalszej części pracy.

Zalety   replikacji   transakcyjnej   sprawiają,   że   jest   to   najczęściej   używany   typ 
replikacji.

Wadą   replikacji   transakcyjnej   jest   generowanie   ciągłego   ruchu   danych   we 

wszystkich węzłach sieci.

Zastosowanie   tej  replikacji   to  systemy  wymagające  natychmiastowej  walidacji 
danych np. systemy bankowe, sprzedaży, aukcyjnie (dane newralgiczne).

Replikacja scalająca  jest najtrudniejszym, najbardziej skomplikowanym typem 
replikacji. Daje ona możliwość autonomicznych zmian replikowanych danych nie 

tylko   na   publikatorze   lecz   również   na   każdym   subskrybencie.   Wprowadzone 
modyfikacje są scalane i rozsyłane do wszystkich zainteresowanych subskrypcją 

stron, co umożliwia utrzymywanie w każdej bazie prawie identycznych danych. 
Podczas tworzenia tej replikacji do wszystkich publikowanych  tabel dodawana 

jest   kolumna   typu  ROWGUIDCOL,  która   służy   do   identyfikacji   wierszy   w 
kopiach tabeli. Podczas działania replikacji scalającej często występują konflikty, 

dlatego   wymaga   ona   stałego   nadzoru   lub   specjalnie   zaprojektowanych 
mechanizmów   rozwiązywania   konfliktów.   W   czasie   rozstrzygania   konfliktów 

stroną uprzywilejowaną jest zawsze publikator oczywiście jeśli nie ustali się tego 
inaczej.

Zalety   replikacji   scalającej   to   możliwość   synchronizacji   wielu   systemów, 

zapobieganie zakleszczeniom (deadlock). Tworzy w każdej replikowanej tabeli 

background image

kolumnę   zawierającą   niepowtarzalny   identyfikator   wiersza   co   pozwala   na 

efektywne śledzenie i uaktualnianie zmian.

Wadą   jest   duże   wykorzystanie   łącza,   opóźnienia   w   aktualizacji   danych 
(konfigurowalne), większe zużycie zasobów SZBD.

Zastosowanie   –   systemy   rozproszone   wymagające   synchronizacji   np.   systemy 

bankowe, systemy firm o wielu filiach, systemy hurtowni, magazynów.

8. Subskrypcja – metody realizacji.

Rozważając   pojecie   subskrypcji   czyli   przesyłania   publikowanych   danych, 

możemy rozróżnić dwa przypadki realizowania przesyłu danych:

Wysyłanie danych przez dystrybutor.

Pobieranie danych z dystrybutora.

Na   ogół   te   dwa   przypadki   nie   są   brane   pod   uwagę   podczas   projektowania 

replikacji, jednak mają one duże znaczenie w procesie replikacji danych.

W pierwszym przypadku, gdy dane zostają wysyłane do subskrybentów, mówimy 
o tak zwanej subskrypcji wymuszonej (push subscription). Subskrypcja taka jest w 

pełni zarządzana przez dystrybutor. Główną zaletą tego rozwiązania jest centralne 
administrowanie   tego   procesu   po   stronie   publikatora   oraz   to,   że   wiele 

subskrybentów odbiera dane w tym samym czasie co zmniejsza znacznie ruch w 
sieci.

W   przypadku   pobierania   danych   przez   subskrybenta   mówimy   o   tak   zwanej 

subskrypcji żądanej (pull subscription), subskrypcja taka jest zawsze realizowana 
po   stronie   odbiorcy   (subskrybenta).   Główną   zaletą   tego   rozwiązania   jest 

możliwość wyboru publikacji oraz czasu jej odbioru przez administratora serwera 

background image

subskrypcji. Metoda ta jest zalecana gdy publikacje otrzymywane są okresowo i 

wtedy kiedy administrator tego zażąda.

Rozważając metody subskrypcji trzeba wspomnieć o możliwości zdefiniowania 
subskrypcji anonimowej. Jest to szczególny przypadek subskrypcji w którym nie 

definiujemy   odbiorców.   W   normalnym   przypadku   wszystkie   informacje   o 
subskrybentach włącznie z danymi  o wydajności  są utrzymywane  na serwerze 

dystrybucyjnym.   Jeżeli   zdecydujemy   się   na   ten   rodzaj   subskrypcji   cała 
odpowiedzialność   za   inicjalizowanie   i   utrzymywanie   transmisji   zostanie 

przeniesiona na subskrybenty.

Subskrypcje anonimową można wykorzystać w przypadkach:

Publikacji danych w Internecie.

Dużej liczby odbiorców.

Przeniesienia odpowiedzialności za utrzymywanie i zarządzanie danymi 

na subskrybentów.

Odbiorcy anonimowi spełniają wszystkie zasady subskrypcji żądanej.

Synchronizacja danych.

W systemach wymagających stałej aktualizacji danych takich jak systemy 
bankowe, giełda itp. dane muszą być ciągle zsynchronizowane. 

Zsynchronizowanie takie nazywamy jednoczesną spójnością transakcyjną 
(immediate transactional consistency), znane jako bliska spójność w poprzednich 

wersjach SQL Server.

SQL Server implementuje dystrybucje danych w jednoczesnej spójności 
transakcyjnej jako proces z dwufazowym zatwierdzaniem (two-phase commit), 

2PC. Rozwiązanie to daje pewność że transakcje są zatwierdzone bądź wycofane 
jednocześnie na obu serwerach. Problemem podczas wprowadzania systemu 

jednoczesnej spójności transakcyjnej jest wymóg posiadania sieci o bardzo dużej 
przepustowości i rozwiązanie to może okazać się nieodpowiednie dla dużych 

background image

środowisk z wieloma serwerami, właśnie z powodu możliwości wystąpienia 

okresowych problemów z siecią.

W   systemach   takich   jak   EDU@PJWSTK   100%   synchronizacja   danych   we 
wszystkich węzłach nie jest sprawą kluczową. Dane powinny być aktualne lecz 

nie muszą następować natychmiast na wszystkich serwerach. Dlatego dla systemu 
EDU@PJWSTK możemy zastosować replikację danych zapewniającą opóźnioną 

spójność transakcyjną (latent transactional consistency). W poprzednich wersjach 
zwaną jako luźna spójność.

Opóźniona spójność transakcyjna realizowana przez replikację danych pozwala na 

aktualizację   danych   we   wszystkich   serwerach,   lecz   proces   ten   nie   będzie 
przebiegał   jednocześnie.   W   wyniku   działania   replikacji   dane   w   węzłach   są 

wystarczająco zgodne w czasie (Real-enough time data).
Na opóźnienie to składa się analiza danych przez publikator, czas przesyłu danych 

do   dystrybutora,   czas   przesyłu   danych   z   dystrybutora   do   subskrybenta   oraz 
analiza danych przez subskrybenta. W części pracy poświęconej analizie danych 

EDU@PJWSTK   podaje   wartość   opóźnienia   danych,   jako   zaszło   pomiędzy 
publikacją danych a wprowadzeniu ich na subskrybencie. 

9 Agenci replikacji.

Proces replikacji w SQL Serwerze zarządzany jest przez kilka rodzajów agentów 
replikacji. Odpowiedni agent replikacji jest uruchamiany w celu zrealizowania 

konkretnego działania. Aby otrzymać dostęp do agentów replikacji potrzebne jest 
wcześniejsze skonfigurowanie SQL Server jako publikator lub dystrybutor. 

background image

9.1 Agent odczytu dziennika transakcji (Log Leader Agent).

Agent odczytu  dziennika transakcji jest odpowiedzialny za przesłanie do bazy 

dystrybucyjnej przeznaczonych do publikacji transakcji bazy publikowanej. 
Każda publikowana baza danych, wykorzystująca replikację transakcyjną posiada 

swojego   agenta   odczytu   dziennika   transakcji   uruchomionego   na   serwerze 
dystrybucyjnym.

Po   zakończeniu   wstępnej   synchronizacji   agent   odczytu   dziennika   transakcji 

rozpoczyna przesyłanie transakcji z serwera publikacyjnego do dystrybucyjnego.
Dziennik transakcji służy do automatycznego odzyskiwania danych jak również 

wykorzystywany jest do replikowania danych. 

Agent analizuje dziennik transakcji publikowanej bazy i w przypadku znalezienia 
zmian  w dzienniku odczytuje je i automatycznie przekształca na polecenia SQL 

odpowiadające   zmianom.   Utworzone   polecenia   zostają   zapisane   na   serwerze 
dystrybucyjnym gdzie oczekują na dystrybucję do subskrybentów.

Ponieważ replikacja wykorzystuje dziennik transakcji, wprowadzono kilka zmian 
w sposobie jego funkcjonowania. Podczas standardowej pracy każda zakończona 

lub wycofana transakcja zostaje oznaczona jako nieaktywna. W czasie replikacji 
zakończone transakcje nie są oznaczane jako nieaktywne do czasu przesłania ich 

do serwera dystrybucyjnego.

Największa   zmiana   w   dzienniku   transakcji   zachodzi   gdy   włączymy   opcję 
obcinania w punkcie kontrolnym. Opcja Truncate Log On Checz Point powoduje 

skracanie dziennika transakcji przy napotkaniu punktu kontrolnego. W zależności 
od szybkości działania serwera obcinanie może zachodzić co kilkanaście sekund. 

W takiej sytuacji dziennik transakcji składa się tylko z „nieaktywnych” transakcji 
czyli  takich które nie zostały jeszcze  przesłane do dystrybutora.  Opcja  ta jest 

bardzo   przydatna   gdy   replikowany   system   realizuje   bardzo   wiele   transakcji   a 
rozmiary dziennika rosły by do dużych rozmiarów. 

background image

9.2 Agent migawki (Snapshot Agent).

Agent   migawki   jest   odpowiedzialny   za   przygotowanie   schematy,   wstępnych 
plików publikowanych tabel i procedur zapamiętanych, przechowywanie migawki 

na serwerze dystrybucyjnym oraz zapis statusu operacji w bazie dystrybucyjnej. 
Każda   publikacja   obsługiwana   jest   przez   własnego   agenta   publikacji 

uruchomionego na serwerze dystrybucyjnym. 

Agent   migawki   ma   duże   znaczenie   gdyż     podczas   rozpoczęcia   pracy 
synchronizuje   bazy   tworząc   identyczną   kopie   publikowanej   bazy   na 

subskrybencie. Proces ten zwany synchronizacją początkową przeprowadzany jest 
tylko jeden raz, gdy publikacja otrzymuje nowego subskrybenta.

Kiedy inny serwer zgłasza subskrypcję publikacji, przeprowadzana jest kolejna 

synchronizacja. Po jej rozpoczęciu kopia schematu tabeli   jest przenoszona do 
pliku z rozszerzeniem .SCH. Plik ten zawiera wszystkie informacje niezbędne do 

utworzenia tabeli i jej indeksów. Następnie wykonywana jest i zapisywana do 
pliku z rozszerzeniem .BCP kopia danych synchronizowanej tabeli. Plik BCP jest 

typu  masowego  kopiowania.  Oba  pliki *.SCH   i  *.BCP  przechowywane  są  na 
dystrybutorze. 

Po   rozpoczęciu   procesu   synchronizacji   gdy   pliki   danych   są   już   utworzone, 

wszystkie   zmiany   są   zapisywane   w   bazie   dystrybucyjnej   lecz   do   zakończenia 
synchronizacji nie są replikowane do baz danych subskrybentów.

Rozpoczynający   się   proces   synchronizacji   dotyczy   wybranej   grupy 

subskrybentów.   Wszystkie   serwery,   które   odebrały   modyfikacje   schematu   są 
pomijane   a   otrzymują   ją   oczekujące.   Po   ponownym   utworzeniu   schematów   i 

danych   wszystkie   transakcje   przechowywane   na   serwerze   dystrybucyjnym   są 
wysyłane do odbiorców. 

W czasie konfigurowania subskrypcji istnieje możliwość ręcznego załadowania 

do   serwera   migawki   początkowanej.   Czynność   ta   określana   jest   jako   ręczna 

background image

synchronizacja.   Dla   wyjątkowo   dużych   baz   danych   często   prostsze   jest 

wykonanie   kopii   bazy   na   nośniku   i   ręczne   załadowanie   jej   kopii   do   serwera 
subskrypcyjnego. W czasie takiego ładowanie migawki SQL Server zakłada że 

bazy są zsynchronizowane i automatycznie rozpoczyna transmisję zmienionych 
danych.

9.3 Agent dystrybucji (Distribution Agent)

Agent dystrybucji zajmuje się przesyłaniem transakcji i migawek z dystrybucyjnej 
bazy   danych   do   subskrybentów.   Zostaje   on   utworzony   po   zdefiniowaniu 

subskrypcji wymuszonej. 

Subskrypcje  nie skonfigurowane do bezpośredniej synchronizacji wykorzystują 
agenta   dystrybucji   uruchomionego   na   serwerze   dystrybucyjnym.   Subskrypcje 

żądane, migawkowe lub transakcyjne posiadają agenta dystrybucji na serwerze 
subskrypcyjnym. Publikacje scalające nie mają agenta dystrybucji i wykorzystują 

agenta scalającego.

W   replikacji   transakcyjnej   transakcje   są   przenoszone   do   dystrybucyjnej   bazy 
danych skąd w zależności od konfiguracji serwera agent dystrybucji przesyła je 

do subskrybentów lub pobiera z bazy dystrybucyjnej.

Wszystkie zmiany wprowadzone w danych serwera publikacyjnego są rozsyłane 
do odbiorców w porządku w jakim zostały wprowadzone. 

9.4 Agent scalający (Merge Agent)

Agent scalający służy do ustalania i przesyłania zmian danych które zaszły od 

czasu   wykonania   migawki   początkowej.   Każda   publikacja   scalająca   posiada 
własnego   agenta   scalającego,   który   łączy   się   z   serwerem   publikacyjnym   i 

background image

subskrypcyjnym,  po czym  wykonuje odpowiednie modyfikacje danych po obu 

stronach. 

Podczas działania replikacji scalającej mogą występować konflikty kiedy te same 
wiersze   zostaną   zmodyfikowane   w   tym   samym   czasie.   W   SQL   Server   2000 

istnieją specjalne skrypty nazywane analizatorami konfliktów (conflict resolver). 
Analizator   konfliktów   powinien   być   zdolny   do   rozwiązania   każdej,   nawet 

najbardziej złożonej sytuacji konfliktowej. Następnie agent odwraca cały proces, 
pobierając   zmiany   z   serwera   publikacyjnego.   Subskrypcja   wymuszona 

wykorzystuje   agenta   scalającego   uruchomionego   na   serwerze   publikacyjnym, 
podczas gdy żądana agenta działającego na serwerze subskrypcyjnym. Migawki i 

publikacje transakcyjne nie używają agenta scalającego.

Projektowanie replikacji.

Replikacja nie jest procesem w którym możemy zastosować istniejące 

szablony, nie da się skonstruować doskonałego systemu replikacji danych i 
stosować go dla wszystkich przypadków.  To jakie wymagania stawia się 

replikacji określają wybór metody replikacji i sposób jej konfiguracji. Samo 
zdefiniowanie wymagań dotyczących replikacji danych może okazać się bardzo 

trudnym procesem, nie zawsze możemy przewidzieć wszystkie potrzeby lub 
zagrożenia podczas samego procesu projektowania replikacji. Dlatego w 

większości przypadków projektuje się model najbardziej odpowiadający 
potrzebom biznesowym i wdraża się takie system w celach testowych. Dopiero po 

sprawdzeniu działania replikacji w praktyce może zagwarantować, że 
zaprojektowany i wdrożony system replikacji będzie sprawnie działał i sprosta 

potrzebom biznesowym.

W każdym przypadku w którym rozpoczynamy projektowanie replikacji 

danych musimy odpowiedzieć sobie na kilka podstawowych pytań decydujących 

o podjęciu dobrej decyzji projektowej. Ja postaram się odpowiedzieć na te pytania 
opierając się na informacjach dotyczących nowego systemu EDU@PJWSTK:

.1 Jaka jest liczba abonentów (stron) procesu.

background image

PJWSTK w Warszawie

PJWSTK w Bytomiu

PJWSTK w Kijowie

PJWSTK w Bratysławie

.2 Kto utrzymuje główne dane.

Dane będą utrzymywane przez główny serwer znajdujący się w 
PJWSTK w Warszawie. Jednakże każdy z serwerów będzie posiadał 

dane dotyczące swojego konkretnego regionu.
.3 Jakie może być opóźnienie danych.

Przyjmijmy, że największe opóźnienie danych może wynieść jeden 
dzień. Jednak tworząc jednorodny moduł TESTOWY lub przyjmując 

że wszystkie serwery będą miały możliwość prowadzenia testów dla 
studentów z dowolnego regionu opóźnienie powinno być jak 

najmniejsze lub należy zadbać o wprowadzenie pełnej spójności 
transakcyjnej we wszystkich węzłach.

.4 Jak strony korzystają z danych. (czytanie, zapis, modyfikacja, 

usuwanie).

Przyjmuję, że każda ze stron będzie posiadać swoją autonomię 
odnośnie wszystkich operacji na danych dotyczących jej regionu.

.5 Ile komputerów będzie współpracować dla jednej strony.
Zakładając najkorzystniejsze rozwiązanie przyjmę, że każda ze stron 

posiada tylko 1 publikator i 1 dystrybutor danych i 1 centralny 
subskrybent.

.6 Jaka jest moc obliczeniowa (CPU, pamięć, przestrzeń dysków) dla 

tych komputerów (dla strony).

Przyjmijmy, że każdy z komputerów będących serwerami 
uczestniczącymi w procesie replikacji będzie posiadał wystarczające 

zasoby dla sprawnego przeprowadzenia procesu replikacji danych.
.7 Jaka jest sieć i jej przepustowość dla każdej ze stron.

Zakładam że nowo powstałe placówki PJWSTK będą posiadać łącza 
internetowe co najmniej 1Mbit/sek. co w pełni zaspokoi potrzeby 

replikacji danych.
.8 Jaki jest sposób dostępu do informacji (LAN, Internet, dial-in czy 

inny).

background image

Wszystkie placówki naszej uczelni będą posiadać stałe łącza 

internetowe aktywne 24 godziny na dobę.
.9 Jakie typy baz danych będą posiadać strony.

Wszystkie serwery uczestniczące w procesie replikacji danych będą 
używały systemów zarządzania bazami danych typu MS SQL Server 

2000 lub Oracle.

 Najczęściej 95% projektu replikacji możemy przewidzieć przed rozpoczęciem 

testowania już wdrożonego systemu jednak te 5% które nie udało się przewidzieć 
będzie sprawiać najwięcej problemów. To właśnie te 5% sprawia że replikacja 

jest inna w każdym środowisku w którym działa

9. EDU@PJWSTK.

EDU@PJWSTK   jest   bazą   danych   przeznaczoną   dla   systemu   Studiów 

Internetowych w Polsko Japońskiej Wyższej Szkole Technik Komputerowych. Z 
myślą o poszerzeniu działalności szkoły o kilka nowych placówek pojawił się 

problem   scentralizowania,   synchronizacji   danych   ze   wszystkich   fili   szkoły   w 
jednym   głównym   serwerze.   Rozważania   moje   będą   dotyczyć   głównie   danych 

jakie znajdują się w bazie i ich analizą pod kontem przyszłego scentralizowania. 
Będę   starał   przedstawić   konkretne   rozwiązania   najbardziej   adekwatne   dla 

powstania takiego systemu.
Do   celów   analizy   danych   w   mojej   pracy   dostałem   kopie   bazy   danych 

EDU@PJWSTK   odpowiednio   przygotowaną   (brak   danych   osobowych   oraz 
różnych tabel pochodzących z innych modułów). W pracy skupię się na analizie 

danych pochodzących z dwóch głównych modułów. Podstawowym pierwotnym 

background image

modelem   bazy   EDU@PJWSTK   był   model   zaprezentowany   na   schemacie, 

schemat 1, w późniejszym  czasie został on rozszerzony o moduł TESTOWY. 
Całościowy schemat bazy umieszczam jako załącznik do pracy, załącznik numer 

1.
Baza danych którą zainstalowałem na swoim komputerze w celach testowych to:

Nazwa

Rozmiar

Tabele

Perspektywy

Procedury

edukacja

237.56 MB

76

5

402

W celu uzyskania bardziej dokładnych informacji na temat bazy danych 
EDU@PJWSTK po zainstalowaniu jej na serwerze można użyć polecenia 

sp_spaceused w SQL Query Analyzer, które zwraca dwie tabelki 
dodatkowych informacji o zainstalowanej bazie.

Nazwa

Rozmiar

Niezapisana przestrzeń

edukacja

237.56 MB

7.23 MB

Zarezerwowana 

przestrzeń

Dane

Rozmiar indexu

Nieużywane

16592 KB

8056 KB

7488 KB

1048 KB

Na schemacie widać pierwotną wersję bazy EDU@PJWSTK jest to główna baza, 
która   została   rozszerzona   o   kilka   innych   modułów.   Ja   w   swojej   pracy   będę 

analizował   dane   pochodzące   tylko   z   tego   schematu   i   modułu   TESTOWEGO. 
Analiza tego modelu danych będzie pomocna do opracowania technik replikacji 

innych modułów które powstały bądź są w trakcie tworzenia. Moduły EDU oraz 
TESTOWY   są   najważniejszymi   w   całej   strukturze   EDU@PJWSTK,   oraz 

posiadają   najważniejsze   dane   związane   z   działaniem   systemu   Studiów 
Internetowych. Pełną listę tabel z modułów EDU i TESTOWEGO przedstawiam 

tabeli

Podstawą więc jest zaprojektowanie systemu replikacji dla tych dwóch modułów 

które   są   sercem   systemu   EDU@PJWSTK.   Pełen   schemat   bazy   danych 
EDU@PJWSTK  zamieszczam  w dodatkach do pracy gdyż zajmuje on bardzo 

wielki   format   i   nie   można   przedstawić   go   w   sposób   inny   niż   jako   diagram 
wygenerowany z SQL Server Enterpise Manager. 

background image

Kurs

Krs_Id: INTEGER

Krs_Autor_Id: INTEGER
Krs_Prg_Id: INTEGER
Krs_Nazwa: VARCHAR(100)
Krs_Email: VARCHAR(100)
Krs_Aktywny: BIT
Krs_Opis: TEXT
Krs_FilesPath: VARCHAR(255)
Krs_Akt_Tbo: DATE
Krs_Akt_Faq: DATE
Krs_Akt_Kal: DATE
Krs_Akt_Tes: DATE
Krs_Akt_Mat: DATE
Krs_Akt_Pod: DATE
Krs_Akt_Mao: DATE
Krs_Akt_Odn: DATE
Krs_Akt_Oce: DATE
Krs_akt_Scb: DATE
Krs_Archiwalny: BIT

OcenaZa

Ocz_Id: INTEGER

Krs_Id: INTEGER (FK)
Ocz_krs_Id: INTEGER
Ocz_Opis: VARCHAR(100)
Ocz_Numeryczna: BIT

Ocena

Oce_Id: INTEGER

Oce_Std_Id: INTEGER
Oce_Ocz_Id: INTEGER
Oce_Ocena: VARCHAR(20)
Oce_OcenaNum: NCHAR(8,3)
Oce_Komentarz: VARCHAR(255)
Ocz_Id: INTEGER (FK)
Std_Id: INTEGER (FK)

Student

Std_Id: INTEGER

Std_Oso_Id: INTEGER
Std_NrIndeksu: VARCHAR(10)

OcenaKoncowa

Ock_Std_Id: INTEGER
Ock_Krs_Id: INTEGER
Std_Id: INTEGER (FK)
Krs_Id: INTEGER (FK)

Ock_Ocena: VARCHAR(20)

OcenaEgzamin

Ocg_Krs_ID: INTEGER
Ocg_Std_Id: INTEGER
Krs_Id: INTEGER (FK)
Std_Id: INTEGER (FK)

Ocg_Ocena: VARCHAR(20)

Schemat 1. Schemat pierwotny EDU@PJWSTK.

W tabeli przedstawiam tylko te relacje które mają znaczący wpływ na działanie 
systemu   EDU@PJWSTK   oraz   pochodzą   z   dwóch  głównych   modułów   EDU   i 

TESTOWEGO.   Kolumna   „Jak   często   zmieniają   się   dane   w   tabeli” 
wywnioskowana jest na zasadzie zmian jakie zachodzą w bazie danych. Zmiany 

te są uśrednione i mogą odbiegać od rzeczywistych w niektórych przypadkach. 
Ilość wierszy podana jest dla zobrazowania wielkości tabel oraz zachodzących w 

nich zmian. 

Niestety wraz z bazą nie dostałem żadnych logów bazy danych, które mógłbym 
poddać analizie. Baza nie posiadała logów przydatnych mojej analizie. Informacje 

o zmianie danych pochodzą z obserwacji administratora bazy EDU@PJWSTK, 
oraz odpowiadają rzeczywistym zmianom jakie powinny zachodzić w sprawnie 

działającym systemie.

Określenie   zachodzenia   zmian   „Codziennie”   oznacza   zmianę   danych   raz   lub 
wiele razy dziennie.

„Na początku lub końcu semestru” oznacza zachodzenie zmian tylko w czasie 
rozpoczęcia lub zakończenia semestru, zmiany te mogą zachodzić raz lub wiele 

razy dziennie w tym okresie.

background image

Można zaobserwować, że czas zmiany określony jako „Codziennie” informuje 

nas, że dane te mogą zostać zmienione w każdej chwili. Dla przykładu rozważmy 
tabele „Notatka”, która może zmienić się codziennie lecz jej zmiana od dwóch lat 

działania modułu TESTOWY mogła nastąpić kilka lub kilkanaście razy biorąc 
pod uwagę fakt, że tabela ta zawiera tylko 8 wierszy.

W tabeli na pomarańczowo zaznaczyłem tabele należące do modułu pierwotnego 

EDU.
Na   niebiesko   zaznaczone   są   tabele   kluczowe   dla   działania   modułu 

TESTOWEGO, na czarno pozostały tabele które należą do modułu testowego lecz 
nie są kluczowe dla działania systemu.

Nazwa tabeli.

Jak często zmieniają się

dane w tabeli.

Ilość wierszy.

Asystent

Na początku i końcu semestru.

120

FAQ

Raz na tydzień lub częściej.

10

FolderObszaru

Codziennie !

69

Forumdyskusyjne

Codziennie !

495

Gosc

Na początku lub końcu 

semestru.

31

Kalendarz

Co tydzień.

50

Kurs

Codziennie.

63

Materialdydaktyczny

Codziennie 

481

Materialobszaru

Codziennie.

934

Modul

Raz na semestr lub rzadziej.

17

Modul_kursu

Na początku semestru.

843

Notatka

Codziennie.

8

Obejrzal

Codziennie.

6153

Ocena

Codziennie.

4293

OcenaEgzamin

Pod koniec semestru – 

codziennie.

0

OcenaKoncowa

Pod koniec semestru – 

codziennie.

351

OcenaZa

Codziennie.

239

Odnosnik

Codziennie.

93

Odpowiedzi

Codziennie

9029

Opcja

Codziennie.

2002

Osoba

Na początku semestru.

596

Podrecznik

Na początku semestru.

62

Podrecznik_kursu

Na początku semestru.

48

Program

Rzadko.

10

Pytanie

Codziennie.

754

Rejestraktywnosci

Codziennie.

55985

Rejestrmodulow

Codziennie 

45223

Student

Codziennie.

576

StudentKursu

Codziennie.

363

StudentProgramu

Codziennie.

204

TablicaOgloszen

Codziennie.

448

Test

Codziennie

115

background image

Tabela 1. Lista głównych tabel modułów EDU i TESTOWEGO.

Mając   zainstalowaną   na   serwerze   bazę   danych   EDU@PJWSTK   możemy 

przystąpić do analizy tabel.
Stosując poniższy skrypt w SQL Query Analyzer możemy uzyskać informacje na 

temat wielkości tabel, ilości wierszy, rozmiarów indeksów. 

use edukacja
go

DECLARE @pagesizeKB int
SELECT @pagesizeKB = low / 1024 FROM master.dbo.spt_values

WHERE number = 1 AND type = 'E'

SELECT
  table_name = OBJECT_NAME(o.id),

  rows = i1.rowcnt,
  reservedKB = (ISNULL(SUM(i1.reserved), 0) + 

ISNULL(SUM(i2.reserved), 0)) * @pagesizeKB,
  dataKB = (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0)) * 

@pagesizeKB,
  index_sizeKB = ((ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 

0))
    - (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0))) * 

@pagesizeKB,
  unusedKB = ((ISNULL(SUM(i1.reserved), 0) + 

ISNULL(SUM(i2.reserved), 0))
    - (ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))) * 

@pagesizeKB
FROM sysobjects o

LEFT OUTER JOIN sysindexes i1 ON i1.id = o.id AND i1.indid < 2
LEFT OUTER JOIN sysindexes i2 ON i2.id = o.id AND i2.indid = 255

WHERE OBJECTPROPERTY(o.id, N'IsUserTable') = 1 --same as: o.xtype 
= %af_src_str_2

OR (OBJECTPROPERTY(o.id, N'IsView') = 1 AND OBJECTPROPERTY(o.id, 
N'IsIndexed') = 1)

GROUP BY o.id, i1.rowcnt
ORDER BY 3 DESC

Go

Użycie   powyższego   skryptu   powoduje   zwrócenie   poniższej   tabeli   przez   SQL 
Server   Query   Analyzer.   Tabelę   prezentuje   w   niezmienionej   postaci.   Tabele 

posegregowane są według kolumny ‘Zarezerwowane KB’.

background image

Nazwa

Liczba 

wierszy

Zarezerwowane 

KB

Rozmiar 

KB

Rozmiar Indeksu 

KB

Nieużywane 

KB

RejestrAktywnosci

55985

4536

1616

2672

248

RejestrModulow

45223

3440

1352

1880

208

Odpowiedz

9029

768

488

272

8

Obejrzal

6153

448

144

240

64

ForumDyskusyjne

495

328

248

80

0

Ocena

4293

320

144

160

16

Pytanie

754

296

208

48

40

MaterialObszaru

934

288

176

112

0

TablicaOgloszen

448

272

192

48

32

czesc_lekcji

233

248

176

24

48

Opcja

2002

240

128

64

48

MaterialDydaktyczny

481

144

72

32

40

Kurs

63

112

64

48

0

Modul_Kursu

843

104

24

80

0

dtproperties

7

104

80

24

0

cwiczenie_odp

388

88

64

24

0

przyklad

104

88

80

8

0

Osoba

596

80

64

16

0

Notatka

8

80

32

48

0

PodrecznikKursu

48

80

32

48

0

sysschemaarticles

375

72

48

24

0

StudentKursu

363

64

24

40

0

OcenaKoncowa

351

64

16

48

0

StudentProgramu

204

64

24

40

0

Student

576

64

16

48

0

Kalendarz

50

64

32

32

0

lekcja

40

64

40

24

0

FAQ

10

64

32

32

0

sysarticles

56

56

32

24

0

cwiczenie_pyt

105

56

32

24

0

Asystent

120

56

8

48

0

Odnosnik

97

56

8

48

0

Forum_Osoby_Grupy

128

48

40

8

0

OcenaZa

236

48

16

32

0

lesson_wizyty

42

48

24

24

0

Forum_Wiadomosci

10

48

32

16

0

dzial

9

48

24

24

0

syspublications

1

48

8

40

0

ustawienia

2

40

16

24

0

wyniki_student

51

40

16

24

0

FolderObszaru

69

40

8

32

0

Test

115

40

8

32

0

cwiczenie_odp_student

419

32

24

8

0

typy_odpowiedzi

2

32

8

24

0

Sekcja

2

24

8

16

0

Forum_Tagi

2

24

8

16

0

Forum_Profile

3

24

8

16

0

Element

4

24

8

16

0

El

1

24

8

16

0

Modul

17

24

8

16

0

background image

Testowanie replikacji danych.

Do testowania replikacji używałem dwóch komputerów. Pierwszy pełnił 

rolę publikatora/dystrybutora, drugi zaś subskrybenta, inaczej mówiąc 

zastosowałem środowisko centralnego publikatora. W tym środowisku 
przetestowałem wszystkie trzy metody replikacji danych.

Publikator/Dystrybutor: Procesor AMD Athlon 1.2 GHz, 384MB RAM, system 

Microsoft Windows Server 2003 Enterprise Edition, Microsoft SQL Server 2000 
Enterprise Edition.

Subskrybent: Procesor Pentium III 550 MHz, 256 MB RAM, system Microsoft 

Windows 2000 Professional, Microsoft SQL Server 2000 Developer Edition.

Poniżej przedstawiam kilka kroków, od których należy zacząć przygotowania do 
replikacji danych, kroki te muszą być spełnione aby replikacja powiodła się:

I. Pierwszym   krokiem   jaki   należy   uczynić   jest   stworzenie   konta   z 

uprawnieniami administratora, na którym uruchomiony będzie SQL Server 
2000   oczywiście   o   ile   takiego   nie   posiadamy.   Tylko   użytkownik   z 

uprawnieniami administratora może zarządzać i konfigurować replikację.

II. Trzeba się upewnić że SQL Server Agent uruchamia się automatycznie 

wraz z SQL Server.

III. Konto   na   którym   działa   SQL   Server   musi   posiadać   stały   dostęp   do 

zaufanej   sieci   jest   to   bardzo   ważne   gdyż   podczas   działania   replikacji 
subskrybent   lub   dystrybutor   muszą   być   widoczni.   W   innym   razie 

wszystkie operacje związane z propagacją danych zostaną przejęte przez 

background image

Queque Reader Agent w celu rozesłania ich w późniejszym terminie lub w 

przypadku replikacji scalającej działanie serwera może zostać wstrzymane 
z powodu konfliktów.

IV. Powinniśmy   się   upewnić   czy   mamy   wystarczającą   ilość   miejsca   dla 

stworzenia   dystrybucyjnej  bazy danych.  Krok   ten  należy pominąć   jeśli 

dystrybutor będzie osobnym serwerem typu „stand alone”.

V. Należy zapewnić odpowiednią ilość miejsca na stworzenie bazy danych 

publikatora.

VI. Musimy pamiętać że nie możemy replikować samych tabel zawierających 

więzy referencyjne, gdzie wartości klucza obcego muszą występować jako 
wartości powiązanego z nim klucza głównego. Jeśli taki problem wystąpi 

należy replikować wszystkie powiązane tabele.

VII. Należy zdefiniować serwer dystrybucyjny lub subskrybenta jako serwer 

zdalny, w zakładce Security/Remote Server 

Przebieg procesu testowania.

Mając zainstalowany na dwóch komputerach MS SQL Server oraz wgraną na 
publikator bazę danych EDU@PJWSTK, można zacząć przygotowania do 

pierwszej replikacji danych.
Aby replikacja mogła sprawnie działać należy ustawić zaufane połączenie 

(trustem connection) pomiędzy serwerami.
Stworzenie zaufanego połączenia polega na właściwym ustawieniu praw 

użytkownika którego będziemy używać do łączenia się bazami dystrybutora lub 
subskrybenta.

Dlatego należy zdefiniować na serwerach do których będziemy się łączyć 
użytkowników używających autentykacji SQL Server o ile serwery te nie działają 

w jednej domenie Windows. Ważne jest aby użytkownik którego będziemy 
używać posiadał uprawnienia sysadmin.

Dodałem użytkownika systemowego „sa” a na subskrybencie oraz ustawiłem mu 

ważne hasło.

Na   publikatorze   można   w   łatwy   sposób   sprawdzić   czy   serwery   będą   działać 
rejestrując nowy SQL Server, opcja  New SQL Server Registration. Po wpisaniu 

background image

adresu   serwera   zdalnego  oraz   wprowadzeniu   poprawnej   nazwy  użytkownika   i 

hasła, nowy serwer powinien być widoczny.

W celu dodania zdalnego serwera na stałe do listy zdalnych  serwerów należy 
zdefiniować jego udział w zakładce  Security/Remote Server  należy dodać nowy 

serwer w moim przypadku – SUBSKRYBENT.

Remote Servers 1

Powyższy rysunek  pokazuje zakładkę  Security/Remote  Servers  w której  widać 
trzy pozycje:

COMPAQ jest lokalnym serwerem publikatorem

Repl_distirbutor   jest   serwerem   dystrybucyjnym   uruchomionym   na 

lokalnym komputerze. Wpis ten dodaje się samoczynnie jeśli zdefiniujemy 

lokalny komputera jako dystrybutor.

SUBSKRYBENT\SQL2000   jest   serwerem   subskrypcyjnym 

uruchomionym na osobnym, zdalnym komputerze.

Większość   potrzebnych   funkcji   odnośnie   stworzenia   procesu   replikacji 
znajdziemy w menu Tools/Replication.

background image

Rysunek 1. Menu Replikacji.

Pierwszym   krokiem,   który   powinniśmy   wykonać   jest   stworzenie   bazy 
dystrybucyjnej. W tym celu wybieramy opcję Configure Publishing, Subscribers, 

and Distribution.

W   momencie   wybrania   opcji   konfiguracji   publikacji,   subskrybentów   i 
dystrybutorów uruchamia się kreator procesu konfiguracji.

background image

MS   SQL   Server   zaczyna   konfigurację   replikacji   od   stworzenia   dystrybutora 
danych czyli „serca” całego procesu. Na rysunku poniżej możemy zobaczyć opcję 

wyboru   dystrybutora.   Standardowo   zaznaczona   jest   opcja   czyniąca   komputer 
lokalny jako dystrybutor,  lecz możemy  sami  zdefiniować zdalny komputer  do 

celów   dystrybucji.   Jak   widać   w   oknie   jako   nieaktywny,   wyświetlony   jest 
komputer zdalny SUBSKRYBENT\SQL2000, który jest dodany do listy zdalnych 

serwerów   (Security/Remote   Servers).   Za   pomocą   opcji   Add   Server   możemy 
dodać inny komputer zdalny.

Ja wybrałem opcję czyniącą  z lokalnego komputera publikatora i dystrybutora 

danych.

background image

Po   wybraniu   dystrybutora   musimy   ustalić   czy   chcemy   aby   SQL   Server   użył 

standardowych opcji konfiguracji czy sami ustalimy wszystkie parametry. 

background image

Po   wyborze   standardowych   ustawień   kreator   pominie   następne   dwa   kroki.   Ja 

jednak wybieram opcje ręcznej konfiguracji parametrów replikacji.

Kolejnym   krokiem   jest   zdefiniowanie   dystrybucyjnej   bazy   danych.   W   tym 

przypadku   musimy   wybrać   nazwę   bazy   danych   oraz   jej   lokalizację   na   dysku 
twardym. 

W celu zmniejszenia obciążenia związanego z pracą dystrybucyjnej bazy danych 
powinniśmy zdefiniować położenia dystrybucyjnej bazy danych na innym dysku 

twardym niż publikacja. Ja niestety na komputerze na którym prowadzę testy nie 
posiadam drugiego dysku twardego.

Następnie   zostaniemy   poproszeni   o   zdefiniowanie   publikatorów,   którzy   będą 
przesyłać   dane   do   serwera   dystrybucji.   Krok   ten   jest   już   tworzony   na 

dystrybutorze. W tym przypadku na komputerze lokalnym, jednak jeśli istnieje 
potrzeba   stworzenia   centralnego   dystrybutora   jako   osobny   komputer   musi   on 

mieć   połączenie   ze   wszystkimi   publikatorami   jako   zdalne   serwery.   Microsoft 
sugeruje   aby   pojedynczy   dystrybutor   nie   posiadał   więcej   jak   16   różnych 

background image

publikatorów. Tyle też instancji baz danych można utrzymywać na jednym SQL 

Server 2000.

W   moim   przypadku   jako   publikator   wybrałem   serwer   lokalny   COMPAQ. 

Oczywiście możemy dodać innych aktywnych publikatorów.

Po   zdefiniowaniu   publikatorów   musimy   zdefiniować   jakie   bazy   danych   będą 
publikowane.   W   tej   instancji   SQL   Server   2000   oprócz   standardowych   baz 

dołączonych do serwera posiadam tylko jedną bazę danych EDU@PJWSTK o 
nazwie edukacja. 

Włączenie publikowania  bazy danych  spowoduje  stworzenie kopii tej bazy na 

dystrybutorze.   W   celu   wykonania   replikacji   migawkowej   lub   transakcyjnej 
musimy zaznaczyć opcję  Trans  do jeśli planujemy używać replikacji scalającej 

powinniśmy   wybrać   opcję  Merge  ponieważ   publikowana   baza   danych   będzie 
musiała zostać rozszerzona o specjalne kolumny ROWGUIDCOL.

background image

Ostatnim krokiem jaki należy wykonać jest zdefiniowanie subskrybentów.
W przypadku testowania replikacji subskrybentem jest zdalny komputer.

background image

Serwer   SUBSKRYBENT\SQL2000   na   którym   zainstalowany   jest   MS   SQL 

Server 2000 Developer Edition. 
W celu dodania subskrypcji do serwerów innego typu niż SQL Server musimy 

zakończyć pracę kreatora i dodać je później ręcznie jako zdalne serwery i włączyć 
w proces subskrypcji.

Po kliknięciu przycisku Dalej następuje stworzenie dystrybucyjnej bazy danych, 

dystrybutora,   dodanie   publikatorów,   subskrybentów   oraz   udostępnienie 
publikowanej bazy danych.

Po   wykonaniu   wszystkich   kroków   kreatora   Konfiguracji   publikatora, 
subskrybenta   i   dystrybutora   możemy   przejść   do   konfigurowania   procesu 

replikacji danych. W tym celu musimy uruchomić polecenie Create and Manage 
publications 
w menu Tool/Replication.

W oknie które pojawi się po wybraniu opcji stworzenia publikacji wybieramy 

bazę danych, którą chcemy replikować.

background image

Po   wybraniu   bazy   danych   będącej   publikacją   i   wciśnięciu   przycisku   Create 
Publication,   kreator   wyświetli   okno   z   zapytaniem   czy   chcemy   używać   opcji 

zawansowanych.

Ja   wybrałem   opcje   zaawansowane   co   spowodowało   pojawienie   się   okna 
dotyczącego wyboru bazy danych 

background image

W moim przypadku wybieram bazę „edukacja”. 

Po wybraniu bazy publikacji przechodzimy do wyboru rodzaju replikacji rys 7.1 

Typy   replikacji,   w   którym   możemy   wybrać   jedną   z   trzech   metod   propagacji 
danych. Ja wybieram opcję replikacji migawkowej (snapshot replication). 

Dalszy wybór ma na celu określenie typu  subskrybenta, który będzie odbierał 

dane   z   naszej   publikacji.   Standardowo   możemy   wybrać   subskrybentów 
używających serwery MS SQL Server 2000 i 7.0 oraz inne typy subskrybentów 

takie jak Oracle, MS Access, Sybase, IBM DB2. Istnieje możliwość ręcznego 
zdefiniowania innych typów subskrybentów.

Po wybraniu rodzaju subskrybentów przechodzimy do fazy definiowania danych 

które będą tworzyć publikacje czyli artykułów publikacji.
Automatycznie wyświetlona zostaje zawartość bazy danych wcześniej ustalonej 

jako baza danych publikacji. 

background image

Do   wyboru   mamy   wszystkie   tabele,   zapamiętane   procedury   i   perspektywy 

publikowanej bazy. W lewym oknie widzimy dwa pola wyboru  Show i Publish 
All. 
 W celu dołączenia  wszystkich tabel do publikacji  wystarczy zaznaczyć pole 

Publish All

Możemy   użyć   wszystkich   tabel,   zapamiętanych   procedur   i   perspektyw   do 
stworzenia migawki zaznaczając pola  Publish All  dla trzech typów  danych. Ja 

jednak zacznę od stworzenia migawki samych tabel.

background image

W następnym kroku zostaniemy poproszeni o nadanie nazwy bazie danych którą 
będziemy   używać   jako   bazę   danych   publikacji.   Ja   pozostawiłem   nazwę   bazy 

niezmienioną   „edukacja”.   Kreator   w   kolejnym   kroku   zapyta   czy   chcemy 
zastosować filtrowanie lub zezwolić na anonimową subskrypcje publikowanych 

danych.   W   przypadku   bazy   danych   EDU@PJWSTK   nie   definiowałem 
filtrowania.

background image
background image

Po   zdefiniowaniu   opcji   filtrowania   i   anonimowej   subskrypcji   możemy   ustalić 
częstość   z   jaką   następować   będzie   replikacja   danych.   Możemy   dowolnie 

zdefiniować co jaki czas ma zachodzić wymiana danych (co godzinę, co dzień). 

background image

Kreator zakończy działanie tworząc publikację bazy danych.   Można zauważyć, 

że   stworzonych   zostało   56   artykułów   publikowanej   bazy.   W   56   artykułach 
publikacji zamieszczone są wszystkie tabele bazy danych EDU@PJWSTK. 

Do testowania wydajności replikowania danych używał będę procedur 
zapamiętanych które standardowo występują w SQL Server. Analizował 

informacje, które zostają generowane przez monitory replikacji, jak również 
posługiwał się Monitorem Wydajności Systemu na którym analizował będę 

wykorzystanie mocy procesora i wielkość używanej pamięci.

Standardowe procedury, których można używać do testowania replikacji możemy 
uruchamiać w SQL Query Analyzer. Są to następujące procedury:

sp_helppublication – pokazuje informacje o serwerze publikującym

sp_subscriberinfo – pokazuje informacje o serwerze subskrybenta
sp_helpartice – informacje o definicja artykułów

sp_helpdistributor – informacje o dystrybutorze
sp_helpsubscription –informacje o subskrypcji

sp_replcounters – pokazuje aktywność aktualnej sesji repliakcyjnej
sp_publication_validation – wskazuje liczbę wierszy publikacji subskrybentów

Pierwszym krokiem który należy wykonać jest stworzenie subskrybowanej bazy 
na subskrybencie. Stworzyłem bazę danych „edukacja”.

background image

Do replikacji zaznaczyłem tylko same tabele bazy EDU@PJWSTK

Jak widzieliśmy na 

rysunku

 publikacja samych tabel składa się z 56 artykułów.

Migawka   zawierająca   56   artykułów   na   publikatorze   została   wygenerowana   i 
replikowana migawkowo 3 razy,   w tabeli poniżej przedstawiam wyniki, które 

uzyskałem używając monitora transakcji oraz monitora wydajności.

Artykuły

Czas 

stworzenia 

migawki 

(sek)

Czas 

całej 

operacji 

(min)

Ilość 

transakcji 

/  komend

Opóźnienie 

(ms)

Ilość 

dostarczanych 

komend 

(cmd/sek)

Maks

użycie 

procesor 

(%) / pamięć 

(MB) 

56

28

1,26

1/171

59,656

17,9400

63 / 97

56

27

1,23

1/171

40,365

17,0000

52 /110

56

29

1,31

1/171

28,700

17,0700

55 / 107

Opis kolumn:

Artykuły – (articles) liczba artykułów publikacji.
Czas stworzenia migawki (duration)  – czas potrzebny agentowi migawki do 

stworzenia migawki zawierającej wszystkie artykuły publikacji.
Czas  całej   operacji  (duration)  –  całkowity czas  działania   agenta dystrybucji 

potrzebny do analizy danych i dostarczenia ich subskrybentowi.
Ilość transakcji / komend (#trans / #cmd) – ilość transakcji dostarczonych do 

subskrybenta / ilość komend dostarczonych do subskrybenta.
Opóźnienie (latency)  – jest to opóźnienie liczone od dostarczenia transakcji na 

dystrybutor do przesłania ich na dystrybutor.
Ilość dostarczonych komend (delivery rate) - stosunek dostarczonych komend 

do czasu działania agenta dystrybucji.

Jak   łatwo   zauważyć   wartość   w   kolumnach   „artykuły”   oraz   „ilość   transakcji   / 
komend”   jest   stała.   Spowodowane   to   jest   używaniem   tych   samych   danych 

podczas testu. 
  W   pierwszym   teście   opóźnienie   było   o   ponad   20   sekund   większe   niż   w 

pozostałych   przypadkach   mogło   to   być   spowodowane   uruchamianiem 
odpowiednich funkcji na subskrybencie. 

background image

Następnie   przetestowałem   działanie   replikacji   na   pojedynczej   tabeli.   Na 
publikatorze stworzyłem migawkę zawierającą tylko jedną tabele, jeden artykuł 

RejestrAktywności największą tabele w bazie. 

Stworzenie   migawki   z   tego   artykułu   zajęło   tylko   maksymalnie   2   sekundy. 
Wybrałem opcję natychmiastowego synchronizowania serwerów po skończeniu 

tworzenia   migawki.   Inicjalizacja   SQL   Server   Agent   oraz   przesłanie   i 
zarejestrowanie danych  do subskrybenta trwało nieco ponad minutę. Migawka 

RejestrAktywności składała się z 1 transakcji i 6 komend. Opóźnienie pomiędzy 
danymi wyniosło maksymalnie 33,850 sekundy. Należy zauważyć, że tak jak w 

poprzednim przypadku podczas pierwszego testu opóźnienie było największe.
Obciążenie   zasobów   dystrybutora   było   niewielkie.   Największe   użycie   mocy 

procesora wyniosło 15% a wzrost użycia pamięci zwiększył się do 115 MB.

Artykuły

Czas 

stworzenia 

migawki 

(sek)

Czas 

całej 

operacji 

(min)

Ilość 

transakcji 

/  komend

Opóźnienie 

(ms)

Ilość 

dostarczanych 

komend 

(cmd/sek)

Maks

użycie 

procesor 

(%) / pamięć 

(MB) 

1

1

1,11

1/6

33850

1,0000

14 / 113

1

2

1,06

1/6

15733

1,0000

15 /115

1

1

1,06

1/6

11463

1,0000

12 / 111

Publikacja zajmująca same procedury zapamiętane składa się z 372 artykułów. 

Podczas tworzenia migawki użycie mocy procesora przez 2 sekundy wynosiło 
100%.

Podczas testowania replikacji procedur zapamiętanych wystąpił błąd!

Procedury dotyczące tabeli FAQ zawierają odnośniki dotyczące tabel, których nie 
posiadam i posiadają błąd (odwołania do nie istniejących kolumn w tabeli).

Nazwa

Liczba 

wierszy

Zarezerwowane 

KB

Rozmiar 

KB

Rozmiar Indeksu 

KB

Nieużywane 

KB

RejestrAktywnosci

55985

4536

1616

2672

248

background image

Testowanie   przenoszenia   procedur   zapamiętanych   zacząłem   więc   od 

przetestowanie procedur odnoszących się do tabeli

Artykuły

Czas 

stworzenia 

migawki 

(sek)

Czas 

całej 

operacji 

(min)

Ilość 

transakcji 

/  komend

Opóźnienie 

(ms)

Ilość 

dostarczanych 

komend 

(cmd/sek)

Maks

użycie 

procesor 

(%) / pamięć 

(MB) 

88

17

1/30

1/179

27560

5966,0000

32 / 84

88

18

1/30

1/179

86976

5966,0000

30 /81

88

17

1/20

1/179

9813

5966,0000

36 / 89

Bardzo ciekawe wyniki uzyskałem testując przenoszenie procedur zapamiętanych. 

Jak   wynika   z   tabeli   generacja   publikacji   trwała   średnio   8   razy   dłużej   niż 
przesłanie procedur do subskrybenta. Wynika to z tego że SQL Server przesyła 

procedury zapamiętane w swojej pierwotnej postaci dlatego jeśli chcemy używać 
skomplikowanych filtrów możemy użyć z procedury zapamiętanej która bardzo 

szybko zostanie przeniesiona na subskrybenta a dopiero na nim wykonana. 

Opóźnienie wynosiło w krytycznym wypadku ponad 86976 a minimalne niecałe 
10 sekund. 

Wykorzystanie zasobów procesora było minimalne w porównaniu z poprzednimi 

testami replikacji.

Czas przesyłu procedur zapamiętanych wahał się pomiędzy 2 lub 3 sekundami 
więc jest to bardzo niewielki czas w porównaniu z przenoszeniem pojedynczych 

tabel (niezależnie od ich wielkości).

Stworzenie   migawki   z   publikacji   zawierającej   431   artykułów   na   komputerze 
testowym COMPAQ zajęło 2 minuty i 33 sekundy.

background image

Microsoft SQL Server 2000.

Pracę swoją przeprowadzę na systemie zarządzania bazą danych MS SQL 

Server 2000. Jest to system na którym aktualnie działa baza danych naszej 

uczelni. MS SQL Server 2000, dzięki swojej wydajności, skalowalności, łatwości 
zarządzania, a także łatwości tworzenia aplikacji, jest serwerem bazodanowym 

polecanym dla wielu typów aplikacji, wśród których warto wymienić produkty 
typu:

Customer Relationship Management (CRM), 

Business Intelligence (BI), 

Enterprise Resource Planning (ERP). 

dobrze współpracuje z aplikacjami przeznaczonymi dla Internetu.

Przedstawię kilka cech charakteryzujących Microsoft SQL Server:

zaprojektowany dla Internetu,

bezpieczeństwo,

analiza dużych ilości danych oparta na interfejsie internetowym,

kompletne rozwiązanie dla hurtowni danych,

uproszczone zarządzanie,

integracja z usługami katalogowymi, skalowalność, dostępność.

MS SQL Serwer 2000 działa w środowisku rozproszonym i posiada rozbudowane 

narzędzia,   które   wspierają   i   realizują   podstawowe   zadania   zarządzania   taką 
architekturą.

Rozproszone   partycje,   możliwości   rozdzielania   obciążenia   na   różne 

serwery. Zwiększanie stopnia skalowalności w wyniku zwiększania liczby 
serwerów.

background image

Możliwość   automatycznej   synchronizacji   baz   danych   na   zapasowych 

serwerach bez względu na to, jak daleko się od siebie znajdują.

Możliwość   zainstalowania   baz   danych   przejmujących   zadania   w   razie 

awarii. Bazy danych mogą zostać przejęte przez dowolny funkcjonujący 
węzeł z grupy czterech komputerów.

Zarządzanie   klasterem   z   przejmowaniem   zadań   po   awarii.   Możliwość 

przeinstalowania   lub   przekonstruowania   dowolnego   węzła   z   klastera 
obsługującego   przejmowanie   zadań   bez   negatywnego   wpływu   na 

pozostałe węzły. Łatwe konfigurowanie przejmowania zadań na potrzeby 
replikacji i rozproszonych partycji.

Tworzenie indeksów perspektyw w celu zwiększenia wydajności obsługi 

istniejących   kwerend   bez   konieczności   przeprogramowywania. 
Przyspieszenie analiz i tworzenia raportów wykorzystujących perspektywy 

złożone.

Szybkie   sporządzanie   kopii   zapasowych   z   minimalnym   wpływem   na 

działanie   serwera   -   wystarczy   jedynie   kopiować   strony,   na   których 

wystąpiły   zmiany.   Bezproblemowe   tworzenie   kopii   zapasowych, 
praktycznie   bez   negatywnego   wpływu   na   pracę   serwera.   Szybkie 

odtwarzanie danych i tworzenie serwerów zapasowych.

Kreator   kopiowania   bazy   danych,   który   pozwala   na   przenoszenie   oraz 

kopiowanie bazy danych i obiektów między serwerami. 

Bibliografia.

1) William   R.   Stanek   „Microsoft   SQL   Serwer   2000   Vademecum 

Administratora” - Microsoft Press 2001.

2) Kalen Delaney “Microsoft SQL Serwer 2000” - Wydawnictwo RM 

2002.

3) “Understanading   SQL   Server   7.0   Replication”   –   dokumentacja 

MSsql Server.

4) Sean   Nolan,   Tom   Huguelet   “Microsoft   SQL   Server   7.0   Data 

Warehousing Training” – Microsoft Press.

5) Rebecca   M.   Riordan   “Microsoft   SQL   Serwer   2000 

Programowanie” – Wydawnictwo RM.

background image

6) Marlene Theriault, Rachel Carmichael, James Viscusi “Oracle9i. 

Administrowanie   bazami   danych   od   podstaw”   –   Wydawnictwo 
Helion 2003.

7) Ray Ranking, Paul Jansen, Paul Bertucci „Microsoft SQL Server 

2000 Księga Eksperta” – Wydawnictwo Helion 2003.

8) Kevin   Looney,   Marlene   Theriault   „Oracle9i.  Podręcznik 

administratora baz danych” – Wydawnictwo Helion 2003.

9) Robert   Wrembel,   Bartosz   Bębel   „Oracle.  Projektowanie 

rozproszonych baz danych” – Wydawnictwo Helion 2003.

10) Michał Lentner „Oracle 9i. Kompletny podręcznik użytkownika” 

Wydawnictwo   Polsko-Japońskiej   Wyższej   Szkoły   Technik 

Komputerowych 2002.

11) Ed   Whalen,   Mitchell   Schroeter   „Oracle.  Optymalizacja 

wydajności” – Wydawnictwo Helion 2003.