Architektura Systemu Zarządzania Bazą Danych Oracle

Podobne dokumenty
Administracja bazy danych Oracle 10g

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

PODSTAWY BAZ DANYCH. 7. Metody Implementacji Baz Danych. 2009/ Notatki do wykładu "Podstawy baz danych" 1

Zadania do wykonania na laboratorium

System Oracle podstawowe czynności administracyjne

startup pfile= '$HOME/admin/pfile/initDBx.ora'; create spfile from pfile= '$HOME/admin/pfile/initDBx.ora';

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

(c) Politechnika Poznańska, Instytut Informatyki

Organizacja przestrzeni danych (2) Struktura bazy danych Oracle. Przestrzenie tabel. baza danych. tabel. tabel. struktury. (relacje, schematy,

Wykład 8. SQL praca z tabelami 5

Fizyczna struktura bazy danych w SQL Serwerze

Autor: Joanna Karwowska

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Uprawnienia, role, synonimy

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

PODSTAWY BAZ DANYCH. 10. Partycjonowanie tabel i indeksów. 2009/ Notatki do wykładu "Podstawy baz danych"

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Partycjonowanie tabel (1)

Zarządzanie strukturą bazy danych Oracle11g

Przed modyfikacją buforów danych proces serwera zapisuje w buforze dziennika powtórzeń wszystkie zmiany dokonane w bazie danych.

Bazy danych - Materiały do laboratoriów VIII

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

SQL (ang. Structured Query Language)

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Zarządzanie wolną przestrzenią w bloku. Rozszerzenia

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

PODSTAWY BAZ DANYCH Wykład 6 4. Metody Implementacji Baz Danych

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

CREATE USER

PODSTAWY BAZ DANYCH Wykład Partycjonowanie tabel i indeksów

Tabela wewnętrzna - definicja

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Bazy danych 10. SQL Widoki

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Ref. 7 - Język SQL - polecenia DDL i DML

Wydajność hurtowni danych opartej o Oracle10g Database

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Wykład 5. SQL praca z tabelami 2

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

1 Projekt fizyczny 1. 3 Perspektywy słownika danych Źródła 12

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Bazy danych 6. Klucze obce. P. F. Góra

Oracle11g: Wprowadzenie do SQL

Przykładowa baza danych BIBLIOTEKA

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Wykład 4. SQL praca z tabelami 1

Widok Connections po utworzeniu połączenia. Obszar roboczy

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) )

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

(a) T (b) N (c) N (d) T

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Paweł Rajba

Relacyjne bazy danych. Podstawy SQL

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Administracja i programowanie pod Microsoft SQL Server 2000

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

Hurtownie danych - przegląd technologii

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Podstawy technologii WWW

Systemy GIS Tworzenie zapytań w bazach danych

Zarzadzanie transakcjami. Transakcje

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Oracle PL/SQL. Paweł Rajba.

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Język SQL, zajęcia nr 1

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. zadania

Partycjonowanie. Partycjonowanie tabel (1)

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Internetowe bazy danych

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

WPROWADZENIE DO BAZ DANYCH

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Relacyjne bazy danych. Podstawy SQL

SIECI KOMPUTEROWE I BAZY DANYCH

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Transkrypt:

