Transcript wyklad2

Wykład 2 – Budowa systemu zarządzania bazą
danych na przykładzie Oracle Express Edition
1
u2
p1
p2
..........
..........
SGA - Globalny Obszar Systemowy
(System Globa Area)
Procesy tła, tzw. drugoplanowe
(background processes)
..........
un
pn
procesy użytkowników
procesy usługowe
instancja bazy danych
u1
Źródło:
R. Wrembel, J. Jezierski, M. Zakrzewicz,
System zarządzania bazą danych Oracle7
i Oracle8, Wydawnictwo Nakom, Poznań,
1999.
pliki bazy danych
2






pliki konfiguracyjne (init files) — najważniejszy z nich to plik parametrów (tzw.
parameter file, w skrócie pfile) o nazwie init<SID>.ora, gdzie <SID> to unikalny
(najczęściej 4-literowy) identyfikator instancji na danej maszynie, plik jest
tekstowy i zawiera informacje o ustawieniach przy starcie bazy, a także o nazwie i
położeniu plików kontrolnych
•pliki kontrolne (control files) — binarne, bardzo ważne, zawierają informacje o
położeniu WSZYSTKICH plików bazy danych wraz z datą i godziną ich zamknięcia
pliki danych (data files) — przechowują dane w postaci binarnej, z danych w nich
zawartych korzysta się za pośrednictwem procesów serwera (tła)
pliki dziennika powtórzeń (redo-log files) — rejestrują wszystkie operacje
wykonane na bazie (na wypadek awarii), moga˛ być aktywne (*.log) lub
zarchiwizowane (*.arc)
pliki śladu (trace files) — zawierają informacje o uszkodzeniach i o błędach
procesów tła oraz procesów użytkowników
pliki kodu (code files) — wszelkie kody źródłowe, skrypty SQL itp.
3
SGA
1) bufor
danych
2) bufor
dziennika
powtorzeń
3) obszar współdzielony
(biblioteki i słowniki)
SGA – System Global Area
1) zawiera dane załadowane z dysku, okresowo zapisywane,
DIRTY_BLOCKS
wielkość bufora danych = DB_BLOCK_SIZE * DB_BLOCK_BUFFERS
2) przechowuje informacje o zmianach, ma strukture˛ cykliczna˛
wielko´s´c bufora dziennika powtórze´n = LOG_BUFFER
3) wielkość obszaru współdzielonego = SHARED_POOL_SIZE
4
ang. background processes






DBWR — database writer — zapisuje DIRTY BLOCKS na dysk
(co 3 sek., ew. na każdy sygnał CHECKPOINT)
LGWR — log writer — zapisuje zmiany do loga
CKPT — checkpoint — sygnalizuje tzw. punkt kontrolny +
aktualizuje nagłówki plików kontrolnych
SMON — system monitor — odtwarza instancję, scala wolne
obszary na dysku
PMON — process monitor — zwalnia zasoby procesu
użytkownika, który się ”zawiesił”
ARCH — archiwizator — opcjonalny, spowalnia pracę,
umożliwia skonfigurowanie serwera lustrzanego
5
Stany bazy danych:
 IDLE — nieczynna, pliki zamknięte, procesy tła nie działają
 NOMOUNT — stan po odczytaniu pfile-a, zainicjowaniu SGA
i uruchomieniu procesów tła, stan służący do tworzenia
nowej bazy danych
 MOUNT — stan po odczytaniu plików kontrolnych i otwarciu
poła˛cze´n z plikami danych i log-ami
 OPEN — stan otwarcia bazy, dane są dostępne dla
