Systemy Baz Danych (cz 1 3)

background image

1

Systemy Baz

Systemy Baz

Danych

Danych

(cz. 1.3)

(cz. 1.3)

Prof. dr hab.

Prof. dr hab.

inż

inż

. Sławomir Wiak

. Sławomir Wiak

background image

2

Oracle 8/9

Oracle 8/9

background image

3

System Oracle powstał w wyniku zamówienia

Stanów Zjednoczonych, w firmie Relational

Software Incorporated z Menlo Park w Kalifornii w

roku 1977. Firma postawiła sobie za cel

uruchomienie systemy na dużej gamie platform

komputerowych

Z chwilą osiągnięcia sukcesu firma zmienił nazwę

na Oracle Corporation.

Firma dba o ciągły rozwój systemu, wzbogacając

kolejne wersje o coraz to nowe produkty.

Oracle Corporation jest dziś patentatem na rynku

producentów oprogramowani. Jej dochody sytuuja

ją na trzecim miejscu na świecie, a bezpośrednia

działalność firmy obejmuje ponad 100 krajów.

Sukces polega na tym iż dobrze opracowane bazy

danych w znaczący sposób podnoszą jakość

zarządzania przedsiębiorstwami i instytucjami.

background image

4

Współczesne SZBD składają się z trzech części:

jądra, interfejsu i zestawu narzędzi.

jądra, interfejsu i zestawu narzędzi.

Rysunek ilustruje architekturę systemu ORACLE.

Jądro relacyjnej bazy danych jest wyposażone w

takie funkcje, jak

kontrola współbieżności

,

zarządzanie

transakcjami

,

zarządzanie

słownikiem i zapytaniami.

Dostęp do jądra uzyskuje się za pomocą

odpowiedniej

wersji standardu SQL

. Różne

funkcje SQL są zebrane w narzędzia:

background image

5

SQL*DBA

zawiera

funkcje

potrzebne

administratorowi bazy danych (DBA) do tworzenia,
utrzymywania, uruchamiania, zatrzymywania i
odtwarzania bazy danych.

SQL*Plus

jest interakcyjnym interpreterem SQL

używanym głównie do tworzenia i testowania
instrukcji SQL.

PRO*SQL

dostarcza sposobów integrowania SQL ze

standardowymi językami programowania, takimi jak
C, Fortan, Cobol.

ORACLE Forms

jest narzędziem do tworzenia

aplikacji opartych na formularzach. Używa się go
głównie do tworzenia ekranów do wprowadzania lub
wyszukiwania danych. Z tych ekranów mogą być
bezpośrednio wywoływane obiekty baz danych, np.
programy PL/SQL i wyzwalacze.

background image

6

ORACLE

Graphics

może

być

użyty

do

automatycznego

konstruowania

graficznych

prezentacji

(np.

wykresów

słupkowych,

liniowych i kołowych) dla danych, które są
wynikiem wykonania zapytania na bazie
danych.

ORACLE Reports

jest pakietem do generowania

złożonych raportów

ORACLE TextRetrieval

jest narzędziem, które

dostarcza

sposobów

zarządzania

niestrukturalnymi danymi, np. tekstami i
obrazami

background image

7

SQL*plus

Jądro

Oracle Graphics

Oracle TextRetrieval

SQL*DBA

PL/SQL

Oracle Forms

ORACLE

PRO*SQL

background image

8

Architektura

danych

ORACLE

odwzorowuje

logiczne tabele na fizyczne pliki. Baza danych
ORACLE zawiera przynajmniej 2 pliki dziennika
powtórzeń, przynajmniej 2 pliki kontrolne i
dowolną liczbę plików z danymi.

Plików z danymi używamy

do przechowywania

wszystkich możliwych obiektów baz danych
obsługiwanych przez system ORACLE. Pliki
dziennika powtórzeń rejestrują historię zmian
dokonywanych

na

bazie

danych

przez

transakcje.

Pliki

kontrolne

przechowują

podstawowe

informacje na temat bazy danych ORACLE, na
przykład nazwy wszystkich plików z danymi i
wszystkich plików dziennika powtórzeń.

background image

9

Architekturę oprogramowania ORACLE

możemy

podzielić

na

dwa

podstawowe

składniki:

instancję ORACLE

i

zbiór powiązanych procesów

serwera ORACLE

.

Instancja ORACLE składa się ze zmiennego obszaru

pamięci podręcznej bazy danych, nazywanego
globalnym obszarem systemu, w skrócie

SGA

(System Global Area)

wraz ze zbiorem procesów

drugoplanowych, z których każdy wykonuje
specjalne zadanie w bazie danych.

Procesy serwera ORACLE tworzymy do obsługi

zadań użytkowników lub procesów użytkowników
połączonych z instancją. Zazwyczaj w jednej
chwili kilka z tych procesów jest aktywnych.

background image

10

DBA i programiści aplikacji

mogą

dostrajać działanie ORACLE na wiele
sposobów. Na przykład optymalizacja
zapytania metodą opartą na koszcie jest
wartością domyślną w ORACLE7.

Możemy jednak zmienić to ustawienie na

metodę opartą na heurystyce – zarówno
na początku każdej sesji ORACLE, jak i
do wykonania konkretnego zapytania
SQL.

background image

11

Architektura klient/serwer

Architektura klient/serwer

Przesłanką architektury klient/serwer

jest podział

wykonywania zadań pomiędzy kilka procesorów

znajdujacych się w sieci. Każdy processor jest

dedykowany do określonego zbioru zadań, które

jest w stanie wykonywać najefektywniej, co w

rezultacie

daje

zwiększenie

wydajności

i

skuteczności systemu jako całości.

Rozdzielenie

wykonywania

zadań

pomiędzy

procesory jest dokonywane poprzez

protokół

usług

: jeden procesor, klient, zleca pewną

usługę

drugiemu

procesorowi

zwanym

serwerem, który ma tę usługę zrealizować.

Najbardziej

powszechną

implementacją

architektury klient/serwer

jest odseparowanie

części aplikacji będącej interfejsem użytkownika

od części odpowiedzialnej za dostęp do danych.

background image

12

Oracle Corporation a architektura klient

serwer

W pełni wydajny

relacyjno-

obiektowy

system

zarządzania bazą

danych,

skalowalny

poczynając od

maszyn typu

laptop a kończąc

na maszynach

typu mainframe

Narzędzia

klienckie do
tworzenia

aplikacji dla baz

danych,

wspierających

różnorodne

środowiska GUI (
Oracle Developer

i Oracle

Designer)

Narzędzia sieciowe

umożliwiające

wydajne i

bezpieczne

połączenie się z

bazą wśród wielkiej

gamy protokołów

sieciowych.