Architektura Systemu Zarządzania Bazą Danych Oracle Dane są przechowywane w plikach (miejsce na dysku wraz z przypisaną mu nazwą), których rozmiar z reguły nie jest stały jeśli zostaną wprowadzone jakieś nowe informacje, ich rozmiary zwiększą się plik zajmuje coraz więcej miejsca na dysku, aż do dopuszczalnego maksymalnego rozmiaru. Procesem dystrybucji informacji z pliku do wielu mniejszych obszarów dysku, często fizycznie leżących z dala od siebie, zarządza system operacyjny, który również logiczne łączy te mniejsze części bez wiedzy użytkownika. Dla niego plik wygląda jak niepodzielna jednostka. W systemie organizacyjnym systemu Oracle występują pliki, ale jak się okaże logiczna struktura systemu daleko wykracza poza pojęcie pliku. Tym niemniej także w przypadku Oracle pliki danych to pliki systemu operacyjnego wykorzystywane do przechowywania danych. A zatem także w przypadku systemu Oracle baza danych składa się z plików danych, które logicznie są przypisane do przestrzeni tabel (tablespace) logicznej części bazy danych. A zatem baza danych dzielona jest na obszary logiczne, zwane przestrzeniami tabel. Każda przestrzeń tabel musi zawierać co najmniej jeden plik danych, zaś każdy plik danych może przynależeć tylko do jednej przestrzeni tabel. W systemie Oracle zazwyczaj występują przestrzenie tabel: SYSTEM (wewnętrzny słownik danych systemu Oracle), SYSAUX (pomocnicze wewnętrzne obiekty systemu), USERS (obiekty użytkownika) inne przestrzenie zawierające tabele aplikacji, indeksy i dodatkowe struktury bazy danych. Przestrzeń tabel SYSTEM zawierająca słownik danych wraz z nazwami i położeniem wszystkich przestrzeni tabel, tabel indeksów i klastrów bazy danych występuje w każdej bazie danych. Właścicielami obiektów wchodzących w skład przestrzeni tabel SYSTEM są użytkownicy SYS i SYSTEM. Inni użytkownicy nie powinni być właścicielami obiektów w tej bazie danych, ponieważ może to mieć wpływ na pozostałą część bazy danych. System Oracle tworzy co najmniej dwie przestrzenie tabel dla każdej bazy danych SYSTEM i SYSAUX. W pierwszej kolejności jest tworzona przestrzeń SYSTEM, a w następnie SYSAUX. Także w większości implementacji przestrzeń tabel USERS jest tworzona automatycznie i stanowi domyślną przestrzeń tabel. Podczas tworzenia nowej tabeli istnieje możliwość określenia, w której przestrzeni tabel ma się ona znajdować. Pliki danych mogą mieć stały rozmiar lub można je tak skonfigurować, aby wypełniane, automatycznie rozszerzały się do zdefiniowanego limitu. Każda przestrzeń tabel składa się z co najmniej jednego pliku danych. Przestrzeń dyskowa zajmowana przez każdy plik danych jest logicznie podzielona na mniejsze jednostki: bloki, obszary (extenty), segmenty. Każdy obiekt tworzony w bazie danych jest przypisywany do przestrzeni tabel na podstawie ustawień domyślnych lub opcji polecenia tworzącego. W systemie Oracle obiekty: tabele, indeksy i inne przechowywane są w segmentach. Wiersze tabeli mogą znajdować się w wielu plikach danych. Uwaga. Zarządzanie przestrzenią przydzielaną przestrzeniom tabel, plikom danych, segmentom, czy obiektom bazy danych jest jednym z najważniejszych zadań administratora. Przestrzenie tabel

Powyższy rysunek przedstawia dwie przestrzenie tabel: p1_ts oraz p2_ts. Podczas tworzenia nowej tabeli istnieje możliwość wyboru pomiędzy przestrzenią p1_ts a przestrzenia p2_ts, w której zostanie umieszczona nowa tabela. Bazy danych mogą się składać z najwyżej 64 tysięcy plików danych. Ponieważ przestrzeń tabel dużych plików może zawierać pliki 1024 razy większe niż przestrzeń tabel małych plików, zaś przestrzenie dużych plików mają 32-kilobajtówe bloki w 64-bitowym systemie operacyjnym, baza danych może osiągać rozmiar do 8 eksabajtów (eksabajt to w przybliżeniu milion terabajtów). Obsługa przestrzeni tabel Są trzy czynności związane z obsługą przestrzeni tabel: tworzenie, modyfikacja, usuwanie. Tworzenie przestrzeni tabel. CREATE TABLESPACE nazwa_przestrzeni DATAFILE plik SIZE rozmiar [ K M G T ] [ONLINE OFFLINE ] [ PERMANENT TEMPORARY ] DEFAULT STORAGE ( [ INITIAL rozmiar [ K M ] ] [ NEXT rozmiar [ K M ] ] [ MINEXTENTS liczba ] [ MAXEXTENTS liczba UNLIMITED ] [ PCTINCREASE liczba ] ); Parametry polecenia CREATE TABLESPACE Parametr nazwa_przestrzeni plik DATAFILE ONLINE/OFFLINE PERMANENT/ TEMPORARY Opis Nazwa przestrzeni tabel powinna odzwierciedlać jej rolę Pełna ścieżka dostępu Zbiór atrybutów dotyczących pliku z danymi: SIZE początkowy rozmiar zarezerwowany dla pliku AUTOEXTEND włączenie lub wyłączenie możliwości automatycznego zwiększania rozmiaru pliku w miarę potrzeb przyjmuje dwie wartości: OFF (wyłączony) oraz ON (włączony) Określa stan przestrzeni tabel - czy jest aktywna (ONLINE) czy nieaktywna (OFFLINE) Pozwala na zdefiniowanie, czy przestrzeń tabel ma przechowywać obiekty bazy danych (PERMANENT), czy być wykorzystana jako magazyn segmentów tymczasowych (TEMPORARY)

