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 

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 

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 

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 

dziedzinie 

dostępu  do  danych,  systemów  operacyjnych, 

interfejsów 

użytkownika 

oraz 

komunikacji 

sieciowej. 

celu 

ułatwienia 

zarządzania 

serwerami 

pracującymi 

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 

są 

zgodne 

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ę 

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 

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 

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, 

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 

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.) 

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 

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. 

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 

tle 

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ę 

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). 

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 

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 

są 

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 

są 

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 

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 

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 

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 

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. 

datą). 

Partycje 

są 

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ś 

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. 

tym 

wiedzą 

jedynie 

programiści 

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ę 

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 

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 

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, 

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 

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

 

są 

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 

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