Przestrzeń tabel

Z Wikipedii, wolnej encyklopedii

Przestrzeń tabel (ang. Tablespace) – logiczny kontener (pojemnik), zbudowany z jednego lub więcej fizycznych plików systemu operacyjnego, służący do przechowywania danych w bazach danych takich jak Oracle[1], czy PostgreSQL[2]. Serwer bazy danych Oracle nie zapisuje danych bezpośrednio w systemie plików, zamiast tego używa przestrzeni tabel jako logicznej struktury składowania danych, zbudowanej z jednego lub więcej plików[3]. Przestrzeń tabel jest to więc fizyczno-logiczna encja, służąca jako repozytorium obiektów.

Przestrzenie tabel pozwalają na[1]:

  • Kontrolowanie przydziału przestrzeni dyskowej dla danych bazy danych.
  • Przydzielanie limitów zasobów (ang. quota) użytkownikom bazodanowym.
  • Zarządzanie dostępnością danych (przestrzenie tabel typu online/offline).
  • Określanie szczegółowych polityk zarządzania tworzeniem kopii zapasowych i odtwarzania.
  • Zwiększenie wydajności, poprzez możliwość umieszczenia najczęściej wykorzystywanych tablic w przestrzeniach tabel, których fizyczne pliki składowane na najszybszych dyskach.

Struktury składowania danych[edytuj | edytuj kod]

Diagram przedstawiający zależności między logicznymi i fizycznymi strukturami przechowywania danych w notacji jeden-do-wielu (tzw. notacja kurze łapki).

Struktury składowania danych w systemie Oracle dzielą się zasadniczo na dwie kategorie[1]:

  • Struktury logiczne:
    • Przestrzenie tabel (ang. Tablespaces).
    • Segmenty (ang. Segments).
    • Ekstenty (ang. Extents).
    • Bloki danych Oracle (ang. Oracle data blocks).
  • Struktury fizyczne:
    • Pliki danych (ang. Data Files).
    • Bloki danych systemu operacyjnego (ang. OS blocks).

System Oracle przydziela logiczną przestrzeń dla wszystkich danych w bazie danych[1].

Na najniższym poziomie szczegółowości, serwer bazy danych Oracle przechowuje dane w Oracle’owych blokach danych. Jeden Oracle’owy blok danych odpowiada określonej liczbie fizycznych bloków systemu operacyjnego. Rozmiar takiego bloku określa parametr inicjalizacyjny DB_BLOCK_SIZE, mogący przyjmować wartości z zakresu od 2 KB do 32 KB (domyślnie 8 KB), przy czym muszą to być wartości będące wielokrotnością fizycznego rozmiaru na poziomie urządzenia dyskowego[4]. Bloki danych są najmniejszymi jednostkami alokacji pamięci masowej i mają stały, niezmienny rozmiar.

Ekstent jest zbiorem sąsiadujących (ciągłych) bloków bazodanowych, należących do obiektów Oracle’a. Ekstenty, a tym samym zbiór bloków jest tworzony podczas tworzenia obiektu oraz za każdym razem, kiedy dla obiektu wymagana jest dodatkowa przestrzeń[5].

Segment jest zbiorem ekstentów zaalokowanych dla określonych typów obiektów, np. dla tablic lub indeksów. Dla przykładu, dane tablicy pracownicy przechowywane są we własnych segmentach typu data, podczas gdy każdy indeks tej tablicy przechowywany jest w osobnym, własnym segmencie typu index. Każdy obiekt w bazie danych Oracle, który konsumuje pamięć masową, składa się z przynajmniej jednego segmentu.

Każdy segment może należeć tylko i wyłącznie do jednej przestrzeni tabel. Tym samym, wszystkie ekstenty są również przechowywane w jednej przestrzeni tabel. Jednak na poziomie fizycznym, jeden plik danych może zawierać od jednego do wielu ekstentów. Stąd, wewnątrz przestrzeni tabel przechowywane są segmenty, zawierające ekstenty mogące pochodzić z różnych plików danych. Dla przykładu, jeden ekstent może być przechowywany w pliku dane01.dbf, podczas gdy inny ekstent może być przechowywany w pliku dane02.dbf.

Rodzaje przestrzeni tabel[edytuj | edytuj kod]