DEFAULT STORAGE EXTENT MANAGEMENT Ilość miejsca domyślnie zarezerwowanego dla obiektu, jeśli podczas tworzenia nie został zdefiniowany jego rozmiar. Atrybut ten wymaga podania następujących danych: INITIAL wielkość pierwszego zaalokowanego obszaru, NEXT wielkość kolejnych alokowanych obszarów, MINEXTENTS najmniejsza liczba rezerwowanych obszarów dla pojedynczego obiektu, MAXEXTENTS maksymalna liczba obszarów przypisanych do obiektu (wartość tego parametru może wynosić UNLIMITED (nieograniczona)), PCTINCREASE procent, o jaki należy zwiększać kolejne alokowane obszary, wyliczany na podstawie parametru NEXT Parametr ten wymaga zadeklarowania następujących atrybutów: DICTIONARY zarządzanie obszarami alokacji oparte na słowniku danych, LOCAL część pliku zawierającego przestrzeń tabel zostanie wykorzystana do przechowywania indeksu bitmapowego wynika to z faktu, iż informacje o położeniu obszarów są zapisywane właśnie w strukturze bitmapowej znajdującej się wewnątrz plików danych przestrzeni. Po utworzeniu segmentu nie da się zmienić wartości parametrów INITIAL oraz MINEXTENTS bez przeorganizowania obiektu. Domyślnie wartości parametrów składowania przestrzeni tabel można przeglądać za pośrednictwem widoków słownikowych dba_tablespaces oraz user_tablespaces. Tworzenie przestrzeni tabel Przykład. Zostanie utworzona przestrzeń tabel p_ts przy podaniu minimalnej liczby wymaganych atrybutów. Następnie za pomocą odpowiedniej perspektywy słownikowej zostaną odczytane ustawienia domyślne: CREATE TABLESPACE p_ts DATAFILE G:\oracle\oradata\mydb\p_ts.dbf SIZE 1M; Za pomocą perspektywy user_tablespaces można obejrzeć pozostałe wartości określające utworzoną przestrzeń tabel p_ts. SELECT * FROM user_tablespaces WHERE tablespace_name = P_TS ; Począwszy od wersji Oracle 10g, użytkownik może zmieniać nazwę przestrzeni tabel za pomocą polecenia ALTER TABLESPACE.

