zarządzanie strukturą bazy danych oracle...
TRANSCRIPT
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 1 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
Zarządzanie strukturą bazy danych Oracle11g
Wstęp Baza danych Oracle przechowuje dane użytkowników oraz własne dane słownikowe w następujących
strukturach logicznych:
przestrzenie tabel
segmenty
extenty
bloki bazodanowe
Przestrzenie tabel fizycznie składają się z plików systemu operacyjnego (systemu plików). Z kolei blok
bazodanowy odpowiada jednemu lub wielokrotności fizycznego bloku w systemie operacyjnym.
Przestrzenie tabel Każda instancja bazy danych posiada conajmniej 4 prekonfigurowane przestrzenie tabel:
SYSTEM
SYSAUX
TEMP
UNDO
Aby sprawdzić jakie przestrzenie tabel występują w bazie danych należy skorzystać z tabeli
DBA_TABLESPACES LUB V$TABLESPACE np:
SELECT TABLESPACE_NAME, BLOCK_SIZE, STATUS FROM DBA_TABLESPACES;
Przestrzenie tabel składają się z jednego lub wielu plików osadzonych w systemie plików widoczne przez
komendy systemu operacyjnego Linux:
ls /u01/app/oracle/oradata/orcl/*.dbf
Standardowym rozszerzeniem plików danych jest .dbf, ale można nadać każde inne rozszerzenie w
zależności od przyjętego standardu nazewniczego.
Aby dowiedzieć się, jakie pliku należą do jakich przestrzeni tabel należy z poziomu SQLPLUS wykonać
następujące zapytanie na tabeli DBA_DATA_FILES lub V$DATAFILES:
SELECT FILE_NAME, TABLESPACE_NAME FROM DBA_DATA_FILES;
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 2 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
opis kolumn w tych tabelach i widokach można uzyskać poleceniem DESC:
DESC DBA_TABLESPACES
DESC DBA_DATA_FILES
DESC V$DATAFILE
Tworzenie nowej przestrzeni tabel Różne obiekty wymagają różnych parametrów przestrzeni tabel stąd potrzeba tworzenia odrębnych
przestrzeni pod tabele, indeksy czy zmaterializowane widoki.
Aby utworzyć przestrzeń tabel należy zalogować się jako użytkownik SYS przez SQLPLUS:
sqlplus sys as sysdba
Następnie wykonać polecenie:
CREATE TABLESPACE MY_USERS DATAFILE
‘/u01/app/oracle/oradata/orcl/my_users01.dbf’ SIZE 20M AUTOEXTEND ON;
Powyższe polecenie tworzy przestrzeń tabel MY_USERS z podanym plikiem o wielkości początkowej
20MB z możliwością rozszerzania.
Do istniejącej przestrzeni tabel można również dodać kolejny plik poleceniem:
ALTER TABLESPACE MY_USERS ADD DATAFILE
‘/u01/app/oracle/oradata/orcl/my_users.dbf02’ SIZE 10M AUTOEXTEND ON;
Od tej chwili przestrzeń tabel MY_USERS zawiera dwa pliki fizyczne.
Zarządzanie przestrzeniami tabel Przestrzenie tabel mogą być wprowadzane przez administratora lub ze względu na błąd w kilku
statusach:
ONLINE – normalny tryb pracy
OFFLINE – przestrzeń tabel wyłączona z pracy
READ-WRITE – do zapisu i odczytu danych
READ ONLY – tylko do odczytu.
Zmiana statusu odbywa się za pomocą polecenia:
ALTER TABLESPACE MY_USERS READ ONLY;
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 3 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
ALTER TABLESPACE MY_USERS READ WRITE
Przechodzenie w tryb OFFLINE może odbywać się na kilka sposobów:
NORMAL– wszystkie niezapisane dane w pamięci są zapisywane do plików przestrzeni tabel. Jest
wykonywany Checkpoint. Ponowne wprowadzenie w tryb Online nie wymaga odtwarzania.
TEMPORARY – wykonuje się wtedy gdy niektóre pliki przestrzeni tabel są uszkodzone lub
niedostępne. Ponowne wprowadzenie w tryb ONLINE wymaga odtwrzania dla uszkodzonych
plików.
IMMEDIATE – natychmiastowe wprowadzenie przestrzeni w tryb OFFLINE bez wykonania
Checkpoint-u. Ta opcja jest możliwa jeśli baza działa w trybie ARCHIVELOG.
ALTER TABLESPACE MY_USERS OFFLINE NORMAL;
ALTER TABLESPACE MY_USERS OFFLINE TEMPORARY;
Ponowne wprowadzenie przestrzeni tabel w tryb ONLINE wymaga wydania polecenia: ALTER TABLESPACE MY_USERS ONLINE;
Utrata pliku przestrzeni tabel W przypadku kiedy w wyniku awarii utracimy plik przestrzeni tabel i nie jest to plik należący do
przestrzeni SYSTEM lub SYSAUX to należy wprowadzić w stan OFFLINE nie całą przestrzeń tabel, ale
tylko ten jeden plik. Załóżmy że startujemy bazę danych i któryś z plików .dbf nie istnieje lub jest
uszkodzony.
STARTUP;
DATABASE MOUNTED.
ORA-01157: CANNOT IDENTIFY/LOCK DATA FILE 5 - SEE DBWR TRACE FILE
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/users02.dbf'
Baza uruchomi się tylko w trybie MOUNT (plik kontrolny zostanie odczytany). Należy brakujący plik
wprowadzić w tryb OFFLINE następującym poleceniem:
ALTER DATABASE DATAFILE ‘/u01/app/oracle/oradata/orcl/users02.dbf'
OFFLINE DROP;
Klauzulę OFFLINE DROP stosujemy kiedy baza jest w trybie NOARCHIVELOG czyli pliki redo log nie są
kopiowane do archive log. Jeśli baza działa w trybie ARCHIVELOG to wystarczy klauzula OFFLINE.
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 4 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
Po odtworzniu utraconego pliku (np. przez dogranie go z kopii) można ponownie przywrócić go w tryb
ONLINE:
ALTER DATABASE DATAFILE ‘/u01/app/oracle/oradata/orcl/users02.dbf'
ONLINE;
Powyższa procedura zadziała tylko wtedy kiedy brakujący plik został poprawnie zamknięty przy
zamykaniu bazy danych i został utracony przed jej ponownym startem. W innym przypadku jeśli baza
działa w trybie NOARCHIVELOG Oracle zaleca usunięcie całej przestrzeni tabel bo może nie być możliwe
odtworzenie jej do właściwego momentu w czasie.
Szczegółowe informację o logicznej alokacji obiektów bazy danych Tabele przechowywane sa w przestrzeniach tabel i jej plikach. Dla obiektów takie jak tabele czy indeksy
baza tworzy Segmenty, a w nich Extent-y, które składają się z ciągłego obszaru Bloków bazodanowych.
Informacja o Segmentach znajduje się w widoku DBA_SEGMENTS. Szczegóły alokacjo Extent-ów można
znaleźć w widoku DBA_EXTENTS np:
SELECT SEGMENT_NAME, TABLESPACE_NAME, BYTES, BLOCKS, EXTENTS
FROM DBA_SEGMENTS WHERE SEGMENT_NAME=’TEST_TABLE’;
SELECT EXTENT_ID, BLOCKS, FILE_ID
FROM DBA_EXTENTS WHERE SEGMENT_NAME='TEST_TABLE';
Następujące kolumny oznaczają
SEGMENT_NAME - odnosi się do nazwy obiektu czyli nazwy tabeli czy indeksu
BYTES - określa rozmiar w bajtach danego segmentu lub extentu.
BLOCKS – ilość bloków bazy danych w segmencie lub extencie
FILE_ID – identyfikator pliku przestrzeni tabel. Aby uzyskać ścieżkę do pliku przestrzeni tabel
to trzeba to wyciągnąć z widoku DBA_DATA_FILES.
Przestrzenie tabel o różnych rozmiarach bloku Każda przestrzeń tabel może mieć inny rozmiar bloku dlatego dla każdej przestrzeni tabel można to
sprawdzić zapytaniem:
SELECT TABLESPACE_NAME, BLOCK_SIZE FROM DBA_TABLESPACES;
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 5 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
Blok to najmniejsza porcja informacji odczytywana i zapisywana w operacjach I/O (wejscia/wyjścia z
urządzeń dyskowych). W przypadku dużych obiektów np. tabelach o długich kolumnach czy dużych
indeksów warto jest, aby były one przechowywane w przestrzeniach tabel o większym rozmiarze bloku
bo dużo szybciej baza jest w stanie odczytać te samą ilość danych (używając mniejszej ilości operacji
I/O). Stąd potrzeba tworzenia różnych przestrzeni tabel z różnym rozmiarem bloku. Aby było to możliwe
należy dodatkowo zarezerwować odpowiedni obszar w SGA (DB Buffer Cache) o takim samym rozmiarze
bloku. Służą do tego parametry:
DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE
Domyślmy rozmiar bloku jest określany parametrem DB_BLOCK_SIZE i najczęściej jest równy 4kB lub
8kB. Wartości parametrów sprawdzamy:
SHOW PARAMETER DB_BLOCK_SIZE
SHOW PARAMETER CACHE_SIZE
Chcąc stworzyć przestrzeń tabel o rozmiarze bloku 16k należy ustawić odpowiedni parameter
poleceniem ALTER SYSTEM:
ALTER SYSTEM SET DB_16K_CACHE_SIZE=8M;
Następnie stworzyć przestrzeń tabel o rozmiarze bloku 16kB:
CREATE TABLESPACE MY_USERS_16K DATAFILE
'/u01/app/oracle/oradata/orcl/my_users_16k.dbf' SIZE 1M BLOCKSIZE 16K;
Po utworzeniu tabel czy indeksów w tej przestrzeni tabel można z widoków DBA_SEGMENTS i
DBA_EXTENTS sprawdzić właściwy rozmiar bloku tworzonych segmentów.
Zarządzanie strukturą logiczną i fizyczną bazy w Enterprise Manager Za pomocą graficznego narzędzia Enterprise Manager można również zarządzać przestrzenią bazy
danych. Uruchamianie EM było ćwiczone na poprzednich zajęciach. W ramach przypomnienia:
Uruchomienie LISTENER-a – wymagane do poprawnego działania EM
lsnrctl start
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 6 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
Uruchomienie EM:
emctl start dbconsole
Po uruchomieniu EM należy otworzyć przeglądarkę i zalogować się jako SYS/oracle connect as SYSDBA.
Następnie wybrać zakładkę Server i link Tablespace:
Ćwiczenia
Ćwiczenie 1 – Sprawdzanie parametrów istniejących przestrzeni tabel
1. Korzystając z SQLPLUS:
a. Uruchomić instancję bazy
b. Sprawdzić jakie posiada aktualnie przestrzenie tabel
c. Dla każdej przestrzeni tabel zidentyfikować pliki danych
d. Sprawdzić domyślny rozmiar bloku w bazie danych
e. Sprawdzić następujące parametry przestrzeni tabel SYSTEM i SYSAUX:
i. rozmiar bloku
ii. łączną zaalokowaną liczbę extentów
iii. łączny zajmowany rozmiar w [kB]
2. Korzystając z Enterprise Manager-a
a. Sprawdzić te same dane co w punkach 1 a-d.
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 7 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
Ćwiczenie 2 – Zarządzanie przestrzeniami tabel
Wszystkie operacje w tym ćwiczeniu wykonać w SQLPLUS
1. Utworzyć nową przestrzeń tabel ‘MY_TS1’ z plikiem danych o rozmiarze 2 MB.
2. Dodać do przestrzeni ‘MY_TS1’ drugi plik o rozmiarze 4 MB
3. Utworzyć dowolną tabele o nazwie ‘MY_TABLE’ w przestrzeni ‘MY_TS1’
4. Wprowadzić 2 wiersze danych
5. Wprowadzić przestrzeń tabel ‘MY_TS1’ w tryb READ ONLY
6. Spróbować zaaktualizować wcześniej wprowadzone wiersze
7. Wprowadzić przestrzeń tabel ‘MY_TS1’ w tryb OFFLINE
8. Wyświetlić wszystkie wiersze z tabeli ‘MY_TABLE’;
9. Przywrócić przestrzeń ‘MY_TS1’ w tryb ONLINE
Ćwiczenie 3 – Niestandardowe przestrzenie tabel
Wszystkie operacje w tym ćwiczeniu wykonać w SQLPLUS
1. Utworzyć przestrzeń tabel ‘MY_TS_16K’ o rozmiarze bloku 16 [kB] i rozmiarze pliku 4MB
2. Utworzyć dowolną tabele o nazwie ‘MY_TABLE_16K’ w tej przestrzeni tabel
3. Dodać kilka wierszy do tej tabeli
4. Sprawdzić ile extentów i bloków zajmuje ta tabela.
5. Usunąć przestrzeń tabel ‘MY_TS_16K’
Ćwiczenie 4 – Odzyskiwanie po awarii
1. Zamknąć instancję bazy w sposób czysty (np immediate)
2. Zlokalizować w systemie plików plik danych do przestrzeni tabel ‘MY_TS1’
3. Zmienić nazwę pliku danych tej przestrzeni tabel symulując jego utratę (patrz komendy Linuxa
w opisie laboratorium nr 1 do zmany nazwy plików)
4. Uruchomić bazę danych w trybie OPEN
5. Jeśli baza nie będzie chciała się otworzyć to utracony plik danych wprowadzić w tryb OFFLINE.
6. Przełączyć bazę w tryb OPEN
7. Przywrócić poprawną nazwę plikowi danych komendą Linuxa
8. Przełączyć plik danych w tryb ONLINE
9. Sprawdzić czy można odczytać wiersze tabeli ‘MY_TABLE’
Zarządzanie strukturą bazy danych Oracle 11g
Strona: 8 | Administracja bazą Oracle 11g | Studia Podyplomowe SGGW | Laboratorium nr 3 i 4
Odpowiedzi do zadań
Ćwiczenie 1 1. sqplus sys as sysdba
a. STARTUP;
b. SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
c. SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;
d. SHOW PARAMETER DB_BLOCK_SIZE
e. SYSTEM i SYSAUX
i. SELECT TABLESPACE_NAME, BLOCK_SIZE FROM DBA_TABLESPACES WHERE
TABLESPACE_NAME=’SYSTEM’ OR TABLESPACE_NAME=’SYSAUX’
ii. SELECT SUM(BYTES)/1024, SUM(EXTENTS), TABLESPACE_NAME FROM
DBA_SEGMENTS WHERE TABLESPACE_NAME=’SYSTEM’ OR
TABLESPACE_NAME=’SYSAUX’ GROUP BY TABLESPACE_NAME
iii. j.w
2. Korzystając z EM wg. instrukcji w tym skrypcie.
Ćwiczenie 2 1. CREATE TABLESPACE MY_TS1 DATAFILE ‘/u01/app/oracle/oradata/orcl/my_ts1.dbf’ SIZE 2M
AUTOEXTEND ON;
2. ALTER TABLESPACE MY_TS1 ADD DATAFILE ‘/u01/app/oracle/oradata/orcl/my_ts2.dbf’ SIZE 4M;
3. CREATE TABLE MY_TABLE (ID NUMBER, NAME VARCHAR2(20)) TABLESPACE MY_TS1;
4. INSERT INTO MY_TABLE VALUES (1, ‘AAAAAA’); COMMIT;
5. ALTER TABLESPACE MY_TS1 READ ONLY;
6. UPDATE MY_TABLE SET NAME=’BBBBB’;
7. ALTER TABLESPACE MY_TS1 OFFLINE NORMAL;
8. SELECT * FROM MY_TABLE;
9. ALTER TABLESPACE MY_TS1 ONLINE;
Ćwiczenie 3
1. Aby utworzyć przestrzeń tabel o rozmiarze bloku 16kB należy wykonać kilka operacji:
a. ALTER SYSTEM SET DB_16K_CACHE_SIZE=8M;
b. CREATE TABLESPACE MY_TS_16K DATAFILE
‘/u01/app/oracle/oradata/orcl/my_ts_16k.dbf’ SIZE 4M BLOCKSIZE 16K;
2. CREATE MY_ TABLE_16K (ID NUMBER, NAME VARCHAR2(20)) TABLESPACE MY_TS_16K;
3. INSERT INTO MY_TABLE_16K VALUES (1, ‘DDDDDD’); COMMIT;
4. SELECT SEGMENT_NAME, BLOCKS, EXTENTS, BYTES FROM DBA_SEGMENTS WHERE
SEGMENT_NAME='MY_TABLE_16K';
5. DROP TABLESPACE MY_TS_16K INCLUDING CONTENTS;