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