Usuwanie przestrzeni tabel Do trwałego usunięcia przestrzeni tabel z bazy danych służy polecenie DROP TABLESPACE. Usuwana przestrzeń tabel musi być nieaktywna (OFFLINE), co zapewni, iż podczas jej usuwania nie będą związane z nią żadne transakcje. Należy podkreślić, iż usuwanie przestrzeni tabel wiąże się jedynie z usunięciem wpisu w słowniku danych sam plik będący jej fizyczną reprezentacją pozostanie nietknięty, chyba że zostanie podana dodatkowa klauzula AND DATAFILES. Algorytm usuwania przestrzeni tabel zapewnia, że skasowane zostaną również powiązane z nią pliki: 1. Nadanie przestrzeni tabel stanu OFFLINE. 2. Wykonanie polecenia DROP TABLESPACE wraz klauzulą INCLUDING CONTENTS AND DATAFILES, co zapewni usunięcie wszystkich plików. Przykład. ALTER TABLE p_ts OFFLINE; DROP TABLESPACE p_ts INCLUDING CONTENTS AND DATAFILES; Uwaga. Jeśli w usuwanej przestrzeni nie zostały jeszcze umieszczone żadne obiekty, nie ma konieczności dołączania klauzuli INCLUDING CONTENTS. Jednak jeśli zależy nam na usunięciu plików z danymi, wymagane jest podanie pełnej frazy, czyli INCLUDING CONTENTS AND DATAFILES, nawet jeśli przestrzeń nie została nigdy wykorzystana. Bloki Najmniejszą jednostką do przechowywania danych blok. Blok jest jednostką we-wy, tzn. jest to ilość danych przeniesionych pomiędzy pamięcią masową a pamięcią operacyjną w czasie jednego dostępu do pamięci masowej. Typowe wielkości bloków to1, 2 lub 4 kb. Wolny obszar bloku jest zarezerwowany na uaktualnianie rekordów znajdujących się w bloku. Budowa bloku parametry składowania Baza danych Oracle przechowuje bloki danych w pamięci. Obowiązkiem administratora jest zapewnienie tego, aby bloki te były jak najgęściej wypełnione danymi, gdyż niedokładnie zapełnione bloki powodują spadek wydajności pracy buforów bazy danych. To, w jaki sposób zarządzany jest obszar w blokach danych, zależy od ustawień parametrów składowania (storage parameters):

1. PCTFREE liczba określa, jaka część bloku jest zarezerwowana na rozrost wierszy, które już są w bloku danych (wyrażony w % ) domyślną wartością jest PCTFREE 10 2. PCTUSED liczba określa rozmiar przestrzeni bloku poniżej, którego nie będzie dozwolone wstawianie nowego rekordu (tj. określa poziom graniczny, przy którym blok może trafić z powrotem na listę wolnych bloków) (wyrażony w % ) domyślną wartością jest PCTUSED 40 Omówione parametry określa się przy definicji relacji. Jeśli rekordy tabeli nie będą aktualizowane, należy dla takiej tabeli ustawić możliwe najniższą wartość parametru PCTFREE. Natomiast w przypadku aplikacji intensywnie wykorzystujących operacje INSERT i DELETE, warto rozważyć zwiększenie wartości PCTUSED, by zwalniane bloki były jak najszybciej dodawane do listy wolnych bloków. Zbyt mała wartość parametru PCTFREE może zmusić bazę danych do przeniesienia wiersza do innego bloku w wyniku wykonania na nim operacji UPDATE. To z kolei zmusza bazę do odczytania kliku bloków dla jednego rekordu, co zwiększa liczbę logicznych odczytów potrzebnych do wykonania polecenia. Jeśli rekord nie mieści się w jednym bloku może być przechowywany w wielu blokach. Obszary Obszar (ang. extent), zwany inaczej ekstentem, jest to ciągły obszar bloków, który musi znajdować się w jednym pliku dyskowym. W przypadku segmentu składającego się z wielu obszarów nie ma gwarancji ciągłości tych obszarów. Segmenty Segment to obiekt zajmujący przestrzeń w bazie danych Oracle, taki jak tabela czy indeks, złożony z jednego lub wielu ekstentów. Są to zestawy sąsiadujących ze sobą bloków. Ilość przestrzeni zajmowanej przez segment określają parametry składowania podane w klauzuli STORAGE. Parametry te są odczytywane przez bazę podczas tworzenia segmentu. Jeśli nie zostaną jawnie podane parametry składowania w poleceniu CREATE TABLE, CREATE INDEX lub CREATE CLUSTER, baza danych skorzysta z domyślnych ustawień składowania dla docelowej przestrzeni tabel.