W systemie Oracle występują trzy typy przestrzeni tabel[6]:

  • Trwałe (ang. Permanent) – służą do przechowywania trwałych obiektów tworzonych przez użytkowników oraz dane aplikacji. Segmenty obiektów w takich przestrzeniach są fizycznie zapisywane w plikach danych.
Każdemu użytkownikowi w bazie danych Oracle przypisana jest domyślna trwała przestrzeń tabel.
Bardzo niewielka baza danych Oracle może potrzebować tylko domyślnej przestrzeni tabel SYSTEM i SYSAUX, niemniej jednak Oracle zaleca dodatkowe utworzenie przynajmniej jednej trwałej przestrzeni tabel do przechowywania obiektów użytkowników i danych aplikacji[1].
  • Tymczasowe (ang. Temporary) – przechowuje specjalny typ segmentów tymczasowych, które służą do chwilowego przechowywania nietrwałych danych. Dane tymczasowe są w użyciu tylko podczas trwania sesji[1].
Przestrzeń tabel oznaczona jako tymczasowa jest trwała. Tymczasowe są jedynie segmenty w niej przechowywane[7].
  • Wycofania (ang. Undo) – służy do przechowywania specjalnego typu segmentów wycofania. Baza danych Oracle korzysta z danych wycofania w celu wycofania transakcji (Rollback), w celu zapewnienia spójności odczytu, przy odzyskiwaniu bazy danych i do włączania pewnych dodatkowych funkcji bazy danych, takich jak np. Oracle Flashback Query. Instancja bazy danych może mieć tylko jedną aktywną przestrzeń wycofania.

Tryby przestrzeni tabel[edytuj | edytuj kod]

Tryb przestrzeni tabel określa dostępność do danych się w niej znajdujących. Administrator bazy danych może ustawić następujące tryby:

  • Read Write – użytkownicy bazy danych mogą zapisywać i odczytywać dane z przestrzeni tabel. Jest to domyślny tryb działania.
  • Read Only – operacje zapisywania do plików danych znajdujących się przestrzeni tabel o tak ustawionym trybie są uniemożliwione. Użytkownicy nie mogą dokonywać zmian w obiektach, które znajdują się w takiej przestrzeni tabel do czasu aż jej status nie zostanie zmieniony na tryb Read/Write.
Przełączenie przestrzeni tabel w tryb tylko do odczytu, eliminuje potrzebę wykonywania kopii zapasowych i odtwarzania dużych, statycznych porcji bazy danych. Dane w takich przestrzeniach tabel nie zmieniają się, więc nie ma potrzeby potarzania raz wykonanego backupu.
Ponieważ przestrzenie tabel w tym trybie nie są modyfikowane, ich pliki można umieszczać na nośnikach tylko do odczytu, takich jak np.: DVD, czy napędy WORM (ang. Write Once Read Many).
  • Online/Offline – przestrzeń tabel może znajdować się także w trybie online (dostępna) lub offline (niedostępna), gdy baza danych jest otwarta (tryb OPEN bazy danych). Przestrzeń tabel zazwyczaj posiada status online, tak że użytkownicy mogą korzystać z obiektów znajdujących się w tej przestrzeni tabel. Jeśli przestrzeń tabel ma status offline, wówczas niemożliwe jest korzystanie z jej zasobów. Użytkownicy próbujący uzyskać dostęp do obiektów znajdujących się w przestrzeni tabel w trybie offline otrzymają komunikat o błędzie.
Przełączanie przestrzeni tabel w tryb offline może odbywać się w sposób automatyczny lub ręczny. Ręczne przełączenie przestrzeni tabel w tryb offline przez DBA umożliwia przeprowadzanie czynności administracyjnych lub w celu wykonania kopii zapasowej i odtwarzania.
Nie każdą przestrzeń tabel można przełączyć w tryb offline. Restrykcją, co do niemożności zmiany statusu na offline objęte są tymczasowe przestrzenie tabel oraz systemowa przestrzeń tabel SYSTEM.

Wbudowane przestrzenie tabel[edytuj | edytuj kod]

Wszystkie bazy danych Oracle muszą posiadać systemową przestrzeń tabel o nazwie SYSTEM, a od wersji Oracle 10g[8] także przestrzeń tabel o nazwie SYSAUX[9][10]. Trzecią, niezbędną do działania bazy danych Oracle przestrzenią tabel jest TBS UNDO[10].