(SQL*Net, Oracle

Names,

Multi_Protocol

Interchange, Oracle

Network Manager

background image

13

Dwuwarstwowa architektura klient

Dwuwarstwowa architektura klient

serwer

serwer

background image

14

Trójwarstwowa architektura klient

serwer

background image

15

Architektura serwera bazy danych Oracle

Serwer Oracle’a

Serwer Oracle’a to zarówno środowisko, w którym

pracuje baza jak i pliki tworzące bazę danych. Ta
platforma systemowa, jaką jest serwer baz
danych musi odpowiadać coraz większym
wymaganiom użytkowników w stosunku do
programów obsługujących dane składowanie w
systemach

informatycznych.

Obiektowo-

relacyjna baza danych Oracle zapewnia wydajne
i efektywne rozwiązania w zakresie:

realizacji pracy w środowisku klient-serwer
(przetwarzanie rozproszone)

background image

16

Aby w pełni wykorzystywać możliwości komputerów

i sieci komputerowych, Oracle umożliwia podział
funkcjonalny przetwarzania danych na część
kliencką i serwerową. Komputer-serwer, na
którym

uruchomione

jest

oprogramowanie

zarządzające danymi, zapewnia pełną obsługę
składowanych

danych

w

czasie,

gdy

na

komputerze-kliencie uruchomione są aplikacje
interpretujące pozyskane z bazy dane.

składowania i zarządzania dużymi bazami danych

Oracle obsługuje bazy danych osiągające rozmiary

terabajtów.

Aby

zapewnić

zadowalającą

wydajność pracy z tak dużymi zbiorami danych,
oprogramowanie serwera zapewnia możliwość
pełnej kontroli nad procesem ich składowania.

background image

17

obsługi wielu jednoczesnych użytkowników

Serwer Oracle umożliwia jednoczesną pracę wielu

użytkowników bazy, korzystających z różnych
aplikacji operujących na tym samym zbiorze
danych.

możliwości przenoszenia

Oprogramowanie Oracle’a pracuje na wielu typach

komputerów

i

pod

wieloma

systemami

operacyjnymi.

zapewniania dużej dostępności danych

Często zdarza się, że baza danych musi pracować

24 godziny na dobę. Instalacja Oracle’a daje taką
możliwość, nie ma konieczności wprowadzania
przerw w pracy bazy związanych z czynnościami
takimi jak wykonywanie kopii zapasowych czy
usuwanie drobnych uszkodzeń systemu.

background image

18

zapewnienia możliwości kontroli dostępu do

danych

Serwer Oracle’a umożliwia selektywną kontrolę

dostępności danych.

otwarcia na standardy przemysłowe

Oracle stara się dostosować do przemysłowych

standardów

obowiązujących

w

dziedzinie

dostępu do danych, systemów operacyjnych,

interfejsów

użytkownika

oraz

komunikacji

sieciowej.

W

celu

ułatwienia

zarządzania

serwerami

pracującymi

w

heterogenicznym

środowisku, z jednej konsoli administratora

systemu zaimplementowany został protokół

Simple Network Management Protocol (SNMP).

wymuszania spójności danych

Serwer Oracle’a wymusza spójność danych poprzez

zbiór reguł zdefiniowanych w bazie określających

zasady korzystania z danych przez wielu

użytkowników jednocześnie.

background image

19

Rozwiązanie to redukuje koszty utrzymania spójności

danych podczas budowy aplikacji opartych na bazie

Oracle.

możliwości przenoszenia i zgodności oprogramowania

Oprogramowanie

Oracle’a

pracuje

pod

wieloma

systemami

operacyjnymi.

Aplikacje

budowane

narzędziami

Oracle’a

zgodne

z

wieloma

przemysłowymi standardami, mogą być przenoszone

pomiędzy systemami operacyjnymi bez konieczności

wprowadzania zasadniczych zamian programowych.

realizacji przetwarzania rozproszonego

W środowisku rozproszonego przetwarzania sieciowego

Oracle umożliwia łączenie danych, składowanych

fizycznie na różnych komputerach, w jedną pod

względem logicznym bazę danych. Taki system

rozproszony, z punktu widzenia użytkownika, niczym

nie różni się od nierozproszonej bazy danych.

Możliwy jest również transparentny dla użytkownika

dostęp do innych niż Oracle źródeł danych.

background image

20

replikacji danych

Oprogramowanie

Oracle’a

umożliwia

wiele

rodzajów replikacji wybranych obiektów lub

zbiorów

danych

do

innych

baz

danych

znajdujących

się

w

obrębie

jednej

sieci

komputerowej.

Struktura bazy danych Oracle

Aby system Oracle był użyteczny potrzebna jest

baza danych i instancja. Baza danych to

zorganizowany zbiór danych przechowywany w

plikach danych, instancja to szereg procesów i

obszarów pamięci, które umożliwiają dostęp do

danych. Złożony system zarządzania relacyjną

bazą danych (ang. RDBMS – relational database

managment system) Oracle można podzielić na

trzy prostsze części (patrz rysunek ):

background image

21

procesy pracujące w tle;

obszary pamięci współdzielonej;

przestrzeń składowania danych na dysku.

Obszary

pamięci

Procesy

Pliki danych

Oracle

RDBMS

Narzędzia tworzenia

aplikacji

Aplikacje

Narzędzia realizacji

zapytań

Interfejsy sieciowe

Części składowe RDBMS Oracle

background image

22

Procesy systemu Oracle

Oracle,

podobnie

jak

większość

innych

wieloużytkowych systemów zarządzania bazą
danych,

wykorzystuje

szereg

procesów

pracujących w tle, by umożliwić zapis danych.
Rozdział zadań na wiele procesów pozwala
zmniejszyć złożoność każdego z tych procesów.
Procesy te można przyrównać do szeregu
specjalistów, z których każdy pracuje nad
wybranym zagadnieniem. Głównymi procesami
serwera Oracle są:

Proces DBWR,

Proces LGWR,

Proces PMON,

Proces SMON.

background image

23

Te cztery główne procesy w połączeniu z

odpowiednimi obszarami pamięci tworzą
instancję bazy danych.

Obszary pamięci

DBWR

LGWR

PMON

SMON

Pliki danych

Pliki dziennika

powtórzeń

Główne procesy serwera Oracle

background image

24

Aby zapewnić sobie kontrolę nad poszczególnymi

różnorodnymi

procesami,

Oracle

używa

identyfikatora

systemu

SID

(ang.

System

IDentifier

), który jest najważniejszym parametrem

przy połączeniach z daną instancją bazy danych.

DBWR

-

(ang.

Data Base Writer

) – proces zapisujący

dane wprowadzane przez użytkowników do bazy z
buforów SGA do plików dyskowych; Fizyczny zapis
danych na dysk odbywa się, gdy

Data Base Writer

:

nie znajduje w SGA odpowiedniej liczby wolnych
buforów potrzebnych do bieżącej pracy bazy;

upłynął odpowiednio długi okres bez zapisów (ma
to miejsce przy małej aktywności użytkowników
bazy);

w bazie wykonuje się tzw. CHECKPOINT – czyli
punkt kontrolny – i baza wymusza zapis wszystkich
istotnych informacji z obszaru SGA do plików
dyskowych.

background image

25

Proces ten zmniejsza liczę fizycznych zapisów na dysku,

co przyspiesza pracę bazy i czyni ją bardziej płynną.
Nie trzeba dzięki temu tracić czasu na zapisywanie na
dysku zmian wprowadzonych przez każdego
użytkownika z osobna. Baza wykonuje tę czasochłonną
operację raz na jakiś czas.

LGWR

– (ang.

LoG Writer

) – proces zapisujący pliki

dziennika powtórzeń, czyli historię wszystkich operacji
na bazie. Proces ten uaktywnia się, gdy:

następuje potwierdzenie transakcji przez użytkownika
(COMMIT);

bufory dziennika w SGA są zapełnione w jednej
trzeciej;

DBWR czyści bufory bazy danych;

w bazie wykonywany jest CHECKPOINT;

upłynął odpowiednio długi okres bez zapisów;

baza przygotowuje się do przeprowadzenia transakcji
rozproszonej

background image

26

W instancji Oracle’a może istnieć tylko jeden proces

LGWR.

PMON

– (ang.

Process MONitor

) – monitor procesów

trzymających

pieczę

nad

zasobami

bazy

wykorzystywanymi przez użytkowników bazy. W
praktyce często zdarza się, iż kilku użytkowników bazy
sięga jednocześnie po te same dane. Nie stanowi to
problemu, gdy użytkownicy chcą jedynie oglądać ten
sam fragment bazy. Kłopoty zaczynają się wtedy, gdy
kilku użytkowników jednocześnie chce modyfikować,
na przykład ten sam wiersz. Aby baza zachowała
spójność

istnieje

system

blokad

(LOCK)

zapewniających, że w danej chwili tylko jeden
użytkownik bazy może modyfikować wybrany przez
siebie wiersz. Pozostali użytkownicy muszą czekać na
zakończenie tej operacji.

Process Monitor

zajmuje się

właśnie odzyskiwaniem zasobów bazy zwolnionych
przez użytkowników.

background image

27

Do jego zadań należy:

usuwanie nieprawidłowo zakończonych połączeń;

wycofywanie niezatwierdzonych transakcji;

zwalnianie blokad założonych przez zatwierdzone

procesy;

wykrywanie wewnętrznych zakleszczeń pomiędzy

blokadami zakładanymi na dane bazy i automatyczne

wycofywanie transakcji.

SMON

– (ang.

System MONitor

) – monitor systemu

utrzymujący „porządek” w SGA. Do jego obowiązków

należy:

usuwanie

niepotrzebnych

segmentów

tymczasowych;

wykonywanie automatycznego odtwarzania instancji;

aktualizowanie pliku kontrolnego bazy;

dynamiczne scalanie obszaru pamięci operacyjnej

zajmowanej przez serwer.

background image

28

Zarówno

PMON

, jak i

SMON

działają w bazie

asynchronicznie

i

nie

można

wymusić

ich

aktywności zewnętrznie. Nie można też wpływać na
ich

pracę

przez

zmianę

parametrów

pliku

startowego

bazy.

Ani

użytkownik,

ani

jej

administrator nie wiedzą, kiedy procesy te są
aktywne, a kiedy nie.

W instancji Oracle’a oprócz ww. procesów głównych

mogą także pracować inne procesy pomocnicze.
Zależy to od zadań, jakie baza spełnia, a także od
jej wewnętrznej konfiguracji. Zapewniają one bazie
spójność danych i zwiększają bezpieczeństwo jej
zasobów. Najważniejsze to:

ARCH

– (ang.

ARCHiver process

) – to proces

dokonujący automatycznego archiwizowania plików
dziennika powtórzeń, co umożliwia, na przykład
odtworzenie bazy do stanu przed awarią.

background image

29

RECO – (ang. RECOvery)

– odpowiada za odtwarzanie

rozproszone.

Obsługuje

błędy

transakcji

rozproszonych przez próbę ponownego połączenia.
Proces uaktywniany tylko w przypadku korzystania
z rozproszonych baz danych.

SNPn – (ang. SnaPshot)

– obsługuje automatyczne

odświeżanie replikacji zdalnych tablic (migawek –
ang. snapshot
). Proces aktywny tylko w przypadku
korzystania z opcji rozproszonej.

LCKn – (ang. LoCK)

– kontroluje blokady pomiędzy

instancjami serwera równoległego. Używany tylko
w trybie serwera równoległego.

CKPT – (ang. ChecKPoinT process)

– wymusza

uaktualnienie wszystkich fizycznych plików bazy o
informacje znajdujące się aktualnie w buforach
SGA.

background image

30

Snnn

– proces serwera dzielonego (ang.

Shared

serwer

), występujący przy konfiguracji serwera

wielokanałowego, wykonujący polecenia z kolejki

żądań.

Dnnn

– proces rozdzielający (ang.

Dispatcher

),

występujący

przy

konfiguracji

serwera

wielokanałowego, pośredniczący pomiędzy procesami

użytkowników a kolejkami żądań i odpowiedzi.

Obszary pamięci współdzielonej

Pamięć współdzielona jest kluczowym czynnikiem

rzutującym na wydajność systemu RDBMS Oracle.

Przez system Oracle wykorzystywane są obszary

pamięci tj.:

obszar kodu programu;

obszar globalny systemu (SGA);

obszar globalny programu (PGA);

obszary sortowania.

background image

31

background image

32

Obszar kodu programu:

Obszar ten przechowuje

właściwy kod programu dla systemu bazy danych

Oracle. Obszar ten może być współdzielony

pomiędzy instancjami. Jest to program realizujący

działanie bazy, a nie aplikacja stworzona i

uruchomiona przez użytkownika.

SGA:

SGA to serce bazy danych Oracle. Procesy

zapisują transakcje do tego obszaru i pobierają

dane, które są tu umieszczone, by przyśpieszyć

operacje odczytu.

Bez obszaru SGA nie może istnieć żadna baza

Oracle. Składowe obszaru SGA:

o

bufor (blokowy) bazy danych,

o

bufor dziennika powtórzeń,

o

obszar współdzielony,

o

obszar komunikacji międzyprocesowej,

o

zapytania dla wielokanałowego serwera (jeśli jest

używany).

background image

33

Bufor bazy danych

służy do przechowywania

rekordów z różnych tabel bazy danych Oracle

(ponieważ

odczyt

i

zapis

jest

blokowy,

przechowuje całe bloki bazy, które zawierają

dane). Te bloki mogą zawierać zarówno takie,

które zostały odczytane z plików danych jak i te

rekordy, które muszą zostać zapisane do tych

plików.

W efekcie, bufor bazy danych służy jako stacja

pośrednia dla danych, która znajduje się

pomiędzy użytkownikami a plikami danych.

Najłatwiejsza decyzja dotycząca czasu pobytu

bloku w buforze odnosi się do nowych lub

zmodyfikowanych rekordów, które oczekują na

zapis na dysk. Pozostają one w buforze bazy

danych do momentu ich zapisu przez proces

piszący bazy danych.

background image

34

Dla

pozostałych

buforów,

które

przechowują dane pobrane z dysku i nie
są zmienione, system Oracle musi
zdecydować, które należy zatrzymać, a
które

należy

usunąć.

Najbardziej

logiczne wydaje się, aby trzymać w
pamięci te rekordy, które są pobierane
bardzo

często

(np.

standardowe

przeglądanie tabeli) a usunąć te, z
których

nie

korzystamy.

Algorytm

stosujący tę metodę nosi nazwę

LRU

(ang.

least recently used

– najdłużej

niewykorzystywany).

background image

35

Gdy rekord zostaje odczytany z bazy danych przez

zapytanie, blok danych zostaje zachowany w
buforze bazy danych i jest umieszczony na końcu
listy rekordów jako ostatnio użyty. Za każdym
razem, gdy jakiś rekord znajdujący się w buforze
jest wykorzystany zostaje on przeniesiony na
koniec listy najdawniej używanych rekordów.

Gdy wykonane zapytanie potrzebuje miejsca na

dane pobrane z dysku, a wszystkie bloki bufora
są wykorzystane, zostaje nadpisany blok, który
zawiera rekordy na początku listy najdawniej
używanych

rekordów,

o

ile

nie

zostały

zmodyfikowane (ang.

dirty

). Jeśli dane, które

zostały nadpisane, są ponownie potrzebne,
muszą zostać pobrane z dysku. Ten proces
zaoszczędza czas, przechowując dane w pamięci
i ograniczając wolny transfer z dysku.

background image

36

Bufor dziennika powtórzeń

przechowuje kopie

transakcji, które zostały wykonane w bazie i czekają

na zapis do plików powtórzeń. Ten zapis transakcji

pozwala systemowi Oracle na rekonstrukcję danych

w przypadku utraty dysku. Transakcje zapisywane do

dziennika powtórzeń są zachowywane w pamięci, by

zwiększyć wydajność operacji zapisu.

Bufor dziennika powtórzeń został zaprojektowany

wyłącznie do zapisu, do którego wykorzystuje

metodę kolejki

FIFO

(ang.

first-in, first-out

– pierwszy

wchodzi, pierwszy wychodzi) w odniesieniu do

przechowywanych danych.

Wpisy do dziennika są zapisywane w kolejności, w

jakiej się pojawiły, a proces piszący dziennika

przegląda kolejkę i zapisuje jeden lub więcej bloków

do aktywnych plików dziennika. Bufor pliku dziennika

służy jako stacja pośrednia dla wpisów do dziennika,

znajdująca

się

między

procesem

Oracle,

wykonującym określoną aktualizację a plikami

dziennika na dysku.

background image

37

Obszar współdzielony

zawiera trzy sekcje, które

mogą poprawić wydajność systemu:

współdzielone obszary SQL (ang. shared SQL)

przechowuje

przeanalizowane

(ang.

parsed)

zapytanie dla dowolnego użytkownika, by mógł z

niego

korzystać

bez

konieczności

ponownego

dokonywania rozbioru składniowego. Zapytania są

przechowywane w tym obszarze, który jest również

określany jako bufor biblioteki (ang. library cache)

wykorzystujący zmodyfikowany algorytm LRU.

bufory słownika danych (ang. data dictionary cache).

We

wszystkich

zapytaniach

i

transakcjach

wykonywanych w bazie danych system musi wiedzieć,

gdzie się znajdują dane. To obejmuje informacje na

temat: samej bazy danych, jej obiektów (tabel,

widoków,

itd.)

i

użytkowników.

Wszystkie

te

informacje są przechowywane w różnych tabelach

systemowych w bazie danych, dlatego gdy dane

informacje są często wykorzystywane bufor słownika

danych przechowuje je dla zapewnienia systemowi

szybkiego do nich dostępu.

background image

38

kursory (ang. cursors)

przechowują dane

pobrane

z

bazy

danych

dla

dalszego

przetwarzania. System Oracle tworzy swoje
własne wewnętrzne kursory (określane jako
kursory rekursywne, ang. recursive cursors
)
przy wykonywaniu poleceń, tj. CREATE TABLE -
takie

polecenia

powodują

wykonanie

uaktualnień w wielu tabelach słownika danych.

Obszar komunikacji międzyprocesowej

jest

wykorzystywany

do

przechowywania

komunikatów przesyłanych między różnymi
procesami związanymi z działaniem bazy danych
Oracle. Wiele cech, tj. na przykład blokada
założona na obiekt przez działający proces jest
przechowywana poprzez ten obszar.

background image

39

Zapytania dla wielokanałowego serwera

pozwalają użytkownikom systemu Oracle na

współdzielenie obszarów pamięci i procesów

wykorzystywanych

do

tworzenia

połączenia

aplikacji użytkownika z bazą danych Oracle.

Jednym ze sposobów monitorowania obszaru SGA

jest wydanie polecenia:

show sga

PGA:

Obszar

globalny

PGA

przechowuje

informacje

dotyczące

pojedynczego

procesu

użytkownika. Każdy użytkownik zajmuje część

obszaru PGA po uzyskaniu połączenia z bazą

Oracle.

Wielkość

zajmowanej

pamięci

jest

uzależniona od systemu operacyjnego i pozostaje

niezmienna tak długo, jak użytkownik jest

podłączony do bazy. Właścicielem obszaru PGA

jest więc proces danego użytkownika i jedynie

użytkownik ma prawo czytać i zapisywać dane do

tego obszaru.

background image

40

Rozmiar obszaru PGA jest uzależniony od wersji

systemu Oracle, który pracuje w różnych systemach
operacyjnych. Trzy parametry mają wpływ na wielkość
PGA dla danej instancji: ilość otwartych połączeń do
bazy, ilość plików danych oraz liczba ról i ilość plików
dziennika.

Obszar sortowania

: Jedną z częściej stosowanych

klauzul w poleceniu wyboru SQL jest klauzula order
by.

Sortowanie

zapytań,

które

nie

zostały

umieszczone w pamięci, może czasami zająć od pięciu
do dziesięciu razy więcej czasu. Dlatego aplikacje
wykonujące operacje sortowania często umieszczane
są właśnie w pamięci fizycznej. Rozmiar obszaru
sortowania zależy głównie od potrzeb aplikacji. Jego
maksymalny rozmiar określa parametr

sort_area_size

w pliku konfiguracyjnym lub brany jest domyślnie do
danego systemu operacyjnego.

background image

41

Po zakończeniu operacji sortowania rozmiar obszaru

jest zmniejszany do wartości określonej przez

parametr

sort_area_retained_size.

Przestrzeń składowania danych na dysku

Przy

instalacji

oprogramowania

Oracle

dla

komputerów PC, kopiowana jest pewna liczba

plików

do

jednego

katalogu

lub

kilku

podkatalogów danego katalogu. Można te pliki

pogrupować na następujące kategorie:

Pliki danych (Database Files):

Pliki danych spełniają

podstawową rolę w systemie Oracle – przechowują

dane w odpowiedniej formie. Nie można ich

odczytywać bezpośrednio, korzystając, np. z

Notepad’a w Microsoft Windows, a zawartość ich

można uzyskać poprzez zapytania SQL. Poprzez

polecenia SQL można określić logiczne struktury:

przestrzenie tabel (ang. tablespace) i tabele.

background image

42

Za fizyczne struktury odpowiada system Oracle.

Administrator bazy DBA łączy te struktury
razem. Każdy plik jest związany z jedną
przestrzenią tabel. Przestrzeń tabel może
składać się z jednego lub więcej plików danych.

DBA określa liczbę plików danych skojarzonych z

daną przestrzenią tabel. Aby uzyskać informacje
na temat położenia plików w systemie należy
użyć polecenia SQL:

SQL> select * from sys.dba_data_files;

Pliki dziennika powtórzeń (Redo Log Files):

Zapisane są w nich dane o bazie służące do
awaryjnego

odtwarzania

danych

bazy.

W

systemie występuje stała, określona liczba
aktywnych

plików

dziennika

powtórzeń,

używanych cyklicznie.

background image

43

Po zakończeniu zapisywania do pierwszego pliku,

transakcje zapisywane są do następnego. Ten
proces postępuje, aż do zapełnienia ostatniego
pliku w sekwencji i następuje rozpoczęcie zapisu
ponownie do pierwszego pliku. Jest to bardzo
istotna sprawa, gdyż system nie będzie mógł
zacząć zapisywać do pierwszego pliku, zanim nie
zostanie

on

całkowicie

skopiowany

do

archiwalnego pliku dziennika. A jeśli system
Oracle nie może przepisać pliku dziennika
powtórzeń do archiwalnego dziennika z powodu,
np. braku miejsca, baza nie może wykonywać
żadnych transakcji. Dlatego bardzo istotne jest
aby sprawdzać, gdzie system zapisuje archiwalne
pliki dziennika, by uniknąć tej sytuacji. Aby
określić jakie pliki dziennika są skojarzone z
instancją należy użyć polecenia:

SQL> select * from v$logfile;

background image

44

Archiwalne pliki dziennika mają zasadniczo dwie

opcje dotyczące miejsca przechowywania.
Pierwszą z nich jest możliwość wykorzystania
miejsca na dysku twardym – drugą, zapis
plików bezpośrednio na taśmę magnetyczną.

Pliki sterujące:

Pliki sterujące są wewnętrzną

częścią systemu Oracle. Nie można ich
edytować, zmieniać rozmiaru czy przenosić w
inne miejsce. Pliki te zawierają nazwę: bazy
danych, plików danych, dzienników powtórzeń
oraz czas, kiedy zostały stworzone. Pliki
sterujące można dodawać, a także je kasować.
Obowiązuje tylko jedna zasada: zawsze musi
być

dostępny

przynajmniej

jeden

plik

sterujący, by móc powtórnie stworzyć inne.

background image

45

Pliki konfiguracyjne:

Pliki konfiguracyjne

umożliwiają „strojenie” bazy. W systemie
wieloużytkowym Oracle wykorzystywane są
dwa podstawowe pliki kontrolne:

init.ora

. Jest to plik główny. Jego właściwa

nazwa pliku zawiera identyfikator instancji
SID, tak więc dla instancji nazwanej gosia plik
kontrolny będzie miał nazwę initgosia.ora;

config.ora

. Zwykle plik

config.ora

zawiera

lokalizację plików kontrolnych, archiwalnych
oraz zrzutów pamięci (ang.

dump files

).

Zawiera również nazwę bazy danych oraz
parametry określające rozmiar bloku bazy
danych (ang.

database block size

).

background image

46

Najczęściej stosowane parametry znajdujące

się w pliku konfiguracyjnym przedstawia
poniższa tabela:

background image

47

background image

48

Pliki rejestrów i śledzenia:

Plikiem

rejestrującym najważniejsze zdarzenia w bazie
jest plik alarmów (ang.

alert log

). Właściwa

nazwa tego pliku zawiera nazwę instancji, z
którą dany plik jest związany, a więc, np.

gosiaALRT.log.

Do pliku tego zapisywane są:

główne operacje wykonywane przez DBA, np.
uruchomienie

lub

zatrzymanie

instancji,

wykonanie poleceń tworzenia, modyfikacji lub
usunięcia bazy danych, jej przestrzeni tabel
lub segmentów wycofań;

wewnętrzne błędy systemu Oracle;

komunikaty o problemach związanych z
serwerem wielokanałowym;

błędy związane z automatycznym
odświeżaniem migawek.

background image

49

Pliki śledzenia są tworzone przez procesy Oracle

pracujące

w

tle

w

przypadku

wykrycia

poważnych problemów lub gdy jeden z
procesów wykryje złe działanie, lub brak innego
procesu pracującego w tle. Treść komunikatu
jest uzależniona od możliwości zidentyfikowania
problemu.

Zwykle

zawiera

datę

i

czas

wystąpienia

problemu,

jaki

proces

go

spowodował, numer komunikatu błędu Oracle
oraz dodatkowe wyjaśnienia.

Zarówno pliki rejestrów jak i śledzenia znajdują

się w miejscu określonym poprzez parametr
BACKGROUND_DUMP_DEST w pliku init.ora,
którego domyślna wartość to

\oracle\admin\nazwa_instancji\bdump.

background image

50

”Wnętrze bazy” Oracle

Baza danych składa się z obiektów. Obiekty to

logiczne

jednostki,

na

których

operują

użytkownicy. Baza danych zawiera:

Tabele

Indeksy

Widoki

Synonimy

Sekwencje

Partycje

Klastry

Procedury i pakiety magazynowe

Typy danych definiowane przez użytkownika

Przestrzenie tabel

Więzy integralności

background image

51

Tabele

Podstawową

jednostką

do

przechowywania

informacji w bazie danych

Oracle są właśnie

tabele

.

Zawierają

one

wiersze

danych

reprezentujące

pojedyncze

encje

(np. PESEL pracowników). Tabele zawierają także
kolumny, które reprezentują atrybuty związane z
wierszami (np. data i miejsce urodzenia dla
danego

pracownika).

W

kolumnach

można

przechowywać także dość złożone typy danych, tj.
obraz wideo, sygnał audio czy rysunki.

Aby utworzyć tabelę korzystamy z pewnych

standardowych poleceń.

Najważniejsze to:

create

table

Urzedy_skarbowe

mówi

systemowi, co należy zrobić (stworzyć tabelę).

background image

52

Każda tabela posiada nazwę, która jest

kombinacją dowolnych dopuszczalnych
znaków i podkreślenia (spacja jest
niedozwolona) o długości do 30 znaków.

Nazwami tabel nie mogą być zastrzeżone

słowa kluczowe, np. order (choć wyraz
order może być częścią dłuższej nazwy).
Po wpisaniu tego polecenia następnie
podajemy nazwy kolumn tabel, a każdej
kolumnie odpowiada typ danych i
rozmiar

.

initrans

oraz

maxtrans

są podobne do

parametrów initial oraz next odnoszących się
do obszarów alokacji, z tą różnicą, że rezerwują
one miejsce w tabeli na zapis transakcji w toku.

background image

53

Miejsce jest rezerwowane w nagłówku tabeli i

składa się z elementów o rozmiarze 23 bajtów. Ta
przestrzeń nie jest odzyskiwana po zakończeniu
transakcji. Maksymalną wartością dla tego
parametru jest 255 choć może być mniejsza w
zależności od systemu operacyjnego. Gdy skończy
się miejsce w tabeli na zapis transakcji, nowe
transakcje muszą czekać, aż zostanie ono
zwolnione po zakończeniu bieżących transakcji.
Jeśli te parametry nie zostaną określone to
zostaną użyte wartości domyślne dla instancji.

tablespace system

określa, gdzie system Oracle

ma utworzyć tabelę – w tym przykładzie jest to
przestrzeń o nazwie, np.

system

. Jeśli przestrzeń

tabeli

nie

zostanie

określona,

zostanie

przydzielona

przestrzeń

domyślna

dla

użytkownika, który tworzy tabelę.

background image

54

storage()

w nawiasie można zawrzeć parametry, które

określają parametry przechowywania dla tej tabeli.

Są to:

initial

lub

next

odpowiadają

rozmiarom

początkowego

i

każdego

następnego

obszaru

alokacji.

pctincrease

jest to wyrażony w procentach

przyrost wielkości każdego następnego obszaru

alokacji, np. gdy wartość początkowa obszaru wynosi

1kB, następnego 2kB,a parametr

pctincrease

ma

wartość 50% to w takim przypadku trzeci obszar

będzie miał rozmiar 3kB (1,5*2kB),a 4,5kB czwarty

(1,5*3kB).

minextents

oraz

maxextens

jest to minimalna i

maksymalna liczba obszarów alokacji, które mogą

istnieć w tabeli.

Jeśli parametry nie zostaną podane powoduje przyjęcie

parametrów domyślnych.

background image

55

Aby stworzyć przykładową tabelę powinniśmy

wydać następujące polecenie:

SQL> create table Urzedy_skarbowe
(nazwa

char(40),

miejscowosc

char(20),

kod_pocztowy

char(6),

ulica

char(20),

numer_domu

number(10))

initrans 1
maxtrans 100
tablespace system
storage (
initial 10k
next 10k
pctincrease 0
minextents 1
maxextents 100);

background image

56

Każda kolumna tabeli posiada nazwę, typ

danych i pewne parametry określające rozmiar
danych. Podstawowe typy danych w systemie
Oracle przedstawia poniższa tabela.

Typ danych

Rodzaj

Stała/zmienna długość

char (rozmiar)

Znakowy

Stała długość (dopełniona spacjami)

varchar2

(rozmiar)

Znakowy

Zmienna długość

(wykorzystywane potrzebne miejsce)

number

(precyzja,skala)

Numeryczny

Zmienna długość
(wykorzystywane potrzebne miejsce)

Liczby mają określoną precyzję i skalę. Precyzja

określa całkowitą liczbę cyfr, z wyłączeniem
wykładnika, jeśli liczba jest wyrażona w notacji

wykładniczej. Skala określa ilość cyfr po przecinku
w zapisie dziesiętnych. Liczba z precyzją 4 i skalą

2 będzie z zakresu –99,99 i +99,99, co zapisuje się
jako number (4,2).

data

Data i czas


Siedem bajtów na kolumnę

(zgodne z rokiem 2000)

background image

57

Indeksy

Aby w szybki sposób przeszukiwać tabele należy

używać indeksów, dzięki którym system Oracle
przegląda niewielki indeks w celu określenia,
jakie wiersze spełniają warunki i następnie
pobiera jedynie te wiersze z tabeli.

long

Znakowy


Zmienna długość

raw (size)

Dowolny
(nieokreślony)


Zmienna długość

long raw

Dowolny
(nieokreślony)


Zmienna długość

rowid

Binarny

Sześć bajtów na wiersz – może być przedstawiona
jako liczba w zapytaniu

background image

58

Indeks jest więc posortowaną listą danych z

jednej lub wielu kolumn tabeli, które są często
wykorzystywane jako kryterium wyboru. Dzięki
temu zamiast przeszukiwać dużą liczb wpisów,
by odnaleźć określoną, np. miejscowość,
wystarczy przejrzeć indeks zawierający nazwę
miejscowości. Gdy system Oracle odnajdzie
nazwę szukanej miejscowości, pobiera blok
danych, który zawiera potrzebne dane.

Ponieważ dane zostały wstępnie posortowane,

system nie musi czytać każdego rekordu w
indeksie. Zamiast tego korzysta z bardziej
wydajnej metody (opartej o zmodyfikowane
drzewo

binarne,

dla

którego

wzór

wyszukiwania przypomina gałęzie drzewa), by
ograniczyć do minimum liczbę rekordów
indeksu, które muszą być zanalizowane.

background image

59

Ponieważ indeksy są listą wartości pobranych z

tabeli, system Oracle musi mieć miejsce na ich
przechowywanie.

Indeksy

mają

podobne

klauzule określające parametry składowania
jak tabel. Aby stworzyć przykładowy indeks
powinniśmy wydać następujące polecenie:

SQL> create index nazwy_urzedow_skarbowych
on Urzedy_skarbowe (nazwa)
tablespace system
storage (
initial 2k
next 2k
pctincrease 0
minextents 1
maxextents 100);

background image

60

Indeks

Tabela

Pobrane

wiersze

Kryterium

Wiersze

spełniające

kryterium

Wyszukiwanie z użyciem indeksu

background image

61

O tym, czy indeks będzie użyty w realizacji

zapytania, decyduje treść zapytania. Oto kilka
przykładów takich uwarunkowań:

1. Indeksy

założone

na

tabeli

nie

wykorzystywane, gdy w zapytaniu nie występuje
klauzula

where

, czyli w prostych pytaniach typu:

SQL> select * from Umowy_zlecenia;

2. Indeks będzie wykorzystany, jeżeli kolumna

wymieniona w klauzuli

where

jest kolumną, na

której założony jest indeks:

SQL> select * from Umowy_zlecenia where

nazwy_urzedow_skarbowych=‘Urząd Skarbowy w
Zgierzu’;

jeśli na kolumnie

nazwy_urzedow_skarbowych

został

założony indeks.

background image

62

3.    Indeks nie będzie użyty, jeżeli kolumna, na

której założony jest indeks, wymieniona w klauzuli
where jako argument funkcji lub część wyrażenia:

SQL> select * from Umowy_zlecenia where
upper (nazwy_urzedow_skarbowych)=‘Urząd Skarbowy w

Zgierzu’

Indeksy są zarządzane przez system automatycznie,

tzn. gdy jakiś wiersz jest modyfikowany, usuwany
bądź

dodawany,

indeksy

automatycznie

aktualizowane zgodnie z dokonanymi zmianami.
Aktualizacja taka zabiera jednak czas systemowi,
dlatego jeśli baza zawiera małe tabele to
przeszukiwanie danych za pomocą indeksów, czy
też bez nich nie ma większego znaczenia, jedynie
dla dużych tabel wykonywanie częstych zapytań
bez indeksów może obciążać system.

background image

63

W zależności od struktury indeksu wyróżnić

możemy indeksy typu:

UNIQUE

– zapewniające występowanie unikatowych

wartości w kolumnie lub kolumnach objętych

indeksem;

NON

UNIQUE

zapewniające

najszybszy

z

możliwych dostęp do danych (ten typ indeksu

przyjmowany jest domyślnie);

SINGLE COLUMN

– czyli indeksowanie tylko jednej

kolumny;

CONCATENATED

– indeks obejmujący do 16 kolumn,

zakładany

w

celu

poprawienia

szybkości

przeszukiwania

bazy

lub

zapewnienia

unikatowości wartości w objętych indeksem

kolumnach.

background image

64

Zakładanie na tablicach bazy indeksów w widoczny

sposób przyspiesza pracę bazy tylko wtedy, gdy:

indeksowana tablica

zawiera więcej niż 200

wierszy. Dla tablic mniejszych przyspieszenie
spowodowane wykorzystaniem indeksu nie jest
zauważalne;

indeks zdefiniowany jest na kolumnach

, w których

nie występuje częste powtarzanie się wartości
wpisywanych tam danych, czyli gdy na przykład
mamy tablicę pracowników z kolumną płeć, do
której wpisane są informację o płci to indeksowanie
takiej kolumny nie daje żadnych rezultatów gdyż w
tej kolumnie jest zbyt mała różnorodność danych;

indeks zdefiniowany jest na kolumnach

, często

używanych w klauzulach

where

, lub przy określaniu

warunków łączenia tablic;

background image

65

indeks typu

CONCATENATED

zdefiniowany jest

na kilku kolumnach, często występujących
wspólnie, w klauzulach

where

lub przy

określaniu warunków łączenia tablic.

Aby usunąć indeks z bazy danych należy wydać

polecenie:

SQL> drop index nazwy_urzedow_skarbowych;

background image

66

Widoki

Widok to selekcja z jednej lub więcej tabel. Dane

nie są powielane. Widok jest strukturą, która
obrazuje rzeczywiste dane przechowywane w
tabeli.

Widoki

nie

wymagają

określenia

parametrów przechowywania ani miejsca w
przestrzeni

tabel.

Widoki

oferują

wiele

możliwości:

można stworzyć widok łączący odpowiednie
tabele i pozwolić, aby użytkownicy korzystali z
niego tak, jakby to była zwykła tabela;

można stworzyć widok zawierający te kolumny,
do których użytkownicy powinni mieć dostęp i
nadać im prawa do korzystania jedynie z
widoku, a nie bazowej tabeli;

można użyć widoku, aby nadać kolumnom
pożądane nazwy;

background image

67

w przypadku pracy na tabeli zawierającej
dużą ilość kolumn, można wykorzystać
widoki

do

stworzenia

mniejszych,

łatwiejszych w użyciu struktur.


Dla widoków nie tworzy się indeksów. Widoki

tworzy się za pomocą polecenia

create view

.

Nie można modyfikować widoku – zamiast tego
należy go usunąć i ponownie utworzyć. Można
to zrobić korzystając z pojedynczego polecenia

create or repleace view

zamiast

create view

.

To pozwala na ponownie stworzenie widoku, bez

utraty

związanych

z

nim

przywilejów.

Usuwanie czy tworzenie widoku nie oddziałuje
w żaden sposób na dane w tabeli, z którą dany
widok jest skojarzony.

background image

68

Tablica A

Tablica B

Tworzenie widoków

Kolumna 1

tablicy A

Kolumna 2

tablicy A

Kolumna 1

tablicy B

Kolumna 2

tablicy B

Kolumna 3

tablicy B

Kolumna 2

tablicy A

Kolumna 1

tablicy B

Kolumna 3

tablicy B

Widok A&B

background image

69

Synonimy

Synonim jest to jakby pseudonim nadany tabeli,

który może być używany przy odwołaniach do
tabeli.

Synonim

upraszcza

użytkownikowi

odwoływanie się do tabel, których nie jest
właścicielem.

Gdy użytkownik chce skorzystać z tabeli, której nie

jest

właścicielem,

musi

określić

zarówno

właściciela tabeli, jak i jej nazwę (w formacie

właściciel.nazwa_tabeli

). Jeśli użytkownik odnosi

się do tabel znajdujących się w innej bazie,
format

ten

może

być

jeszcze

bardziej

skomplikowany.

Synonimy upraszczają dostęp do tabeli poprzez

zastąpienie

skomplikowanego

kwalifikatora

nazwą synonimy

.

background image

70

Istnieją dwa rodzaje synonimów – prywatne i

publiczne.

synonimy prywatne – zostały stworzone do
użytku prywatnego użytkownika;

synonimy publiczne – może z nich korzystać
dowolny użytkownik bazy danych.

Uprawnienia

użytkowników

do

tworzenia

synonimów publicznych jak i ich usuwania
powinny być ograniczone. Są trzy podstawowe
przywileje związane z synonimami:

-  

CREATE SYNONYM

(pozwala również na usuwanie

prywatnych synonimów),

-        

CREATE PUBLIC SYNONYM,

-         DROP PUBLIC SYNONYM.

background image

71

Sekwencje

Sekwencje (ang.

sequences

) to narzędzia używane do

generowania

niepowtarzalnych

sekwencji

numerycznych, które można wykorzystywać w
bazie danych. Dzięki tym obiektom bazy danych
można nadać unikatowy numer dla wewnętrznego
klucza

łączącego

dwie

tabele

w

aplikacji.

Największą zaletą sekwencji jest gwarancja, że przy
każdej próbie dostępu do sekwencji otrzymana
wartość będzie niepowtarzalna.

Jeśli użytkownik tworzy tabelę sekwencji i napisze

aplikację,

która

odczyta

następną

dostępną

wartość, zinkrementuje ją, a następnie zaktualizuje
tabelę otrzymaną wartością, to zawsze istnieje
możliwość, że ktoś inny zmieni wartość tego
rekordu nim użytkownik dokończy rozpoczęty
proces aktualizacji. Aby tego uniknąć można
skorzystać z sekwencji.

background image

72

Podkreślenia wymaga fakt, iż nie można cofnąć

wartości sekwencji. Jeśli użytkownik w którymś
momencie zaniecha wstawiania wierszy z
wartością z sekwencji, nie może wtedy już
odzyskać tego numeru sekwencji.

Z sekwencją wiążą się trzy parametry: wartość

początkowa, wartość maksymalna i przyrost
(domyślnie wynosi 1).

Przykład polecenia tworzącego sekwencję:

SQL> create sequence location_id

1.

increment by 1

2.

start with 1

3.

maxvalue 9999999

4.

cycle;

Sequence created.

background image

73

Z sekwencji bardzo łatwo jest korzystać. Przy

tworzeniu sekwencji o nazwie, na przykład

kod_pracownika

, by nadać niepowtarzalny,

wewnętrzny klucz dla każdego pracownika
wprowadzonego do bazy danych pracowników,
można wprowadzić nowy rekord danych i
zagwarantować unikatowość klucza przez
użycie prostego polecenia SQL:

insert into pracownicy
values (kod_pracownika.nextval,
‘Krupiński’,
‘Krzysztof’,
‘123-4567’);

background image

74

Sekwencje nie wymagają szczególnej obsługi, trzeba

jedynie monitorować, czy sekwencja nie osiągnęła

swojej maksymalnej wartości, albo czy podczas

wprowadzania danych nie została pominięta

aktualizacja sekwencji.

Domyślnie są one tworzone w trybie cyklicznym, co

oznacza, że po osiągnięciu maksymalnej wartości

sekwencja rozpocznie się na nowo. To może

powodować problemy, jeśli sekwencja zapisuje

dane dla kolumny z atrybutem niepowtarzalności

lub do indeksu.

Trzeba więc upewnić się, że zarówno sekwencja, jak

i kolumna są wystarczające, by pomieścić dużą

tablicę unikatowych wartości sekwencji. Innym

częstym problemem jest sytuacja, gdy ktoś tworzy

oprogramowanie wykorzystujące własne numery

identyfikacyjne, a nie sekwencje.

background image

75

Gdy użytkownik skorzysta z sekwencji, otrzyma

wartość, która jest już obecna w tabeli. Jeśli
program nie korzysta z sekwencji, należy ją
zaktualizować po zakończeniu działania programu,
aby upewnić się, czy jest spójna.

Partycje

Partycje są wykorzystywane w celu podziału dużych

tabel czy indeksów i rozmieszczenia ich na różnych
dyskach, w oparciu o jeden z atrybutów związany z
taką

tabelą

(np.

z

datą).

Partycje

przechowywane w oddzielnych przestrzeniach
tabel. Partycje dają dodatkowe korzyści:

zwiększają

wydajność

przy

operacjach

przeszukiwania poprzez rozłożenie obciążenia
operacji we-wy pomiędzy dyski twarde. Możliwe
jest wykonywanie równoległych operacji na różnych
partycjach,

background image

76

umożliwiają zamianę parametrów przechowywania

dla różnych partycji. Na przykład, dla starych

danych, które pewnie nie będą modyfikowane,

możliwe jest ustawienie minimalnej wartości

parametru

pctfree

i maksymalną

pctused,

jeśli,

któraś

z

przestrzeni

tabel

będzie

niedostępna z powodu uszkodzenia dysku, to

nadal można korzystać z danych w pozostałych

partycjach,

które

nie

znajdowały

się

na

uszkodzonym dysku,

umożliwiają archiwizowanie i odzyskiwanie z kopii

zapasowej pojedynczych partycji. Dzięki temu

można

zaprzestać

archiwizacji

starych,

nie

zmieniających się danych i tworzyć kopię

zapasową jedynie tych danych, które często się

zmieniają.

background image

77

Partycje najlepiej pełnią swoją rolę przy pracy z

dużymi tabelami czy indeksami, a także gdy ze
względu na wydajność należy ograniczyć rozmiar
tabeli, z której system cały czas korzysta.
Natomiast w innych przypadkach stosowane jest
zazwyczaj zwykłe niepartycjonowane tabele.

Klastry

Klaster (ang.

cluster

) to grupa tabel, która

przechowywana jest razem, ponieważ zawierają
pewną liczbę wspólnych kolumn i są często łączone
zapytaniami. Użytkownicy często nie wiedzą, iż
tabele, do których sięgają znajdują się w klastrze.
O

tym

wiedzą

jedynie

programiści

i

administratorzy. Klastry wykorzystywane są często
jeśli występują problemy z wydajnością zapytań,
które zawsze łączą kilka tabel o wspólnych
kolumnach.

background image

78

Procedury i pakiety magazynowane

Procedury magazynowane (ang. stored procedures)

są sposobem na przechowywanie oprogramowania
w bazie danych Oracle. Jeśli więc coś ma być
zapisane jako skrypt PL/SQL (ang.

Procedural

Lanquage/SQL

– jest to proceduralne rozszerzenie

języka SQL umożliwiające wykonywanie rozkazów
warunkowych, pętli itp. w połączeniu z zapytaniami
do bazy) może zostać także zapisane jako
procedura

magazynowana

Oracle.

Kolekcja

procedur może zostać zapisana jako pakiet w bazie
danych. Procedury magazynowane dają wiele
możliwości:

Mechanizmy bezpieczeństwa systemu Oracle

, takie

jak role i nadawane prawa mogą chronić zarówno
dane, jak i oprogramowanie. Zapewnia to również
scentralizowane zarządzanie bezpieczeństwem.

background image

79

Gdy

użytkownik

wykonuje

procedurę

magazynowaną, działa z przywilejami osoby, która
ją stworzyła, a nie z przywilejami, jakie normalnie
użytkownik posiada. To nadaje się doskonale do
pewnych

środowisk,

gdzie

trzeba

stosować

specjalne

mechanizmy

bezpieczeństwa,

pozwalające na śledzenie dokonywanych zmian i
sprawdzanie poprawności danych.

DBA

może

nadać prawo zapisu jedynie użytkownikowi, który
stworzył procedurę magazynową. Użytkownicy,
którzy powinni dokonywać zapisu do bazy nie
posiadają takiego prawa – zamiast tego, mają
prawo do wykonywania procedur (co wymusza
mechanizmy bezpieczeństwa oprogramowania),
które dokonują operacje zapisu. Jeśli próbują
wykonywać polecenia SQL w celu zapisu do danych
tabel, otrzymają komunikat o braku dostępu.

background image

80

Kolejną zaletą procedur magazynowanych jest
to, że Oracle przechowuje zarówno źródło, jak i
wersję przetworzoną przez analizator składni.
To zaoszczędza czas przeznaczony na rozbiór
składniowy poleceń przy każdym wywołaniu.

Procedura magazynowana tworzona jest za

pomocą instrukcji

create procedure

i składa się

z

dwóch części.

Pierwsza z nich to specyfikacja

procedury

definiuje

jej

nazwę

oraz

argumenty. Druga to ciało procedury – jest to
blok

PL/SQL

wykonywany

w

momencie

wywołania tejże procedury. Ciało procedury ma
taką samą strukturę jak blok PL/SQL. Zawiera
ono sekcję deklaracyjną, wykonywalną i
obsługi wyjątków, błędów. Pierwsza i trzecia z
tych sekcji są opcjonalne.

background image

81

Poniżej przedstawiona jest składnia do tworzenia

prostej procedury magazynowanej nie pobierającej

żadnych argumentów:

CREATE [OR REPLACE] PROCEDURE

nazwa_procedury IS

[Opcjonalna

sekcja

deklaracyjna,

zawierająca

deklaracje

wszystkich

typów

lokalnych,

zmiennych, stałych, kursorów oraz podprogramów.

Nie występuje tu instrukcja

DECLARE

.]

BEGIN

[Sekcja wykonywalna, uruchamiana w momencie

wywołania procedury]

[

EXCEPTION

opcjonalna sekcja wyjątków]

END;

background image

82

Klauzula

CREATE [OR REPLACE]

instruuje Oracle, by

ten – w przypadku gdy procedura nie istnieje –

utworzył nową, w przeciwnym zaś razie – zmienił

istniejącą.

Procedura

magazynowa

oznaczana

jest

jako

prawidłowa (ang.

valid

) lub nieprawidłowa (ang.

invalid

) w zależności od tego, czy podczas

kompilacji pojawiły się jakieś błędy. Można

wywoływać

tylko

i

wyłącznie

prawidłowe

procedury. Jeśli dowolny z obiektów schematu

(procedura, funkcja, specyfikacja pakietu, tabela,

widok, sekwencja czy synonim), do którego

odwołuje się procedura, ulegnie zmianie, wówczas

znajdzie się ona w stanie nieprawidłowym.

Wszelkie funkcje, procedury i pakiety odwołujące

się do nieprawidłowej procedury są również

oznaczane jako nieprawidłowe.

background image

83

Bez względu na stan wszystkie procedury

magazynowane są umieszczane w bazie danych.
Kiedy aplikacja wywołuje procedurę, Oracle ładuje
ją do obszaru pamięci współdzielonej (SGA), o ile
oczywiście nie znajduje się ona już w tym
obszarze. Procedura prawidłowa wykonywana jest
natychmiastowo,

a

nieprawidłową

Oracle

automatycznie rekompiluje. Jeśli proces ten
zakończy się sukcesem, procedura jest oznaczona
jako prawidłowa i wykonywana, w przeciwnym
razie system zwraca komunikat błędu wykonania.

Pakiet magazynowany (ang.

stored package

) jest to

grupa spokrewnionych procedur i funkcji, które –
dzięki temu, że są przechowywane razem – mogą
współużytkować

zmienne

oraz

lokalne

podprogramy. Pakiet składa się z takich samych
części jak procedura magazynowana oraz funkcja
magazynowana.

background image

84

Przestrzenie tabel

Podstawową jednostką przechowywania bazy danych

jest przestrzeń tabel (ang.

tablespace

). Zawiera

ona obiekty, tj. zestawy tabel, widoki itd., które

przechowują dane. Przestrzeń tabel jest swoistym

łącznikiem z fizycznym nośnikiem informacji.

Przestrzeń tabel składa się z jednego lub więcej

plików danych, a baza danych Oracle może składać

się z jednej lub wielu przestrzeni tabel.

Zwykle jednak przy małych i średnich bazach zaleca

się

stworzenie

choćby

jednej

dodatkowej

przestrzeni dla oddzielenia danych zapisanych

przez użytkowników od danych zawartych w

słowniku bazy.

Nowa baza składa się tylko z przestrzeni tablic

SYSTEM

(tworzonej

automatycznie

w

czasie

zakładania nowej bazy), która zawsze zawiera

tablice tzw. słownika bazy (

Dictionary

), czyli

informacje o wewnętrznej strukturze bazy, jej

użytkownikach i ich przywilejach.

background image

85

Ta przestrzeń systemowa przechowuje również

pisane w

PL/SQL procedury, funkcje, pakiety

.

Duże bazy danych podzielone są zazwyczaj na
wiele przestrzeni. Poniższy rysunek pokazuje
dwie bazy. W skład pierwszej wchodzi tylko
przestrzeń tabel

SYSTEM

, natomiast druga

posiada dodatkowo przestrzeń tabel

DANE

,

przeznaczoną

do

gromadzenia

danych

użytkowników bazy.

Parametry

extents

lub

pct_increase

domyślnymi parametrami do przechowywania
(ang.

storage parameters

) dla przestrzeni tabel.

Każdy obiekt zajmujący miejsce w bazie danych
(np. tabela lub indeks) używa predefiniowanych
fragmentów

przestrzeni

określanych

jako

obszary alokacji (ang.

extents

).

background image

86

BAZA DANYCH

Przestrzeń tabel

SYSTEM

BAZA DANYCH

Przestrzeń tabel

SYSTEM

Przestrzeń tabel

np. DANE

SCHEMAT DWÓCH BAZ DANYCH

background image

87

W sytuacji gdy rekordy są zapisywane do

przestrzeni tabel Oracle grupuje wiersze tabeli w

obszary na dysku określane jako obszary

alokacji. Jest to pomocne, ponieważ system

czyta dodatkowe wiersze do bufora SGA (jest to

dobre rozwiązanie – większość systemów

operacyjnych czyta całe bloki danych z dysku).

Poprzez tworzenie obszarów alokacji będących

wielokrotnością rozmiaru bloku danych systemu

operacyjnego administrator nie musi określać

już na początku projektu wielkości tabeli co

wymusiłoby z kolei konieczność rezerwacji dużej

ilości miejsca przy tworzeniu tabeli, której

rozmiar zwiększałby się powoli.

Maksymalna liczba obszarów alokacji dla danego

obiektu zależy od systemu operacyjnego, ale

zwykle przekracza 100.

background image

88

Przy tworzeniu tabeli, jeśli nie zostaną określone

parametry

przechowywania,

wykorzystane

będą

wartości domyślne dla danej bazy danych. Jeśli nie
zostaną określone domyślne parametry dla bazy
danych, odziedziczone zostaną wartości określone
przez Oracle dla danego systemu operacyjnego.
Podstawowe

parametry

przechowywania

dla

przestrzeni tabel to:

initial_extents

pozwala określić rozmiar pierwszego

obszaru alokacji. Przy tworzeniu obiektu bazy danych
zarezerwowany musi być przynajmniej jeden obszar.
Ważny jest fakt, iż nie można stworzyć obszaru
alokacji większego niż największy ciągły obszar
dostępny do stworzenia pliku danych. Czyli w
przypadku gdy jest dużo dostępnej wolnej przestrzeni,
ale

jest

ona

rozproszona

między

plikami

i

poprzerywana

innymi

obszarami

alokacji,

to

stworzony dla nowego obiektu obszar alokacji w
rzeczywistości będzie niewielki.

background image

89

next_extens

określa rozmiar drugiego obszaru

alokacji. Wszystkie następne obszary będą miały

rozmiar zgodny z tą wielkością powiększony o

współczynnik procentowy.

min_extents

jest to minimalna liczba obszarów.

max_extents

to maksymalna liczba obszarów

alokacji, które mogą być zajmowane przez dany

obiekt. Posiadanie wielu obszarów alokacji może

być przyczyną opóźnienia w otrzymaniu wyników z

powodu czasu jaki jest potrzebny na zlokalizowanie

wszystkich potrzebnych obszarów alokacji.

pct_increase

jest to współczynnik określający

procentowy przyrost wielkości odnoszący się do

każdego

sukcesywnie

zajmowanego

obszaru

alokacji. Jeśli, na przykład mamy tabelę, której

parametr

next_extents

ma wartość 2000 bajtów, a

pct_increase

wynosi 10, to drugi obszar alokacji

będzie miał wielkość 2200 bajtów, trzeci 2420

bajtów itd.

background image

90

Więzy integralności

Więzy

integralności

(ang.

constraints

)

zapewniają poprawność danych wpisywanych
do tabel zarówno przez programistów jak i
przez użytkowników. Więzy integralności,
inaczej ograniczenia, jakie występują w
systemie Oracle przedstawia poniższa tabela:

background image

91

unique

Oznacza, że żadne dwa wiersze nie mogą mieć tej samej
wartości w danej kolumnie (wyjątkiem jest wartość null).

primary key

Jest to klucz główny tabeli. Oznacza, że zostanie

stworzony unikatowy, niepusty (not null) indeks dla danej
kolumny lub kolumn. Każdy wiersz będzie miał różną

wartość, którą można wykorzystać jako wartość
referencyjną.

foregin key

Jest to klucz obcy tabeli. Oznacza, że wartość takiej

kolumny musi być albo pusta, albo odpowiadać wartości

kolumny (kolumn) referencyjnej w tabeli określonej jako
część klucza obcego.

lista wartości

Określa, że kolumna może zawierać wartość z określonej

przy tworzeniu tabeli listy wartości. Jest to stosowane w
przypadkach, gdy kolumna może przyjmować wartość z

ograniczonego zbioru wartości (np. tak/nie, prawda/fałsz).

Używanie listy dopuszczalnych wartości jest szczególnie
przydatne gdy istnieje choćby mała szansa, że lista

dopuszczalnych wartości dla danej kolumny będzie się
zmieniać.

background image

92

Więzy integralności można stosować w pojedynczej

kolumnie, ale także możliwe jest stosowanie

ograniczeń na poziomie tabeli. Pierwsza możliwość

pozwala na zastosowanie więzów dla danej

kolumny, druga natomiast dopuszcza działanie

zarówno na jednej jak i na wielu kolumnach.

Poniższy przykład pokazuje użycie ograniczenia

unique

odnoszącego się do danej kolumny:

SQL> create table Pracownicy
(id_pracownika number(5),
miejsce_zamieszkania

char(20),

kod_pocztowy char(6),
ulica char(20),
numer_domu

number(10),

data_urodzenia date,
constraint C_ID_PRACOWNIKA unique,
umowa

char(20),

status vorchar2(1) check (status in (‘A’, ‘N’)));

background image

93

Kolejny przykład pokazuje użycie ograniczenia

unique

na poziomie tabeli:

SQL> create table Pracownicy2
(id_pracownika

number(5),

miejsce_zamieszkania

char(20),

kod_pocztowy

char(6),

ulica

char(20),

numer_domu

number(10),

data_urodzenia

date,

umowa

char(20),

status

vorchar2(1)

constraint

C_ID_PRACOWNIKA2

unique,

(id_pracownika),

check (status in (‘A’, ‘N’)));

background image

94

Więzy integralności powinny być stosowane wszędzie

tam, gdzie jest to tylko możliwy, ponieważ

zapewniają w prosty sposób integralność danych.

Jednakże podczas wykonywania różnego rodzaju

operacji wsadowych, czy procesów konserwacji

bazy danych, mogą one przeszkadzać, gdyż nie

zezwolą na wprowadzenie do tabeli żadnego

rekordu, który w jakikolwiek sposób naruszyłby

więzy integralności.

Czasami

więc

należy

zastosować

tymczasowe

wyłączenie

ograniczeń

integralnościowych.

Umożliwi to wstawianie do tabeli rekordów

naruszających integralność danych. Rekordy takie

nazywane są wyjątkami od reguł integralności (ang.

constraint exceptions

). Jeśli takie rekordy znajdą

się w tabeli będącej pod wpływem ograniczenia,

muszą zostać skorygowane zanim ograniczenie to

zostanie włączone.

Oracle nie zezwoli

na włączenie

ograniczenia,

jeśli

jakiekolwiek

dane

będą

naruszały definiowaną przezeń regułę.

background image

95

Tak więc rekordy nie poddające się tej zasadzie

muszą

być

przed

włączeniem

ograniczenia

usunięte lub poprawione. Wszystkie rekordy

łamiące więzy integralności mogą być przeglądane

w tabeli wyjątków. Wyłączone ograniczenie może

być wymuszone poprzez instrukcję

alter table

wraz ze słowem kluczowym

enforce.

Tabele, których ograniczenia znajdują się w stanie

wymuszonym, mogą zawierać niepoprawne dane,

jednak nie mogą przyjmować nowych danych

naruszających integralność. Wynika z tego, że

podczas

wymuszania

ograniczenia

nie

jest

wymagane sprawdzanie poprawności wszystkich

danych; dzięki temu operacja wymuszania jest o

wiele szybsza niż operacja włączania. Wymuszone

ograniczenia mogą być włączone w późniejszym

terminie (na przykład w okresie rzadkiego

korzystania z bazy danych), w celu sprawdzenia

integralności danych znajdujących się w tabeli.

background image

96

W celu włączenia, wyłączenia lub wymuszenia

więzów integralności, użytkownik musi być
właścicielem tabeli, lub posiadać uprawnienia

ALTER TABLE

albo

ALTER ANY TABLE.

background image

97

background image

98

background image

99

background image

100

background image

101


Document Outline


Wyszukiwarka

Podobne podstrony:
Systemy Baz Danych (cz 1 2)
Systemy Baz Danych (cz 1 0)
Systemy Baz Danych (cz 1 2)
SBD wykład 2, student - informatyka, Systemy Baz Danych
SBD wykład 3, student - informatyka, Systemy Baz Danych
SBD wykład 1, student - informatyka, Systemy Baz Danych
SYSTEM B, student - informatyka, Systemy Baz Danych
R. 6-2 Struktura OBD-przyklad 1, Uczelniane, Semestr 2, Zaawansowane Systemy Baz Danych, WYKŁ [OZaik
Systemy baz danych 10
Wprowadzenie do systemow baz danych wprsys
Systemy baz danych Kompletny podrecznik Wydanie II 2
Wprowadzenie do systemow baz danych wprsys
Systemy baz danych w7
perspektywy w systemach baz danych
Systemy baz danych Kompletny podrecznik Wydanie II
Wprowadzenie do systemow baz danych

więcej podobnych podstron