Każdy segment obejmuje tzw. obszar początkowy. Jeśli dany obszar zapełni się danymi (segment się zużyje), segment otrzymuje nowy obszar. Proces rozszerzania segmentu (zwiększanie liczby obszarów) może trwać do momentu, gdy zostanie spełniony jeden z trzech warunków: zostanie osiągnięta liczba obszarów określona przez wartość MAXEXTENTS, użytkownikowi skończy się miejsce przydzielone w ramach limitów dla danej przestrzeni tabel, skończy się miejsce przestrzeni tabel (pliki danych nie będą mogły się samoczynnie rozszerzać). W tym momencie wprowadzanie nowych informacji do tabel będzie możliwe tylko w takim przypadku, w kiedy ktoś doda nowy plik do przestrzeni tabel lub ją rozszerzy. Dostępne w Oracle typy segmentów to: TABLE (segmenty tabel), INDEX (segmenty indeksów), ROLLBACK (segmenty wycofania), TEMPORARY (segmenty tymczasowe), PARTITION (segmenty partycji), CLUSTER (segmenty klastrów). Segmenty danych, zwane segmentami tabel, przechowują rekordy dane związane z tabelami. Każdy segment danych ma blok nagłówkowy, który zawiera niezbędne informacje do zarządzania miejscem w segmencie. Obszar przydzielony segmentowi danych pozostaje w nim, dopóki segment nie zostanie usunięty poleceniem DROP, obcięty poleceniem TRUNCATE lub skompresowany. Usuwanie wierszy z tabeli za pomocą polecenia DELETE nie ma wpływu na ilość przestrzeni przydzielonej tabeli. Segmenty indeksów Segmenty indeksów, tj. segmenty zawierające indeksy, nie powinny być przechowywane w tej samej przestrzeni tabel, co związane z nimi tabele. Jest to spowodowane tym, iż wykonywana jest na nich ogromna liczba operacji wejścia-wyjścia, zarówno w czasie modyfikacji, jak i dodawania danych. Podobnie jak segmenty tabel, zatrzymują przydzieloną im przestrzeń aż do momentu ich usunięcia, przy czym mogą one być również usunięte pośrednio przy okazji usunięcia tabeli lub klastra, które indeksują. Zmianę parametrów składowania i przestrzeni tabel indeksów umożliwia klauzula REBUILD polecenia ALTER INDEX. Poniższe polecenie przebuduje indeks kraj_klient w przestrzeni tabel indeksy: ALTER INDEX kraj_klient REBUILD TABLESPACE indeksy; Podczas przebudowywania indeksu stara wersja indeksu będzie tymczasowo współistnieć z nową. Oznacza to, że przed wykonaniem polecenia ALTER INDEX REBUILD należy upewnić się, czy wystarczy w bazie miejsca na przechowywanie obu indeksów. Segmenty wycofania (ang. rollback segments) system Oracle tworzy podczas obsługi transakcji i przechowuje w nich poprzednie obrazy zmodyfikowanych bloków i wierszy. Z segmentów wycofania korzystają również zapytania. Ponieważ wykonywane przez system zapytania muszą zachowywać spójność