SYSTEM[edytuj | edytuj kod]

Każda baza danych Oracle, niezależnie od wersji, posiada systemową przestrzeń tabel (ang. System Tablespace), występującą zawsze pod nazwą SYSTEM[3]. Jest ona tworzona automatycznie w trakcie tworzenia każdej nowej bazy Oracle[1]. System Oracle używa tej przestrzeni tabel do zarządzania bazą danych. Zawiera ona następujące struktury[1]:

  • Słownik danych (ang. data dictionary), zawierający informacje o wewnętrznej strukturze bazy danych.
  • Tablice oraz widoki zawierające informacje administracyjne o bazie danych.
  • Skompilowane obiekty, takie jak: procedury, pakiety i wyzwalacze (ang. triggers).

Właścicielem wszystkich obiektów przechowywanych w przestrzeni tabel SYSTEM jest użytkownik uprzywilejowany SYS.

Przestrzeń tabel SYSTEM jest skonstruowana i zarządzana jak każda inna przestrzeń tabel w systemie Oracle. Wymaga jednak wyższego poziomu uprawnień, a także w niektórych aspektach objęta jest szczególnymi restrykcjami. Dla przykładu, nie można zmienić nazwy ani usunąć tej przestrzeni tabel.

SYSAUX[edytuj | edytuj kod]

Od wersji 10g[8], firma Oracle wprowadziła drugą, obligatoryjną[10] przestrzeń tabel o nazwie SYSAUX (skrót od ang. auxiliary tablespace). Udostępnia ona centralne miejsce dla metadanych, które we wcześniejszych wersjach były przechowywane w TBS SYSTEM.

Do wersji Oracle 9i, wiele funkcji systemu Oracle (takich jak np.: katalog odtwarzania menedżera RMAN, Ultra Search, Data Mining, XDB, OLAP i inne), wymagało przygotowania dla nich osobnych przestrzeni tabel. Przestrzeń tabel SYSAUX składuje wszystkie dodatkowe funkcje systemu Oracle w jednym miejscu, które od wersji 10g staje się ich domyślną przestrzenią tabel[11]. Pozwala to na zredukowanie przestrzeni tabel tworzonych domyślnie podczas tworzenia nowej bazy danych[1][9] oraz przyczynia się do zwiększenia wydajności poprzez zrównoleglenie dostępu do danych słownikowych[3][9].

Wielkość przestrzeni tabel SYSAUX zależy od rozmiaru komponentów, które zajmują (ang. occupy) tą przestrzeń tabel[9]. Listę komponentów w TBS SYSAUS, określanych jako rezydenci (ang. occupants)[11], wraz z wykorzystaniem zajmowanej przestrzeni można przeglądać za pomocą perspektywy V$SYSAUX_OCCUPANTS. Minimalna wielkość przestrzeni tabel SYSAUX podczas tworzenia bazy danych to 400 MB[9].

UNDO[edytuj | edytuj kod]

W systemie Oracle 9i wprowadzono automatyczny system zarządzania segmentami wycofania (ang. rollback segments), uwzględniając jednocześnie w strukturze bazy predefiniowany typ przestrzeni tabel – UNDO[3]. Segmenty undo przechowywane i zarządzane przez przestrzeń tabel UNDO służą m.in. do[12][1]:

  • Wycofywania transakcji, w przypadku wydania polecenia ROLLBACK.
  • Odtwarzania bazy danych.
  • Zapewnienia spójności odczytów.

Przestrzeń tabel typu UNDO o nazwie UNDOTBS1 jest automatycznie tworzona podczas tworzenia bazy danych z użyciem kreatora Database Configuration Assistant (DBCA)[12]. W przypadku innego sposobu tworzenia bazy danych, przestrzeń tabel UNDO należy utworzyć ręcznie.

Baza danych Oracle może zawierać wiele przestrzeni tabel typu UNDO, ale w danym momencie aktywna i używana może być tylko jedna przestrzeń tabel tego typu[1]. Kiedy instancja bazodanowa próbuje otworzyć bazę danych, baza danych Oracle wybiera pierwszą dostępną przestrzeń tabel UNDO. Nazwę przestrzeni tabel UNDO określa się w parametrze inicjalizacyjnym UNDO_TABLESPACE.

TEMP[edytuj | edytuj kod]