użytkowników (w wyjątkowych sytuacjach stan można
uruchomić w tzw. trybie RESTRICTED, wtedy dostęp do bazy
mają tylko administratorzy)
6
Z dowolnego stanu można przejść do stanu IDLE poleceniem
shutdown
svrmgr>shutdown normal — czeka do zamknięcia ostatniej sesji,
nie pozwala otwierać nowych
svrmgr>shutdown immediate — (domyślne), wycofuje wszystkie
transakcje
svrmgr>shutdown abort — przerywa transakcje, stosujemy tylko
w sytuacjach awaryjnych
7
Ze stanu IDLE można przejść do dowolnego stanu poleceniem
startup
svrmgr>startup nomount [pfile=%ORACLE_HOME%\initbaza.ora]
svrmgr>startup mount
svrmgr>startup open (domyślnie startup)
8
fizycznie ↔ pliki
logicznie ↔ przestrzenie tablicowe
(tzw. TABLESPACES), każda przestrzeń składa się z co najmniej
1 pliku
9
NAGŁÓWEK
informacja
o transakcji
informacja
o segmencie
DANE
REZERWA
informacja
o rekordzie
BLOK — najmniejszy, niepodzielny z punktu wiedzenia bazy
danych obszar pamięci, jego rozmiar określa parametr
DB_BLOCK_SIZE (np. 2048B lub 4096B)
O wielkości pustego obszaru decyduje parametr PCTFREE
Blok jest niepodzielny — zawsze należy do jednego pliku
10
EXTENT — ciągły obszar bloków, z faktu
ciągłości wynika przynależność całego
extentu do jednego pliku
Plik 1
Plik 2
Extent 1
B
B
B
B
Extent 3
B
B
B
B
B
Extent 2
B B
B
B
11
SEGMENT — składa się z extentów, położonych (w ogólności)
na różnych plikach dyskowych, obiekty bazy danych (tabele,
indeksy itp.) przechowywane są w konkretnych segmentach
Plik 1
Plik 2
Extent 1
B
B
B
B
Extent 2
Extent 3
B
B
B
B
B
B B
B
B
Segment
Extent 1
Ext. 2
Extent 3
12



segmenty danych
segmenty tymczasowe
segmenty wycofania
13
służą do przechowywania danych
(tabel, indeksów, klasterów,
procedur wbudowanych, itp.)
14
przechowują tymczasowe wyniki
przetwarzania (obiczeń, grupowania,
sortowania), które są wykorzystywane w
następnym etapie
select druzyna, nazwisko, sum(pkt)
from tabela_wynikow
group by nazwisko
order by druzyna descending;
15
przechowują dane sprzed ich zmodyfikowania przez
nie zatwierdzoną transakcję
update tabela_ocen
set ocena=’5.0’
where nr_idx=68889;
stara wartość oceny (np. 4.0) wchodzi do segmentu
wycofania, nowa — do segmentu danych
polecenie commit zapisuje segment danych na dysku
i zwalnia segment wycofania
polecenie rollback przepisuje zawartość segmentu
wycofania do segmentu danych
16
co najmniej 1 segment wycofania musi istnieś (domyślnie
System), lista rollback segmentów znajduje się w widokach
v$rollname i DBA_ROLLBACK_SEGS (polecenie desc)
przypisanie konkretnego segmentu wycofania do transakcji
set transaction use rollback segment nazwa_RBS;
tworzenie nowego segmentu wycofania
create rollback segment nazwa_RBS tablespace nazwa_TBS
storage (initial 1k next 1k maxextents 100);
uaktywnienie segmentu wycofaniaalter rollback segment
nazwa_RBS online;
usunięcie segmentu wycofania
alter rollback segment nazwa_RBS offline;
drop rollback segment nazwa_RBS;
17
TABLESPACE — logiczny kontener, składa sią z co
najmniej 1 datafile’a, ułatwia zarządzanie limitami,
dostępem i kopiami zapasowymi
Zaleca się odseparowanie następujących elementów:
— dane i obiekty użytkowników
— segmenty tymczasowe i segment system
— segmenty wycofania
18



ustawienie zmiennych środowiska systemu operacyjnego
ORACLE_HOME i ORA_SID, utworzenie w katalogu
ORACLE_HOME pliku parametrów init<SID>.ora,
przykładowe ustawienia:
dbname=mojabaza
dbfiles=20
controlfiles=(c:\db\ctl1baza.ora,d:\db\ctl2baza.ora)
db_block_size=...
nls_date_format=yyyy/mm/dd
utworzenie odpowiednich katalogów
uruchomienie narzędzia Server-Manager (svrmgr??.exe) i
połączenie się z instancją za pomocą polecenia connect
internal
19
wystartowanie instancji do stanu nomount
startup nomount pfile=%ORACLE_HOME%\initbaza.ora
 wydanie polecenia create database ...