danych, dlatego zachodzi konieczność rekonstrukcji danych w momencie rozpoczęcia zapytania. Jeśli pewna transakcja zakończy się po starcie zapytania, system Oracle do przywrócenia obrazu danych użyje segmentu wycofania z zapisanymi, zmodyfikowanymi przez transakcję danymi. Tworzenie tabeli CREATE TABLE nazwa_tabeli ( atrybut typ [ DEFAULT wyrażenie] [,...] ], ) [ PCTFREE liczba ] [ PCTUSED liczba ] [ INITRANS liczba ] [ TABLESPACE nazwa_przestrzeni ] /*przestrzeń użytkownika*/ [ STORAGE /*ilość przestrzeni zajmowanej przez segment określają parametry składowania w niej podane*/ ( [ INITIAL liczba [ K M ]] /* początkowy rozmiar obszaru*/ [ NEXT liczba [ K M ] ] /*rozmiar kolejnego obszaru*/ [ PCTINCREASE liczba ] /*procentowy przyrost wielkości każdego kolejnego obszaru*/ [ MINEXTENS liczba ] /*minimalna liczba obszarów*/ [ MAXEXTENS liczba ] /*domyślna UNLIMITED*/ /*maksymalna liczba obszarów*/ ) ]; INITRANS określa początkową liczbę transakcji, które mogą jednocześnie modyfikować blok danych (nie zalicza się do nich instrukcji SELECT). Wartości tego parametru należą do przedziału od 1 do 255 (wartością domyślną jest 1). Podczas tworzenia tabeli (a także indeksu lub innego segmentu) możemy skorzystać z domyślnych ustawień lokalnie zarządzanej przestrzeni tabel (rozwiązanie zalecane) lub podać własne parametry w podklauzuli STORAGE klauzuli TABLESPACE polecenia CREATE TABLE. Przykładowa klauzula TABLESPACE polecenia CREATE TABLE, które tworzy tabele w lokalnie zarządzanej przestrzeni tabel, może wyglądać następująco TABLESPACE USERS STORAGE (INITIAL 1M NEXT 1M PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 200) W razie braku klauzuli STORAGE zostaną użyte domyślne parametry składowania dla danej przestrzeni tabel. Domyślne wartości parametrów składowania dla poszczególnych przestrzeni tabel możemy przeglądać za pośrednictwem widoków słownikowych dba_tablespaces oraz user_tablespaces. Tworzenie tabeli dyrektywy przestrzeni Dyrektywa PCTFREE ustawia procent bloku zarezerwowany na przyszłe aktualizacje wierszy. Jest konsekwencją faktu, iż wiersze niekoniecznie muszą mieć tę samą długość przede wszystkim ze względu na typy danych VARCHAR2 i LONG, które są zmiennymi z samej definicji. Jeśli blok jest prawie pełny, a wiersz jest aktualizowany w taki sposób, że dodane dane przekraczają przestrzeń wciąż dostępną w bloku, część, która się nie mieści, jest umieszczana w drugim bloku, co daje w wyniku tzw. wiersz łańcuchowy. W oddzielnym kroku cały wiersz może zostać przeniesiony do innego bloku, gdzie będzie pasował całkowicie. W obu przypadkach wynikiem jest niepożądana strata w wydajności.

Dyrektywa PCTFREE powinna być ustawiona na większą liczbę, jeśli dla danej tabeli mają mieć miejsce intensywne aktualizacje zwiększające długość wiersza. Wiersze nie będą wstawiane do takiego bloku, jeśli takie wstawienie zwiększyłoby przestrzeń użytkową poza próg graniczny, jakim jest wartość 100. Dyrektywa PCTUSED określa minimalną przestrzeń użytkową, którą serwer zachowuje w bloku. Jeśli użytek spada poniżej tego procentu, blok staje się kandydatem do wstawienia wiersza. W rzeczywistości oznacza to, iż blok zostanie wyszczególniony na tak zwanej liście FREELIST liście bloków, do których można wstawiać dane. Powodem, dla którego posiadanie jakiejś wartości dla PCTUSED jest ważne jest, że za każdym razem, gdy blok jest umieszczany lub usuwany z listy FEELIST powstają pewne koszty procesowe. Jeśli użycie bloku spada poniżej ustawienia PCTUSED, blok zostanie wyszczególniony na liście FREELIST. Wtedy możliwe jest ciągłe wstawianie wierszy aż wstawianie zredukuje PCTFREE w taki sposób, iż będzie on poniżej swojego progu. Na tym etapie blok zostaje usunięty z listy. Tylko, gdy wystarczająca liczby wierszy zostanie usunięta i zmniejszy się przestrzeń użytkowa na mniej niż PCTFREE, blok ponownie zostanie umieszczony na liście. Jeśli liczba 100 PCTFREE PCTUSED jest dość duża, blok nie będzie wyszczególniany lub usuwany z listy zbyt często, co zredukuje koszty. Jednak przeciętnie będzie więcej nieużytej przestrzeni w bloku niż w sytuacji, kiedy ta liczba będzie bliska zeru. Tabela tylko do odczytu, która nigdy nie będzie aktualizowana może mieć ustawioną PCTFREE na 0, a PCTUSED na 100. W rzeczywistości lepiej jest pozostawić mały procent na PCTFREE, ponieważ może zajść potrzeba aktualizacji takiej tabeli. Dyrektywy, które są ustawiane w poleceniu CREATE TABLE wyznaczają sposób, w jaki przestrzeń jest używana wewnątrz bloku, co ma głównie znaczenie dla wydajności. Tworzenie tabeli na podstawie kwerendy CREATE TABLE nazwa_tabeli ( atrybut typ [ DEFAULT wyrażenie] [,...] ], ) [ PCTFREE liczba ] [ PCTUSED liczba ] [ INITRANS liczba ] [ MAXTRANS liczba ] [ TABLESPACE nazwa_przestrzeni ] [ STORAGE storage ] [ CLUSTER nazwa_klastra (column [, column]...) ] [ AS query ]; Tworząc tabelę na podstawie kwerendy opartej na istniejącej tabeli (tabelach) możemy ją od razu wypełnić danymi pochodzącymi z tabeli bazowej (tabel bazowych) Usuwanie tabeli DROP TABLE nazwa_tabeli [ CASCADE CONSTRAINTS ]; Widoki (perspektywy)