Tymczasowa przestrzeń tabel, w odróżnieniu od wcześniej wymienionych przestrzeni tabel, nie jest przestrzenią obligatoryjną i niezbędną w każdej bazie danych Oracle. Jednakże staje się ona obowiązkowa, gdy przestrzeń tabel SYSTEM zarządzana jest lokalnie[1]. Jest często tworzona na etapie tworzenia bazy danych pod nazwą TEMP.

Tymczasowe przestrzenie tabel są wykorzystywane do wykonywania pewnego typu operacji, które nie mieszczą się w pamięci:

  • obsługa operacji związanych z sortowaniem,
  • podczas tworzenia i zarządzania indeksami,
  • polecenia SQL ze złączeniami (JOIN),
  • polecenia SQL z grupowaniem (GROUP BY).

Tymczasowe przestrzenie tabel mogą poprawiać współbieżność wielu operacji sortowania, które nie mieszczą się w pamięci[1]. Pozwala to uniknąć przydzielania i usuwania przestrzeni w trwałych przestrzeniach tabel, dzięki czemu ogranicza fragmentację[5] oraz zwiększa efektywność operacji I/O. System Oracle dynamicznie tworzy segmenty tymczasowe i zwalnia przypisaną do nich przestrzeń w chwili, gdy nie są już potrzebne[7].

Fizyczne pliki z których składa się przestrzeń tabel TEMP, w przeciwieństwie do plików danych (data files), nazywane są plikami tymczasowymi (ang. tempfiles). Pliki tego rodzaju są pomijane w czasie wykonywania backupu z wykorzystaniem menedżera RMAN.

Domyślne przestrzenie tabel[edytuj | edytuj kod]

Przestrzenie tabel w bazie danych Oracle w chwili ich tworzenia, obrazowo mogą zostać porównane do pustych pojemników na dane[3]. W momencie, kiedy tworzony jest obiekt w schemacie użytkownika, a wydane przez użytkownika polecenie DDL nie zawiera jawnie wyspecyfikowanej przez niego przestrzeni tabel, serwer bazy danych Oracle zapisze taki obiekt w domyślnej przestrzeni tabel takiego użytkownika[13].

Określenie domyślnej przestrzeni tabel dla użytkownika bazy danych może odbyć się w czasie jego tworzenia, poleceniem SQL CREATE USER lub może zostać później zmienione poleceniem SQL ALTER USER[13]. Poniższy przykład polecenia CREATE USER przedstawia przypisanie użytkownikowi jan domyślnej przestrzeni tabel dane_ts oraz tymczasowej przestrzeni tabel temp_ts:

CREATE USER jan
 IDENTIFIED BY password
 DEFAULT TABLESPACE dane_ts
 TEMPORARY TABLESPACE temp_ts;

W przypadku pominięcia klauzuli DEFAULT TABLESPACE podczas tworzenia nowego schematu użytkownika poleceniem CREATE USER, dla takiego użytkownika użyta zostanie domyśla przestrzeń tabel bazy danych[9]. Podobnie, jak ma to miejsce w przypadku tworzenia użytkownika, domyślną przestrzeń tabel dla całej bazy danych, definiuje się w momencie tworzenia bazy danych poleceniem CREATE DATABASE, ale może także ona zostać później zmieniona poleceniem ALTER DATABASE.

Każdy użytkownik bazy danych ma również przypisaną domyślną tymczasową przestrzeń tabel. Zwykle istnieje jedna tego rodzaju przestrzeń tabel, z której korzystają wszyscy użytkownicy. Domyślnie ustawia się ją na poziomie bazy danych, dzięki czemu wszyscy nowi użytkownicy dysponują tą samą tymczasową przestrzenią tabel, o ile nie określi się innej w poleceniach CREATE USER lub ALTER USER[7].

Aktualnie ustawioną domyślną trwałą przestrzeń oraz domyślną tymczasową przestrzeń tabel na poziomie bazy danych w systemie Oracle można obejrzeć korzystając z perspektywy DATABASE_PROPERTIES, w sposób jak przedstawiono poniżej.

SELECT property_name, property_value
  FROM DATABASE_PROPERTIES
 WHERE PROPERTY_NAME LIKE UPPER('%tablespace%');

Przykładowy wynik powyższego polecenia:

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DEFAULT_PERMANENT_TABLESPACE   USERS
DEFAULT_TEMP_TABLESPACE        TEMP

