Oracle XE, Standard, Enterprise – którą wersję bazy danych

advertisement
XVII Konferencja PLOUG
Kościelisko
Październik 2011
Oracle XE, Standard, Enterprise – którą
wersję bazy danych wybrać aby nie
przepłacić
Mariusz Masewicz
e–mail: [email protected]
Abstrakt. Kupując licencję serwera bazy danych Oracle mamy do wybory wiele opcji. Począwszy od wersji Express Edition (XE),
poprzez warianty Standard Edition a na Enterprise Edition skończywszy. O wyborze wariantu droższego decyduje jego funkcjonalność,
natomiast za wariantem tańszym przemawia zdecydowanie niższa cena.
W tym artykule postaramy się przeanalizować możliwości poszczególnych wersji. Zastanowimy się nad tym, które z rozszerzeń dostępnych w droższej opcji są warte „grzechu”, a które nawet mimo ich braku w wersji tańszej dają się w pewnych sytuacjach zastąpić mniej
lub bardziej niekonwencjonalnym zastosowaniem mechanizmów z wersji niższej.
Coraz częściej zdarza się, że firmy staja przed kolejnymi wyznaniami dotyczącymi składowania, przeszukiwania, czy tez analizowania
danych. Aby sprostać tym wyznaniom potrzebują coraz wydajniejszych a przez to coraz bardziej wyrafinowanych mechanizmów. Najważniejsze z tych wyzwań, to zapewnienie wysokiej dostępności (Data Guard), wydajności (RAC), efektywnego składowania dużych
zbiorów danych (partycjonowanie), oraz ich efektywnego przeszukiwania (operacje równoległe). Do tego coraz częściej wdrażane są
rozwiązania typu Hurtownie Danych, dla których opracowano szereg wyrafinowanych mechanizmów zwiększania wydajności – od
indeksów bitmapowych począwszy, a na perspektywach zmaterializowanych z mechanizmem przepisywania zapytań skończywszy. Jeżeli
to tego dołożymy chęć ciągłego monitorowania systemu i automatyzacji procesu jego strojenia, to okazuje się, że komplet narzędzi może
zapewnić nam tylko licencja Enterprise z wykupionymi dodatkowymi pakietami.
Po wykonaniu analizy potrzebnych funkcjonalności nadchodzi moment refleksji – czy faktycznie to co oferuje najdroższa wersja wykorzystamy w 100% i czy przypadkiem nie można przynajmniej części z wymienionych powyżej funkcjonalności zasymulować stosując
prostsze mechanizmy?
W niniejszym artykule zebrano odpowiedzi na powyższe pytania. Zaprezentowano też rozwiązania, których wdrożenie pozwoliło zaoszczędzić sporo pieniędzy. Przy czym należy tu zaznaczyć iż w większości przypadków oszczędność taka nie oznaczała całkowitej rezygnacji z zakupu droższych wersji licencji. Wdrożenie proponowanych tu rozwiązań pozwoliło w kilku przypadkach na odsunięcie takiego
wydatku w czasie o kilka lat.
Oracle XE, Standard, Enterprise – którą wersję bazy danych wybrać aby nie przepłacić
65
1. Wersje, edycje, funkcjonalność, cena…
Obecnie możemy wybierać spośród 5 różnych wariantów licencji dla bazy danych Oracle. Różnią się one między sobą ceną, funkcjonalnością i zakresem zastosowań. Zgodnie z definicjami zawartymi w [ORA11gLIC] dostępne edycje to:
• Oracle Database Standard Edition – podstawowa wersja oprogramowania serwera bazy
danych Oracle, zapewniająca łatwe i efektywne zarządzanie składowanymi danymi. Licencja
pozwala na instalację oprogramowania wykorzystującą maksymalnie 4 procesory (w wariancie licencjonowania per-procesor). Ciekawostką jest fakt, iż te 4 procesory mogą stanowić
wyposażenie różnych komputerów połączonych przy pomocy Oracle Real Application
Clusters (Oracle RAC). Przeznaczona głownie dla małych i średnich zastosowań, gdzie nie są
wymagane zaawansowane funkcje dodawane w formie dodatkowych pakietów do wersji
Enterprise.
• Oracle Database Standard Edition One – funkcjonalność podobna jak w wersji Standard
Edition. Z głównych różnic należy tu wymienić ograniczenie liczby wykorzystywanych procesorów do 2 oraz brak możliwości stosowania RAC. Ograniczenie sprzętowe oraz brak możliwości skonfigurowania środowiska o podwyższonej niezawodności (RAC) sprawia, że jest
to doskonały wybór dla przechowywania i przetwarzania mniejszych zbiorów danych. Dodatkowym atutem tego rozwiązania jest jego zdecydowanie niższa cena niż wersji Standard
Edition.
• Oracle Database Express Edition – najmniejszy i najtańszy produkt z rodziny serwerów
baz danych Oracle. Posiadający funkcjonalność zbliżoną do wersji Standard Edition, ale dodatkowo ograniczoną możliwościami wykorzystania zasobów sprzętowych serwera (1 procesor, 1GB pamięci, 4GB1 lub 11GB2 danych użytkownika składowanych w tej wersji bazy danych). Największą zaletą tego produktu jest jego cena – a dokładniej jej brak, gdyż jest bezpłatny do praktycznie wszelkich zastosowań (w tym także komercyjnych). Idealna jako serwer dla małych baz danych – jako zamiennik współużytkowanych arkuszy kalkulacyjnych,
osobistych baz danych, ale także jako silnik dla małych serwisów WWW (zwłaszcza w połączeniu ze środowiskiem Oracle Application Express). Oracle nie oferuje wsparcia dla użytkowników tej wersji bazy danych.
• Oracle Database Enterprise Edition – największa i najdroższa wersja oprogramowania.
Oprócz tego co oferuje wersja Standard zawiera dziesiątki dodatkowych funkcjonalności,
które sprawiają, że jest to doskonały wybór dla dużych baz danych, lub też dla baz danych
w których wykonuje się zaawansowane operacje na danych. Rozbudowana funkcjonalność
może być dodatkowo rozszerzana przez szereg opcjonalnych pakietów i opcji: Oracle Active
Data Guard, Oracle Advanced Compression, Oracle Advanced Security, Oracle Data Mining,
Oracle Database Vault, Oracle In-Memory Database Cache, Oracle Label Security, Oracle
On-Line Analytical Processing (OLAP), Oracle Partitioning, Oracle RAC One Node, Oracle
Real Application Clusters (Oracle RAC), Oracle Real Application Testing, Oracle Spatial,
Oracle Total Recall. Niektóre z tych pakietów mają za zadanie ułatwić życie administratorom, inne z kolei dodają do serwera bazy danych funkcjonalność znacząco zwiększającą jej
funkcjonalność, niezawodność, czy wydajność. Niestety – praktycznie nieograniczone możliwości tego wariantu przeciwstawiane są zawsze jego wysokiej cenie powiększonej dodatkowo o koszty dodatkowych pakietów/opcji.
• Oracle Database Personal Edition – jak sama nazwa wskazuje – wersja przeznaczona do
wykorzystania przez jednego użytkownika – jako jego baza osobista, czy to jako serwer do
testowania tworzonych właśnie aplikacji, czy tez jako składnica prywatnych danych. Funk1
2
W wersji 10g XE
W wersji 11g XE
66
Mariusz Masewicz
cjonalnością odpowiada wersji Enterprise (z wyjątkiem tych, które wymagają współpracy
wielu serwerów: np. RAC, oraz zawaansowanych opcjonalnych pakietów ułatwiających administrację: Management Pack).
Jak wspomniano powyżej – podstawowym produktem, od którego należy rozpocząć rozważania
związane z zakupem licencji bazy danych Oracle jest zawsze wersja Standard Edition. Po przeanalizowaniu wszystkich potrzeb i skonfrontowaniu ich z możliwościami finansowymi można podjąć
decyzje o zakupie wersji Enterprise, a może o wyborze wersji XE. Dochodzi jednak do sytuacji,
w których potrzeby kierują nas w stronę wersji Enterprise, a budżet utrzymuje na poziomie wersji
XE. W dalszej części artykułu zostanie omówionych kilka metod, na całkowicie legalne „obejście”
ograniczeń licencyjnych występujących w wersjach niższych i pozwalających opóźnić zakup wersji
droższej.
2. Pierwsza migracja – z wersji XE do wersji Standard
Wersja Express Edition została przedstawiona we wstępie do tego artykułu jako świetny wybór
dla małych baz danych, do których dostęp mają pracownicy jednego departamentu. Jeżeli do tego
dołoży się środowisko Oracle Application Express – to uzyskuje się tanie i wydajne rozwiązanie,
które w wygodny sposób udostępnia składowane w nim dane.
W przypadku wersji XE dość szybko można się zetknąć z problemami związanymi z dość rygorystycznymi ograniczeniami nałożonymi na możliwość wykorzystania zasobów sprzętowych serwera. Jeden procesor i 1GB pamięci operacyjnej pozwolą na wydajne przetwarzanie niewielkich tabel,
w których liczba rekordów rzadko przekracza milion. O ile proste zapytania nie są tu problemem,
o tyle wszelkie operacje związane z łączeniem tabel, sortowaniem, wyliczaniem agregatów – które
najefektywniej wykonałyby się w pamięci operacyjnej serwera, tutaj ze względu na ograniczenia
będą musiały wykonywać się z wykorzystaniem tymczasowej przestrzeni tabel na dysku. Czy to
oznacza, że to rozwiązanie nie jest wydajne? Ależ skąd – wystarczy tylko zadbać o to, aby ilość
danych przetwarzana przez zapytanie była możliwie mała. A jak to osiągnąć?
• zbędne rekordy – o ile ciągle są potrzebne w bazie danych przenosić do tabelek przeznaczo-
nych na dane „archiwalne”, jeżeli jednak nie są w niczym potrzebne – usunąć z bazy danych.
Oczywiście najlepiej, gdy projekt aplikacji uwzględnia tego typu operacje na danych. Ale
w końcu każda baza (a dokładniej przygotowana dla niej aplikacja), nawet te słynące z super
wydajności w przetwarzaniu wielkich wolumenów danych, musi być przygotowana na to, że
kiedyś może ulec pod naporem zgromadzonych w niej danych,
• zadbać o utworzenie właściwych indeksów, przeliczenie statystyk – czyli tradycyjne metody
optymalizacji wykonywania pojedynczych zapytań, czy wręcz strojenia całej bazy danych.
Co jednak w przypadku kiedy problemem jest brak miejsca w bazie danych? W końcu
4GB/11GB to z jednej strony bardzo dużo – gdy mówimy o danych tekstowych, liczbach, czy datach, ale z drugiej strony bardzo niewiele, gdy wpadniemy na pomysł przechowywania w bazie
danych treści multimedialnych – obrazy, audio, czy wręcz wideo. Licencja i ograniczenia techniczne nie pozwolą na skonfigurowanie na serwerze kolejnych baz w wersji XE, żeby w ten sposób
uzyskać zwielokrotnienie dostępnej pojemności na dane użytkownika. Ale od czego jest wirtualizacja? Nic nie stoi na przeszkodzie aby zwielokrotnić liczbę serwerów i na każdym z nich zainstalować bazę danych w wersji XE. Nie łamiąc licencji możemy uzyskać w ten sposób praktycznie nieograniczoną pojemność. Otwartym pozostaje jednak pytanie, o sensowność tego rozwiązania
w którym, oszczędzając na kosztach licencji musimy zainwestować w zasoby sprzętowe w celu
zapewnienia odpowiedniego poziomu wirtualizacji oraz musimy stworzyć wydają i niezawodną
warstwę zarządzania takim ciekawym środowiskiem rozproszonego przetwarzania danych.
Czego w takim razie na pewno nie wolno nam zrobić z wersją XE? Nie można wykorzystać instalacji tej bazy danych jako metody obejścia ograniczeń licencyjnych dotykających wersje płatne.
Jednym z takich pomysłów jest wykorzystanie bazy danych Oracle XE i zbudowanej na niej aplika-
Oracle XE, Standard, Enterprise – którą wersję bazy danych wybrać aby nie przepłacić
67
cji WWW (na przykład w technologii APEX) jako serwera proxy do właściwej składnicy danych
jaką jest baza danych w wersji Standard/Enterprise w przypadku, gdy te „duże” bazy danych są
licencjonowane w modelu „na użytkownika”. Licencja bazy XE nie nakłada ograniczeń na liczbę
użytkowników korzystających z takiej bazy danych, natomiast licencje wersji płatnej w przypadku
modeli licencjonowania „na użytkownika” wyraźnie precyzują, czym w rozumieniu takiej bazy
danych jest użytkownik. W dużym skrócie jest każda osoba, system, urządzenie, … uzyskujące
dostęp do bazy danych. Jeżeli użytkownicy uzyskują dostęp do danych zgromadzonych w bazie
danych za pomocą serwera aplikacyjnego, czy innego mechanizmu Proxy, to wówczas użytkownikiem bazy danych nazywamy użytkownika takiego rozwiązania, nawet mimo tego, że serwer aplikacyjny uzyskuje dostęp do bazy danych z wykorzystaniem jednego współdzielonego konta użytkownika.
3. Wersja Standard – co zyskujemy
We wstępie do artykułu wspomniano, że wersja standard posiada funkcjonalność pozwalającą jej
na efektywne przetwarzanie zgromadzonych w niej danych. Jej funkcjonalność pozwala na bezpieczne i w miarę wydajne obsługiwanie powierzonych jej danych. Znajdziemy w niej:
• podstawowe struktury składowania i optymalizowania dostępu do danych – tabele relacyjne,
i indeksy typu B*-drzewo,
• dane możemy chronić przed utratą wykonując ich kopie zapasowe programem RMAN,
• dodatkowo pełna wersja Standard pozwoli na zbudowanie wydajnego i bezpiecznego klastra
– RAC,
• programiści będą mogli w swoich aplikacjach wydajnie wykorzystać możliwości tej wersji
bazy danych dzięki wsparci dla platformy .NET, Javy, czy PHP,
• jeżeli z różnych powodów przyjdzie nam do głowy replikować składowane dane – w cenę li-
cencji wliczono mechanizm standardowej replikacji bazującej na perspektywach materializowanych oraz mechanizm Streams,
• po dokupieniu dodatkowej licencji dla mechanizmu Oracle Gateways taką replikację będzie-
my mogli zdefiniować także między bazami pochodzącymi od innych dostawców (Microsoft,
IBM, Sybase, …).
W porównaniu do wersji XE otrzymujemy możliwość wykorzystania 4 razy większej liczby
procesorów, praktycznie nieograniczonej ilości pamięci operacyjnej (ograniczeniem są tu głownie
możliwości sprzętowe) i brak ograniczeń dotyczących rozmiaru składowanych danych.
Do powyższych zalet należy doliczyć możliwość skorzystania z pomocy asysty technicznej firmy Oracle – co w przypadku wielu zakupów decyduje właśnie o wyborze rozwiązań płatnych zamiast być może wystarczających funkcjonalnie, ale pozbawionych wsparcia produktów bezpłatnych.
Dużym atutem wersji Standard jest też opcja RAC wliczona w cenę licencji – nie mają jej wersje
„mniejsze” niż Standard, natomiast w przypadku wersji Enterprise za możliwość zbudowania klastra zwiększającego wydajność i niezawodność całego środowiska należy słono dopłacić, gdyż jest
on dodatkowo płatną opcją.
Wraz z licencją na dowolną płatną wersję bazy danych firma Oracle dodatkowo pozawala wykorzystać:
• narzędzie Oracle Internet Directory – jako mechanizm zarządzający danymi dla mechanizmu
Oracle Directory Naming (inne zastosowania OIDa mogą wymagać zakupu licencji na ten
produkt),
68
Mariusz Masewicz
• kontener aplikacji JEE – OC4J – jako silnik dla aplikacji Oracle Enterprise Manager (Data-
base Control i Grid Control), serwletów związanych z opcjami: Advanced Queuing, Ultra
Search, Application Express, oraz Warehouse Builder,
• serwer WWW – Oracle http Server – o ile jest on zainstalowany i skonfigurowany na tej sa-
mej maszynie ma której uruchomiono licencjonowaną wersję serwera bazy danych,
• dodatkową instalację bazy danych Oracle, o ile jest ona wykorzystywana tylko jako re-
pozytorium narzędzi: katalog odtwarzania RMAN oraz repozytorium Oracle Enterprise Manager Grid Control.
4. Wersja Standard – czego tu brakuje
Jak już wielokrotnie wspomniano – wersja Standard ma zapewniać podstawową funkcjonalność
serwera bazy danych. Wszystko to, co zdaniem twórców tej bazy danych stanowi wartość dodaną
do mechanizmów składowania, wyszukiwania, udostępniania danych – znalazło się w wersji Enterprise. Tak więc w wersji standard nie znajdziemy:
• zaawansowanych struktur wspierających składowanie i wyszukiwanie danych: klastry, tabele
indeksowe, indeksy bitmapowe, bitmapowe indeksy połączeniowe, mechanizmy przebudowywania indeksów i schematów tabel w czasie działania systemu (on-line), tabel i indeksów
partycjonowanych, brak tu także opcji kompresji danych,
• zaawansowanych mechanizmów wspierających tworzenie kopii zapasowych: kompresja nie-
używanych bloków, mechanizm śledzenia zmieniających się bloków, zwielokrotnionych zestawów kopii zapasowych, odtwarzania pojedynczych bloków danych, w tym także automatycznego odtwarzania bloków danych, mechanizmów ochrony przed nieprawidłowym zapisem danych, mechanizmów zrównoleglenia operacji tworzenia kopi zapasowych i ich odtwarzania, opcji związanych z mechanizmami Flashback,
• w zakresie podwyższonej niezawodności nie znajdziemy tu mechanizmów wspierających
utrzymanie zapasowej bazy danych zarówno na poziomie fizycznym (Redo Apply Data
Guard) jak i logicznym (SQL Apply Data Guard), nie wspominając już o wyrafinowanych
rozwiązaniach typu Active data Guard. Ograniczenie licencji Wersji Standard do 4 procesorów sprawiają, że także rozwiązanie RAC jest tu ograniczone do maksymalnie 4 węzłów
(każdy z jednym procesorem),
• optymalizator zapytań ma tu także ograniczone możliwości działania – nie znajdziemy tu
możliwości równoległego wykonywania zapytań, także nowo wprowadzone w wersji 11g
dodatkowe poziomy buforowania wyników zapytań i wyników działania funkcji PL/SQL:
w pamięci, czy z wykorzystaniem napędów Flash, a także po stronie klienta,
• mechanizmy bezpieczeństwa także często okazują się niewystarczające dla szczególnie wy-
magających zastosowań. Takie mechanizmy jak szyfrowanie danych w bazie danych, szyfrowanie komunikacji z klientem, szyfrowanie kopii bezpieczeństwa, silne uwierzytelnianie
znalazły się dopiero w dodatkowej opcji, którą można dokupić tylko do wersji Enterprise –
Advanced Security Option. Mechanizmy zaawansowanego uwierzytelniania opartego o etykiety, którymi oznaczono dane i użytkowników, oraz opcja izolująca administratorów od danych przechowywanych w bazie danych – Database Vault, to także opcje płatne. Do tego
możliwość oparcia mechanizmów bezpieczeństwa danych o drobnoziarnistą kontrolę dostępu, dająca wrażenia posiadania wirtualnych prywatnych baz danych, oraz audyt drobnoziarnisty, które co prawda już bez dodatkowej dopłaty, są dostępne tylko w wersji Enterprise,
• opcji ułatwiających zarządzanie, strojenie, zarządzanie konfiguracjami i zmianami, których
znaczenie zaczyna wzrastać wraz z rozrastaniem się środowiska bazodanowego w firmie.
Opcje te znajdziemy przeważnie jako dodatkowo, które należy dokupić do wersji Enterprise,
Oracle XE, Standard, Enterprise – którą wersję bazy danych wybrać aby nie przepłacić
69
• szeregu funkcjonalności bez których raportowanie, analiza danych, czy każda inna postać
udostępniania dużych wolumenów danych jest nieefektywna. Do tych funkcjonalności można
zaliczyć wspomniane już wcześniej partycjonowanie, wariacje na temat indeksów bitmapowych, mechanizmy przepisywania zapytań w oparciu o perspektywy materializowane, czy
indeksy funkcyjne, równoległe wykonywanie zapytań, ale także zrównoleglenie ładowania
danych przy pomocy pompy danych.
5. Druga migracja – z wersji Standard do wersji Enterprise
Rozwój bazy danych rzadko ma charakter rewolucyjny. Najczęściej mówimy o ewolucji już istniejącego systemu. Podczas takiej ewolucji oczywiście dojrzewamy do podjęcia decyzji o zakupie
wersji Enterprise. W tym rozdziale spróbujemy omówić opcje, których brak w wersji Standard najczęściej skutkuje podjęciem decyzji o migracji do wersji Enterprise.
O ile to możliwe spróbujemy zaproponować rozwiązania bazujące na funkcjonalności wersji
Standard, tak aby wprowadzić choć namiastkę zaawansowanej funkcjonalności z wersji Enterprise.
5.1. Partycjonowanie
Już podczas omawiania migracji z wersji XE do wersji Standard jako jeden z argumentów użyto
stwierdzeń, że zbyt duża ilość danych przetwarzanych w każdym wykonywanym zapytaniu nie
sprzyja wydajności. Jako jeden ze sposobów radzenia sobie ze zbyt dużą ilością danych w tabelach
przedstawiono zmiany w projekcie struktury bazy danych polegające na stworzeniu dodatkowych
tabel, do których będą przepisywane dane historyczne.
Rozwinięcie tej idei znajdziemy w opcji partycjonowania tabel. Opcja ta pozwala nam zdefiniować reguły na podstawie których serwer bazy danych decyduje w której z tabel umieścić wprowadzony, modyfikowany rekord. Przed użytkownikami zbiór tabel o identycznej strukturze plus zestaw reguł przyporządkowujących reguły do jednej z tabel jest prezentowany jako jedna spójna
struktura – tabela partycjonowana. Jest to mechanizm całkowicie przezroczysty dla aplikacji i o ile
aplikacja/użytkownik nie będzie świadomie próbował korzystać konkretnej partycji – to nie zauważy tego, ze korzysta z tabeli partycjonowanej.
Główne zalety mechanizmu partycjonowania to możliwość automatycznego rozdzielenia danych
w tabeli na kilka niezależnych tabel/partycji. Reguły tego podziału mogą być zdefiniowane w formie list wartości, lub zakresów do których dopasowujemy wartości wybranych kolumn w partycjonowanych tabelach. Dostępne są jeszcze mechanizmy partycjonowania opartego o wynik funkcji
hashującej lub też całkowicie bazujące na wskazaniu przez użytkownika wykonującego operacje na
danych. Można zdefiniować aż dwa poziomy partycjonowania tabel.
Najczęściej jako klucz partycjonowania przynajmniej na pierwszym poziomie wskazuje się takie
kolumny, których wartości podzielą dane z tabeli na niezależne grupy a podział ten będzie miał
znacznie z biznesowego punktu widzenia. Na przykład może to być rok powstania rekordu, lub
region z którego pochodzi klient opisywany w takiej partycjonowanej tabeli.
Jeżeli optymalizator widzi zapytanie sięgające do tabeli partycjonowanej i warunki selekcji
w zapytaniu opowiadają regułom zdefiniowanym dla pewnej grupy partycji to wygeneruje plan
wykonania zapytania pomijający te partycje, dla których ten warunek nie jest spełniony. Mechanizm ten nazywamy przycinaniem partycji. Jeżeli dodatkowo w zapytaniu uda się wykorzystać fakt,
że łączymy dwie tabele o podobnym kluczu partycjonowania i jeszcze powiążemy to z możliwością
zrównoleglenia procesu wykonania takiego zapytania, to wówczas jest spora szansa, ze optymalnie
wykorzystamy całą moc obliczeniową naszego serwera – łączymy efektywnie stosunkowo małe
porcje/partycje danych i dodatkowo robimy to obciążając wszystkie dostępne zasoby.
Oprócz partycjonowania tabel istniej także możliwość partycjonowania indeksów, przy czym
klucz partycjonowania indeksu może być identyczny jak tabeli partycjonowanej, lub też od niego
70
Mariusz Masewicz
różny. Mechanizmy partycjonowania tabel i indeksów mogą być wykorzystywane niezależnie od
siebie.
Jak zatem dodać mechanizm partycjonowania do wersji standard? Najprostsze rozwiązanie polega na utworzeniu szeregu tabel, do których będziemy wstawiać dane oraz zestawu kryteriów rozstrzygających o tym, do której tabeli będzie należał wiersz. Na przykład tabele: sprzedaz_2009,
sprzedaz_2010, sprzedaz_2011. Kolejnym etapem jest utworzenie perspektywy, która połączy
w sobie wyniki zapytania do wszystkich utworzonych tabel/partycji. Zapytanie może mieć postać:
select * from sprzedaz_2009
union all
select * from sprzedaz_2010
union all
select * from sprzedaz_2011
Dobrym pomysłem byłoby podpowiedzenie optymalizatorowi, że dla tabel/partycji zdefiniowaliśmy jakieś kryteria przynależności właśnie do tej partycji.
select * from sprzedaz_2009 where rok=2009
union all
select * from sprzedaz_2010 where rok=2010
union all
select * from sprzedaz_2011 where rok=2011
Zaproponowany mechanizm posiada większość cech partycjonowania dostępnego w wersji standard – kazda partycja jest niezależnym obiektem ze swoja polityka składowania danych. Łatwo jest
takie partycje dodawać i wyłączać z zakresu widoczności perspektywy udającej interfejs dostępu do
tabeli partycjonowanej. Jeżeli dodatkowo utworzymy indeksy w oparciu o poszczególne partycje –
to mamy namiastkę indeksów partycjonowanych. Problemem pozostają jedynie Operacje DML na
takiej „partycjonowanej” tabeli. Można to rozwiązać na dwa sposoby: albo dostarczyć wyzwalacza
instead-of i tym samym ukryć przed użytkownikiem fakt partycjonowania tabelki także na poziomie
tych operacji, albo poprosić użytkowników, żeby w przypadku operacji DML świadomie wstawiali
dane do właściwej tabeli/partycji będącej składową naszej tabeli partycjonowanej.
5.2. Perspektywy materializowane i przepisywanie zapytań
Kolejnym mechanizmem, bez którego nie może się obejść żadna porządna hurtownia danych jest
mechanizm przepisywania zapytań – w oparciu o częściowo przygotowane półprodukty (najczęściej
wyniki zapytań składowane w postaci perspektyw materializowanych, z całym dobrodziejstwem
tego mechanizmu: automatyczne odświeżanie, partycjonowanie, …).
Przepisywanie zapytań w wersji Enterprise polega na tym, że optymalizator dopasowuje zapytanie użytkownika do treści zapytań stanowiących definicje perspektyw zmaterializowanych i jeżeli
tylko znajdzie podobieństwa, to stara się wykorzystać taka perspektywę jako źródło dla zmodyfikowanej wersji zapytania – uwzględniającej już to, że dane zamiast czytać wprost z tabel wymienionych w zapytaniu, czyta z perspektywy materializowanej.
Jeżeli uwzględni się fakt, iż taka perspektywa materializowana może być zdefiniowana przez
skomplikowane zapytanie zawierające w sobie różnego rodzaju agregaty, czy wyniki łączenia tabel,
to zastosowanie mechanizmu przepisywania zapytań może przynieść ogromne korzyści, zwłaszcza
w systemach analitycznych.
Jak w takim wypadku symulować działanie mechanizmu przepisywania zapytań? Wersja Standard oferuje co prawda mechanizm perspektyw materializowanych, ale są one tu traktowane jako
element rozwiązań związanych z replikacją danych a nie optymalizacją zapytań. Sprawę komplikuje
też fakt, że w zasadzenie nie istnieje mechanizm pozwalający poznać i zmodyfikować zapytanie
użytkownika zanim zostanie ono zrealizowane. Pozostaje więc podejście stosowane od dawna
w tego typu sytuacjach – poinformowanie programistów o tym, ze przygotowaliśmy szereg perspektyw materializowanych zawierających dane przetwarzane w aplikacjach i niech programiści
Oracle XE, Standard, Enterprise – którą wersję bazy danych wybrać aby nie przepłacić
71
zadbają o to, że ich zapytania korzystają właśnie z perspektyw materializowanych a nie sięgają do
danych źródłowych.
W zaproponowanym podejściu nie mamy gwarancji na to, że programiści poprawnie skorzystają
z przygotowanych dla nich struktur zawierających zagregowane dane. O ile oczywiście w ogóle
skorzystają z takich podsumowań.
5.3. Równoległe wykonywanie zapytań
Zrównoleglenie wykonania zapytania w wielu przypadkach pozwala znacząco skrócić czas
oczekiwania na jego zakończenie. Aby takie zrównoleglenie przynosiło zauważalne efekty muszą
zostać spełnione pewne warunki:
• serwer musi dysponować wolną mocą obliczeniową (przepustowość urządzeń I/O, nieobcią-
żone procesory),
• zapytania muszą być dostatecznie złożone,
• ilości przetwarzanych danych muszą być odpowiednio duże. Wynika z tego, że nie ma sensu
zrównoleglić zapytania, które ma za zadanie zwrócić jeden wiersz, do którego dotrze przy
pomocy indeksu.
Brak opcji zrównoleglenia zapytań w wersji standard można spróbować zrekompensować sobie
dzieląc zakres danych przeglądanych przez zapytanie na mniejsze porcje, po czym w wielu sesjach
jednocześnie uruchomić zapytania przetwarzające fragment danych. Na koniec należy oczywiście
skonsolidować wyniki zwrócone przez te zapytania. Jako mechanizm podziału tabel na mniejsze
porcje doskonale sprawują się partycje w przypadku tabel partycjonowanych.
Jak łatwo można wywnioskować – powyższe rozwiązanie dla wersji Standard ma szanse sprawdzić się w przypadku przetwarzania wsadowego, gdzie odpowiednio spreparowane skrypty mogą
symulować równoległość. Niestety nie jesteśmy w stanie zaimplementować tego rozwiązania jako
mechanizmu chociażby częściowo przezroczystego dla aplikacji.
5.4. Wysoka wydajność i niezawodność
Jak już wielokrotnie wspomniano – wersja standard pozwala uruchomić bazę danych w środowisku w którym jest ona obsługiwana przez jedną do czterech instancji uruchomionych w tym ostatnim przypadku na czterech różnych serwerach. Rozwiązanie takie oferuje nam wzrost niezawodności środowiska, gdyż w razie awarii jednego z serwerów pozostałe węzły klastra przejmują na siebie
jego obowiązki. Wadą rozwiązań typu RAC jest jednak to, że wymagają one tego aby baza danych
była utrzymywana w jednej kopi – wspólnej dla wszystkich instancji obsługujących dane. Ta
wspólna baza danych jest tutaj najsłabszym ogniwem – pojedynczym punktem awarii. Sprawę ratuje tu fakt, że obecnie urządzenia na których składowane są dane to kontrolery macierzy dyskowych
zapewniające silne mechanizmy niezawodnego dostępu do danych (redundancja, sumy kontrolne, …). Wersja Enterprise oferuje rozwiązania pozwalające skonfigurować całkowicie niezależną
zapasową bazę danych – Data guard. W dużym skrócie oferowane są tam 3 warianty środowiska
z zapasową bazą danych.
5.4.1. Fizyczny Data guard
W tym rozwiązaniu pracuje tylko baza Głowna kopia bazy danych. Kopia zapasowa jest idealną
kopią bazy danych głównej (uruchomiona w trybie „przywracania nośników” – czyli oczekuje na
logi transakcyjne z systemu głównego. Logi takie mogą być dostarczane na bieżąco, lub jako zarchiwizowane pliki dziennika powtórzeń. W sytuacji awaryjnej baza zapasowa jest w stanie przejąć
obciążenie bazy podstawowej.
W wersji standard można zasymulować działanie podobnego mechanizmu. Należy w tym celu
w środowisku zapasowym uruchomić kopię bazy danych trybie przywracania no ścinków (recovery
72
Mariusz Masewicz
until cancel). Następnie ręcznie należałoby dostarczać zarchiwizowane pliki dziennika powtórzeń
wyprodukowane przez bazę podstawową (proces dostarczania można oczywiście w dowolny sposób zautomatyzować).
W proponowanym rozwiązaniu otwarte pozostaje pytanie o licencje dla bazy danych w centrum
zapasowym – w wersji Enterprise sprawy te zostały uregulowane i obecnie i baza główna i baza zapasowa wymagają osobnej licencji.
5.4.2. Logiczny Data guard
W przypadku logicznego Data guarda obie bazy danych pozostają otwarte i w obu może odbywać się ruch transakcyjny. Zakłada się tu jednak, że tabele replikowane z głównej bazy danych do
zapasowej są modyfikowane tylko po stronie bazy głównej. Mechanizmy Data guarda dbają tu jedynie o to, aby polecenia, które wykonały się po stronie systemu głównego zostały powtórzone po
stronie systemu zapasowego.
W przypadku baz Standard Edition nic nie stoi na przeszkodzie, aby takie zachowanie zasymulować przy pomocy mechanizmów replikacji bazujących na przykład na Oracle Streams.
Głowna wada takiego symulowania działania logicznego Data guarda jest to, że trudno jest uzyskać rozwiązanie, które da nam gwarancje, że wszystkie zatwierdzone zmiany w bazie źródłowej
zostały przeniesione do bazy docelowej.
5.4.3. Aktywny Data guard
Jest to rozwiązanie stosunkowo nowe (wprowadzone w wersji 11g), pozwalające na pełne uruchomienie zarówno bazy podstawowej, jak i zapasowej. Zmiany wprowadzane w każdej z nich są
automatycznie przenoszone także do drugiej bazy danych. Rozwiązanie to pozwala w pełni wykorzystać moc obliczeniową obu serwerów (głównego i zapasowego).
Jak zaimplementować to rozwiązanie samodzielne bazując tylko i wyłącznie na mechanizmach
oferowanych w wersji standard? Tutaj niestety rozwiązanie wymaga sporej ilości kodowania
w języku PL/SQL, stworzenia szeregu tabel pomocniczych, wykorzystania wyzwalaczy wykrywających zmiany po stronie źródła i stworzenia mechanizmu dostarczania powiadomień o tych zmianach do systemu docelowego.
5.5. Kompresja
Kompresja danych w bazach danych ma za zadanie zmniejszenie rozmiaru tabel, a tym samym
zmniejszenie obciążenia systemu I/O podczas operacji odczytu danych z tabeli. Przeważnie okupione jest to dodatkowym kosztem wynikającym z konieczności kompresowania i dekompresowania
danych przez procesory serwera bazy danych.
Wersja Standard w zasadzie nie oferuje żadnych mechanizmów kompresji danych. Znajdziemy
je dopiero w wersji Enterprise jako opcje standardowej kompresji oraz dodatkowo płatny pakiet
zaawansowanej kompresji.
Nic nie stoi jednak na przeszkodzie, aby to nasza aplikacja wysyłając dane do serwera wysyłała
je od razu w wersji skompresowanej. Takie podejście ma jednak tą zasadniczą wadę, że baza danych widzi tylko i wyłącznie skompresowaną wersję danych, a więc nie może na przykład stworzyć
efektywnych indeksów wspierających wyszukiwanie zakresowe.
Można też sobie wyobrazić rozwiązanie pośrednie – czyli stworzenie własnych procedur/funkcji
odpowiedzialnych za szyfrowanie i składowanych w bazie danych. Ale i to rozwiązanie niewiele
zmienia jeżeli chodzi o wsparcie dla mechanizmów wydajnego przetwarzania, wyszukiwania, czy
porównywania tak skompresowanych danych.
Oracle XE, Standard, Enterprise – którą wersję bazy danych wybrać aby nie przepłacić
73
5.6. Szyfrowanie
Podobnie jak w przypadku kompresji, taki w przypadku szyfrowania – w bazie danych w wersji
Standard nie znajdziemy żadnego wsparcia dla szyfrowanie. A jeżeli chodzi o szyfrowanie, to pomysłów tutaj można mieć sporo – od szyfrowania pojedynczych komórek, poprzez szyfrowanie
całych kolumn, tabel, czy wręcz bazy danych. Do tego cały fakt szyfrowania danych w bazie danych może być zupełnie przezroczysty dla użytkowników, gdyż w odpowiedzi na ich zapytania
baza danych może zwracać im dane w wersji już odszyfrowanej. Do tego dochodzi bezpieczne bo
szyfrowane połączenie z klientem i na przykład obsługa szyfrowania podczas tworzenia kopii zapasowych. Podobnie jak w przypadku kompresji – w zasadzie wszystko co dotyczy szyfrowania
znajdziemy dopiero w wersji Enterprise a dokładniej w dodatkowo płatnym pakiecie zaawansowanego bezpieczeństwa.
I znów, podobnie jak w przypadku kompresji danych – jeżeli do wersji Standard chcielibyśmy
dołożyć szyfrowanie danych składowanych w bazie danych – to musimy to obsłużyć na poziomie
aplikacji klienckiej – z wszelkimi zaletami takiego rozwiązania (szyfrujemy co chcemy i jak chcemy) oraz z jego wadami (baza danych zna tylko zaszyfrowane wersje danych, więc pewne właściwości na przykład indeksów nie mogą być wykorzystywane). Pomysł z szyfrowaniem za pomocą
składowanych procedur czy funkcji tez można tu rozważyć pamiętając, że nie likwiduje on wad
szyfrowania przez aplikację – zmienia się tylko miejsce w którym to szyfrowanie jest wykonywane,
a tym samym dodatkowe obciążenie związane z szyfrowaniem przejmuje na siebie serwer bazy
danych.
Gdy myślimy o szyfrowaniu połączenia z bazą danych – to pakiet zaawansowanego bezpieczeństwa gwarantuje nam to szyfrowanie na poziomie protokołu SQL*Net. Alternatywą jest szyfrowanie transmisji na poziomie na przykład protokołu TCP, gdzie znamy cały wachlarz rozwiązań bazujących na VPN, tunelowaniu, czy sprzętowych szyfratorach.
Podobnie wygląda sytuacja z tworzeniem kopi bezpieczeństwa – pakiet zaawansowanego bezpieczeństwa pozwoli nam uzyskać zaszyfrowana kopie już na wyjściu z narzędzia RMAN (wspierając na różne sposoby fakt, że w bazie danych mamy zaszyfrowane na przykład tylko wybrane kolumny). Ale nic nie stoi na przeszkodzie, żeby szyfrować takie kopie zaraz po wyjściu z narzędzia
RMAN, albo wręcz wyjście z narzędzia RMAN przesłać do programowego lub sprzętowego szyfratora, jeszcze zanim przybierze postać pliku wynikowego na dysku twardym, czy też taśmie magnetycznej.
Podsumowanie
Celem artykułu było wskazanie najważniejszych różnic funkcjonalnych pomiędzy poszczególnymi wersjami bazy danych Oracle – począwszy od wersji XE, poprzez wersję Standard, a na Enterprise skończywszy. W artykule zwrócono uwagę na mocne strony każdej z opcji, która pojawia
się w droższych wersjach serwera bazy danych. Wskazano także mechanizmy, których wdrożenie
pozwoliłoby w pewnym sensie zrekompensować brak tych mocnych elementów w słabszych wersjach bazy danych. Często jest tak, że takie wdrożenie pozwala na pewien czas odsunąć myśl o migracji z wersji słabszej na wersję mocniejszą. Czasami jednak koszt wdrożenia i utrzymania zaproponowanych rozwiązań może znacząco przewyższyć koszty związane z zakupem droższej, ale bardziej funkcjonalnej wersji bazy danych. Ważne jest jednak to, że składając zapotrzebowanie na
zakup droższej wersji jesteśmy w stanie przedstawić decydentom alternatywne rozwiązania wraz
z ich mocnymi i słabymi stronami.
Bibliografia
[ORA11gLIC]
Oracle® Database Licensing Information 11g Release 2 (11.2) – Part Number E10594-17.
Download