Widok (perspektywa view) jest to logiczna tabela bazująca na jednej lub wielu tabelach. W istocie perspektywa jest przykładem dodatkowych możluiwości, jakie oferuje system Oracle, jeśli chodzi o możliwości połączeń tabel. Perspektywa, choć wygląda jak tabela, to w istocie tabelą nie jest, choćby z tego powodu, iż nie zawiera danych. Utworzyć widok może właściciel tabel, użytkownik posiadający do nich co najmniej uprawnienia SELECT lub administrator. Składnia polecenia tworzącego widok: CREATE VIEW [schemat.]nazwa [(alias [, alias]...)] AS query [WITH READ ONLY] [WITH CHECK OPTION ] ; gdzie : query - identyfikuje kolumny i wiersze tabel, na których bazuje widok. Zapytanie może być dowolnym poprawnym rozkazem SELECT nie zawierającym klauzuli ORDER BY. WITH READ ONLY uniemożliwia aktualizowanie, usuwanie i wstawianie WITH CHECK OPTION zapobiega tworzeniu i zmianom wierszy wykonywanym za posrednictwem widoku, o ile wiersze te nie będą mogły być dostępne dla widoku. Klazula ta może być użyta w widoku bazującym na innym widoku. Uwaga. Możliwości wstawiania wiersza poprzez widoki podlegają różnym ograniczeniom. Przykład. Widok z opcją WITH CHECK OPTION CREATE v_napoje VIEW AS SELECT * FROM towary WHERE kategoria = napoje WITH CHECK OPTION ; Próba wstawienia następujących dwóch rekordów do tabeli towary za pomocą utworzonego widoku INSERT INTO v_napoje VALUES ( 45, napój jabłkowy', 2.10, napoje, 500, Nie ); INSERT INTO v_napoje VALUES ( 112, twaróg półtlusty', 3.40, nabiał, 120, Nie ); zakończy się połowicznym sukcesem pierwszy wiersz zostanie wstawiony, gdyż spełnia warunek widoku, a zatem jest w nim dostępny, natomiast drugi wiersz zostanie odrzucony, gdyż nie spełnia warunku widoku wstawiany produkt nie należy do kategorii napoje.