Rodzaje plików przestrzeni tabel[edytuj | edytuj kod]

Przestrzenie tabel mogą być tworzone i używane jako przestrzenie tabel z dużymi plikami (ang. bigfile tablespace) (w skrócie BFT), które składają się z bardzo dużego, pojedynczego pliku zamiast wielu małych. Tradycyjny i domyślny typ przestrzeni tabel określany jest jako przestrzenie tabel z małymi plikami (ang. smallfile tablespace)[7] (w skrócie SFT). Typy BTF oraz SFT są nierozróżnialne pod względem wykonywanych instrukcji SQL, które nie odnoszą się bezpośrednio do plików danych lub plików tymczasowych[1].

Zastosowanie przestrzeni tabel z dużymi plikami znacznie powiększa maksymalną pojemność bazy danych Oracle. Maksymalny rozmiar pliku bazy danych oraz jej maksymalną wielkość można obliczyć w poniższy sposób[14].

Maksymalny rozmiar pliku jest iloczynem wielkości bloku określonego parametrem inicjalizacyjnym DB_BLOCK_SIZE[4] oraz maksymalnej liczby bloków:

maksymalny rozmiar pliku = db_block_size * maksymalna liczba bloków

Maksymalny rozmiar bazy danych, to iloczyn maksymalnego rozmiaru pliku oraz limitu maksymalnej liczby plików, które można utworzyć:

maksymalny rozmiar bazy danych = maksymalny rozmiar pliku * maksymalna liczba plików

Znając fizyczne limity oprogramowania bazodanowego Oracle, maksymalny rozmiar bazy danych w wersji Oracle 11g[15]:

Przypisy[edytuj | edytuj kod]

  1. a b c d e f g h i j k l m n Logical Storage Structures. W: Oracle Database Concepts, 11g Release 2 (11.2). Oracle, 2011/09. (ang.).
  2. CREATE TABLESPACE. [dostęp 2013-07-10]. (ang.).
  3. a b c d e Baza danych Oracle od środka. W: Jadwiga Gnybek: Oracle – łatwiejszy niż przypuszczasz. Wyd. 3. Gliwice: Helion, 2005/11. ISBN 83-246-0116-3. (pol.).
  4. a b Initialization Parameters. W: Oracle Database Reference, 11g Release 2 (11.2). Oracle, 2011/09. (ang.).
  5. a b Architektura Oracle’a. W: Edward Whalen: Oracle Database 10g. Administracja bazy danych w Linuksie. Maciej Jezierski (tłum.), Marek Pałczyński (tłum.). Gliwice: Helion, 2007/10. ISBN 978-83-246-1197-3.
  6. Managing Database Storage Structures. W: Oracle Database 2 Day DBA 11g Release 2 (11.2). Oracle, 2012/02. (ang.).
  7. a b c d Kevin Loney: Oracle Database 11g. Kompendium administratora. Paweł Gonera (tłum.). Gliwice: Helion, 2010/05. ISBN 978-83-246-2549-9.
  8. a b Oracle Database 10g, Release 1 New Features. W: Oracle Database New Features Guide, 10g Release 1 (10.1). Oracle, 2003/12. (ang.).
  9. a b c d e f Creating and Configuring an Oracle Database - Specifying CREATE DATABASE Statement Clauses. W: Oracle Database Administrator’s Guide, 11g Release 2 (11.2). Oracle, 2011/12. (ang.).
  10. a b c Managing Database Storage Structures. W: Oracle Database 2 Day DBA 11g Release 2 (11.2). Oracle, 2012/02. Cytat: Every database using Oracle Database 10g release 1 (10.1) or later must have a SYSAUX tablespace. (...) Every database must have an undo tablespace. (ang.).
  11. a b Robert G. Freeman: Oracle Database 10g. Nowe możliwości. Gliwice: Helion, 2004/12. ISBN 83-7361-699-3. (pol.).
  12. a b Managing Undo. W: Oracle Database Administrator’s Guide, 11g Release 2 (11.2). Oracle, 2011/12. (ang.).
  13. a b Managing Security for Oracle Database Users. W: Oracle Database Security Guide 11g Release 2 (11.2). Oracle, 2012/04. (ang.).
  14. Database Limits. W: Oracle Database Reference, 11g Release 2 (11.2). Oracle, 2011/09. (ang.).