create database mojabaza
logfile ’c:\db\bazalog1.ora’ size 500k ’d:\db\bazalog2.ora’
size 500k
datafile ’c:\db\bazasyst.db’ size 20M noarchivelog;
 otwarcie pustej bazy danych
startup open
 uruchomienie standardowych procedur (kreujących słowniki
systemowe i synonimy), np.
@catdbsyn.sql

20
utworzenie własnej przestrzeni tablicowej
create tablespace nowa_TBS
datafile ’plik’ size 100M online
default storage (initial ... next ...
pctincrease...);
ewentualna zmiana rozmiaru pliku
alter database datafile ’plik’ resize 200M;

21
Tabela (Table) jest obiektem dynamicznym, jak każdy obiekt
składa się ze zbioru rozszerzeń, obiekt należy do pewnego
schematu, nazwa schematu jest tożsama z nazwą
użytkownika, który obiekt utworzył
connect tomek/haslo
create table pracownicy
(id NUMBER(4),
nazwisko VARCHAR2(30)
stanowisko VARCHAR2(15)
data_ur DATE)
tablespace moja_TBS
storage (initial ... next ...)
22



SQL — structured query language — język
zapytań (słowo „zapytanie” rozumiane w
ogólnym sensie jako „polecenie”)
polecenia DDL — data definition language,
np. create table..., alter user ...
polecenia DML — data manipulation
language, np. select…, update
23
select * from tomek.pracownicy;
select * from pracownicy where id=100;
select max(data_ur) from pracownicy;
select stanowisko, count(*) from pracownicy group by
stanowisko;
select tab1.nazwisko, tab2.pkt from tab1, tab2
where tab1.pesel=tab2.pesel;
24
delete from pracownicy where id=100; commit;
update pracownicy set stanowisko=’emeryt’
where data_ur<to_date(”1940/01/01”);
commit;
25
insert into pracownicy values(1232, ’Kowalski’, ’kelner’,
to_date(”1968/01/21”)); commit;
insert into emeryci select * from pracownicy where
data_ur<to_date(”1940/01/01”); commit;
26
create table NAZWA_TABELI
 ( atrybut typ, [primary key], [unique], [not null], [check]
 atrybut typ [default wartość]
 ....)
 pctfree … maxtrans ....
 tablespace NAZWA_PRZESTRZENI_TABLICOWEJ
 storage
 ( initial ...
 next ...
 pctincrease ...
 minextents ...
 maxextents ...
 );

27
Dostępne widoki:
DBA_TABLES
ALL_TABLES
USER_TABLES
28



są dodatkowymi zbiorami wskaźników do rekordów
uporządkowanymi ze względu na wskazywane wartości
z 1 tabelą można skojarzyć wiele indeksów
indeks można utworzyć zarówno do pustej, jak i do pełnej
tabeli
Duża liczba indeksów
Mała liczba indeksów
szybkie wyszukiwanie
powolne wyszukiwanie
duża zajętość pamięci
oszczędność pamięci
dodatkowe operacje przy
zapytaniach typu insert
i update
szybkie wstawianie i
modyfikacja
29
create index NAZWA_INDEKSU
on NAZWA_TABELI
(atrybut, atrybut, atrybut,...)
pctfree ...
tablespace NAZWA_PRZESTRZENI_TABLICOWEJ
storage (...);
K...
D...
S...
30
Zastosowanie: gdy lista możliwych wartości w
kolumnie jest krótka np. dzień_tygodnia, płeć
Działanie: do każdego wiersza dodawany jest
łańcuch bitowy zawierający jedną jedynkę na
odpowiedniej pozycji (np. środa - 0010000)
Zalety: mniejsza zajętość pamięci, szybsze
tworzenie nowego indeksu, krótszy czas
odpowiedzi w przypadku zapytań z licznymi
koniunkcjami
31
zawężają pole widzenia danych
równoważna nazwa: perspektywy
create VIEW studenci_ASI
as select * from studenci
where spec=’ASI’;
na widoku można wykonywać dowolne
operacje (select, insert, update)
32