Klastry Klastry są obiektami do przechowywania tabel. Podział na klastry jest metodą zapisywania tabel, które są ze sobą powiązane, a często także złączone w tym samym obszarze dysku. W celu utworzenia klastra trzeba być właścicielem tabel, które chcemy umieścić w klastrze. Wyróżniamy dwa typy klastrów: indeksowy (ustawienie domyślne), haszowy. Polecenie CREATE CLUSTER tworzy klaster na tabeli lub większej liczbie tabel. Tabele są dodawane do klastra za pomocą instrukcji CREATE TABLE z klazulą CLUSTER. CREATE CLUSTER wymaga co najmniej jednej kolumny klastrowanej dla każdej tabeli muszą one mieć ten sam typ danych i rozmiar, ale nie jest wymagane, aby miały tę samą nazwę. Dla tabel w klastrze wiersze z tą samą wartością kolumny klastrowanej są przechowywane na dysku w tym samym obszarze, w tym samym bloku (blokach) logicznym. Pozwala to poprawić wydajność, gdy kolumny klastra są kolumnami często wykorzystywanymi w łączeniach. Klastry polecenie CREATE CLUSTER Format polecenia tworzenia klastra. Indeksowy Haszowy CREATE CLUSTER nazwa_klastra CREATE CLUSTER nazwa_klastra ( atrybut typ [,atrybut typ [,...] ] ( atrybut typ [,atrybut typ [,...] ] [ PCTFREE liczba ] [ PCTFREE liczba ] [ PCTUSED liczba ] [ PCTUSED liczba ] [ INITRANS liczba ] [ INITRANS liczba ] [ MAXTRANS liczba ] [ MAXTRANS liczba ] [ TABLESPACE nazwa_przestrzeni ] [ TABLESPACE nazwa_przestrzeni ] [ STORAGE [ STORAGE ( [ INITIAL liczba [ K M ]] ( [ INITIAL liczba [ K M ]] [ NEXT liczba [ K M ] ] [ NEXT liczba [ K M ] ] [ PCTINCREASE liczba ] [ PCTINCREASE liczba ] [ MINEXTENS liczba ] [ MINEXTENS liczba ] [ MAXEXTENS liczba ] ) [ MAXEXTENS liczba ] ]; ] HASHKEYS liczba; gdzie: nazwa_klastra to nazwa tworzonego klastra, atrybut i typ mogą być podane identycznie, jak w przypadku polecenia CREATE TABLE, z tym, że nie można podać modyfikatorów NULL i NOT NULL. Ponadto w instrukcji CREATE TABLE co najmniej jedna kolumna klastra musi być zadeklarowana jako NOT NULL. klazula HASHKEYS tworzy klaster haszujący i określa liczbę wartości w haszu zaokrągloną do najbliższej liczby pierwszej (minimalną wartością jest 2). Przykład klastra indeksowego

Przykład. Utworzymy klaster indeksowy KlienciFaktury. CREATE CLUSTER KlienciFaktury (atrybut1 NUMBER(5)); Zastosowanie kolumny atrybut1 jako klucza klastra nie ma znaczenia nigdy więcej nie zostanie on wykorzystany. Jednak jego definicja powinna być zgodna z kluczem głównym dodawanej tabeli. Następnie mogą być tworzone tabele, które zostaną umieszczone w klastrze: CREATE TABLE klienci (kod_klienta NUMBER(5) CONSTRAINT klienci_pk PRIMARY KEY, nazwa VARCHAR2(50), kraj VARCHAR2(50), adres VARCHAR2(50)) CLUSTER KlienciFaktury(kod_klienta); Atrybut kod_klienta jest kolumną tabeli, która zostanie zapisana jako klucz klastra atrybut1. Uwaga. Użycie klauzuli CLUSTER w instrukcji CREATE TABLE wyklucza zastosowanie klauzul TABLESPACE lub STORAGE. W instrukcji CREATE CLUSTER można zdefiniować wiele różnych kluczy klastra, a potem w instrukcji CREATE TABLE zapisać w nich wiele kolumn. W żadnej z tych instrukcji nie ma jawnej specyfikacji, że kolumna kod_klienta zostanie zapisana w kluczu klastra atrybut1. Dopasowanie odbywa się wyłącznie na podstawie pozycji: atrybut1 i kod_klienta były pierwszymi obiektami wymienionymi w odpowiednich instrukcjach CLUSTER. Po utworzeniu klastra indeksowego, przed wprowadzeniem wierszy do tabeli klienci, należy utworzyć indeks klastra: CREATE INDEX KlienciFaktury_indx ON CLUSTER KlienciFaktury; Do klastra można dodać teraz następną tabelę: CREATE TABLE faktury (kod_klienta NUMBER(5) nr_faktury NUMBER(4) CONSTRAINT faktury_pk PRIMARY KEY, data_faktury DATE CONSTRAINT klienci_fk FOREIGN KEY (kod_klienta) REFERENCES klienci(kod_klienta)) CLUSTER KlienciFaktury(kod_klienta); Kiedy te dwie tabele są zapisane w klastrze, każdy klient jest zapisywany tylko raz w kluczu. Do każdego klienta są dołączane kolumny z obu tabel. Dane z obu tabel są zapisywane w jednym miejscu niemal tak, jakby klaster był jedną dużą tabelą zawierającą dane pobrane z obu tworzących go tabel.